实验3内存管理.docx
- 文档编号:30196617
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:15
- 大小:2.09MB
实验3内存管理.docx
《实验3内存管理.docx》由会员分享,可在线阅读,更多相关《实验3内存管理.docx(15页珍藏版)》请在冰豆网上搜索。
实验3内存管理
深圳大学实验报告
课程名称:
操作系统
实验项目名称:
内存管理实验
学院:
计算机与软件学院
专业:
计算机科学与技术
********
报告人:
学号:
班级:
实验时间:
2014-11-21
实验报告提交时间:
2014-11-30
教务部制
实验目的与要求:
加深对内存分配与使用操作的直观认识;
掌握Linux操作系统的内存分配与使用的编程接口;
了解Linux操作系统中进程的逻辑编程地址和物理地址间的映射;
实验内容:
可以使用Linux或其它Unix类操作系统;
学习该操作系统提供的分配、释放的函数使用方法;
学习该操作系统提供的进程地址映射情况的工具;
实验过程、方法、步骤:
操作部分:
1)借助google工具查找资料,学习使用Linux进程的内存分配、释放函数;
2)借助google工具查找资料,学习Linuxproc文件系统中关于内存影射的部分内容(了解/proc/pid/目录下的maps、status、smap等几个文件内部信息的解读);
3)编写程序,连续申请分配三个512MB空间,然后释放第二个512MB空间。
然后再分配1024MB,记录该进程的虚存空间变化(/proc/pid/maps),每次操作前后检查/proc/pid/status文件中关于内存的情况,简要说明虚拟内存变化情况。
4)设计一个程序测试出你的系统单个进程所能分配到的最大虚拟内存空间为多大。
5)编写一个程序,分配256M内存空间(或其他足够大的空间),检查分配前后/proc/pid/status文件中关于虚拟内存和物理内存的使用情况,然后每隔4KB间隔将相应地址的字节数值增1,再次检查/proc/pid/status文件中关于内存的情况,对比前后两次内存情况,说明所分配物理内存(物理内存块)的变化。
(3)
1在mem3.c中编写相关程序,对指针a,b,c分别分配512M内存,然后释放b的512MB空间。
然后再分配1024MB。
代码如下:
#include
#include
#include
#include
intmain(){
printf("PID=%d\n",getpid());
int*d,*a,*b,*c;
printf("Programbegins.\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("3newspacehasalreadycreated.Typetofreespaceb.\n");
getchar();
free(b);
printf("Spacebisfree.Typetocreatenewspaced.\n");
getchar();
d=(int*)malloc(pow(2,28)*sizeof(int));
printf("Spacedhasbeencreated.\n");
getchar();
return0;
}
运行代码,查看虚存空间。
在释放空间b前,存储空间如下:
用maps查看:
用status查看:
释放b空间后:
Maps:
Status:
建立新空间d后:
Maps:
Status:
由以上结果可以看到,在分配内存空间前,程序的虚拟内存大小为3836kB,即3M,分配连续三个512M的空间后,虚拟内存变成1576712kB=1539M=512M*3+3M,等于理论值。
释放空间b后,内存空间大小变成1052420kB=1027M=512M*2+3M,等于理论值。
再建立一个1024M的空间后,虚存为2101000kB=2051M=1027M+1024M,等于理论值。
而物理内存大小基本不变。
Maps查看:
分配内存前:
34f457a000-34f457f000rw-p0000000000:
000
7f9df8004000-7f9df8007000rw-p0000000000:
00
7f9df801a000-7f9df801d000rw-p0000000000:
000
分配3个512M内存后:
34f457a000-34f457f000rw-p0000000000:
000
7f9d98001000-7f9df8007000rw-p0000000000:
000
7f9df801a000-7f9df801d000rw-p0000000000:
000
释放中间内存后:
34f457a000-34f457f000rw-p0000000000:
000
7f9d98001000-7f9db8002000rw-p0000000000:
000
7f9dd8003000-7f9df8007000rw-p0000000000:
000
7f9df801a000-7f9df801d000rw-p0000000000:
000
创建1024M内存后:
34f457a000-34f457f000rw-p0000000000:
000
7f9d58000000-7f9db8002000rw-p0000000000:
000
7f9dd8003000-7f9df8007000rw-p0000000000:
000
7f9df801a000-7f9df801d000rw-p0000000000:
000
再由maps内存分配的情况看,在分配内存前,虚存地址为7f9df8004000-7f9df8007000连续分配3个512M空间后,虚存地址变成了7f9d98001000-7f9df8007000,显然首地址增加了。
释放中间的512M空间后,虚存地分成了址7f9d98001000-7f9db8002000和7f9dd8003000-7f9df8007000两个地址,虚存空间从中间截断,一分为二。
此时再创建1024M空间后,虚存空间变成7f9d58000000-7f9db8002000和7f9dd8003000-7f9df8007000,结果正确。
(4)建立文件mem4.c,代码实现如下:
#include
#include
#include
#include
intmain(){
inti;
char*a[100000];
printf("Thepidis:
%d\n",getpid());
for(i=0;i<10000000000;i++){
a[i]=(char*)malloc(pow(2,30)*sizeof(char));//每次分配1G内存
if(a[i]==NULL){
printf("Themaxvirtualmemoryis%dG\n",i);//输出内存
getchar();
break;
}
}
return0;
}
输出结果:
用status查看更详细的内存使用情况:
由以上结果可以知道,虚存空间最大值为137436438472kB,约38633G。
(5)代码如下:
#include
#include
#include
#include
intmain(){
printf("Theidis%d.\n",getpid());
int*a;
inti,n,k;
n=(int)pow(2,30);
k=(int)pow(2,12);
a=(int*)malloc(n*sizeof(int));//分配4G空间
//for(i=0;i //a[i]=0; //getchar(); printf("Typetovalue.\n"); getchar(); for(i=0;i a[i]++; printf("Typetoendtheprogram.\n"); getchar(); return0; } 运行: 分配空间前 分配空间后 数值加1后: 由第五题截图可以知道,①在对数值进行增一操作前,程序的物理内存基本没有变化,在444kB左右。 隔一定的距离给数值进行增一操作后,物理内存迅速增大到2045244kB。 ②分配空间后,在增一操作前后虚拟内存基本没有变化,都是4198144kB。 附: 在maps文件中,一共有6列数据,其中: 第一列代表内存段的虚拟地址 第二列代表执行权限,r=可读,w=可写,x=可执行,p=私有s=共享 第三列代表在进程地址里的偏移量 第四列映射文件的主设备号和次设备号 第五列映像文件的节点号,即inode 第六列是映像文件的路径 实验结论: 通过这次实验,我了解了用maps,status,smap查看相关的文件信息以及能比较熟练地对文件内容进行解读。 对数组中的数据进行运算时,程序的物理内存有相应的增加。 用malloc对指针进行内存分配时,物理内存增加,虚存地址会相应地增加。 随着空间的释放和新的分配,虚存地址出现相应的增减情况。 95 完成了本实验的全部内容,截图丰富,分析详细准确。 指导教师签字: 年月日 备注: 注: 1、报告内的项目或内容设置,可根据实际情况加以调整和补充。 2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 内存 管理