- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
深 圳 大 学 实 验 报 告
课程名称: 操作系统
实验项目名称: 内存管理实验
学院: 计算机与软件学院
专业: 计算机科学与技术
指导教师: 罗秋明
报告人: 学号: 班级:
实验时间: 2014-11-21
实验报告提交时间: 2014-11-30
教务部制
实验目的与要求:
加深对内存分配与使用操作的直观认识;
掌握Linux操作系统的内存分配与使用的编程接口;
了解Linux操作系统中进程的逻辑编程地址和物理地址间的映射;
实验内容:
可以使用Linux或其它Unix类操作系统;
学习该操作系统提供的分配、释放的函数使用方法;
学习该操作系统提供的进程地址映射情况的工具;
实验过程、方法、步骤:
操作部分:
借助google工具查找资料,学习使用Linux进程的内存分配、释放函数;
借助google工具查找资料,学习Linux proc文件系统中关于内存影射的部分内容(了解/proc/pid/目录下的maps、status、smap等几个文件内部信息的解读);
编写程序,连续申请分配三个512MB空间,然后释放第二个512MB空间。然后再分配1024MB,记录该进程的虚存空间变化(/proc/pid/maps),每次操作前后检查/proc/pid/status文件中关于内存的情况,简要说明虚拟内存变化情况。
设计一个程序测试出你的系统单个进程所能分配到的最大虚拟内存空间为多大。
编写一个程序,分配256M内存空间(或其他足够大的空间),检查分配前后/proc/pid/status文件中关于虚拟内存和物理内存的使用情况,然后每隔4KB间隔将相应地址的字节数值增1,再次检查/proc/pid/status文件中关于内存的情况,对比前后两次内存情况,说明所分配物理内存(物理内存块)的变化。
(3)
在mem3.c中编写相关程序,对指针a,b,c分别分配512M内存,然后释放b的512MB空间。然后再分配1024MB。代码如下:
#includeunistd.h
#includestdio.h
#includestdlib.h
#includemath.h
int main(){
printf(PID=%d\n,getpid());
int *d,*a,*b,*c;
printf(Program begins.\n);
getchar();
a=(int*)malloc(pow(2,27)*sizeof(int));
b=(int*)malloc(pow(2,27)*sizeof(int));
c=(int*)malloc(pow(2,27)*sizeof(int));
printf(3 new space has already created.Type to free space b.\n);
getchar();
free(b);
printf(Space b is free.Type to create new space d.\n);
getchar();
d=(int*)malloc(pow(2,28)*sizeof(int));
printf(Space d has been created.\n);
getchar();
return 0;
}
运行代码,查看虚存空间。
在释放空间b前,存储空间如下:
用maps查看:
用status查看:
释放b空间后:
Maps:
Status:
建立新空间d后:
Maps:
Status:
由以上结果可以看到,在分配内存空间前,程序的虚拟内存大小为3836kB,即3M,分配连续三个512M 的空间后,虚拟内存变成1576712kB=15
文档评论(0)