您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 操作系统实验二-内存管理
1/8洛阳理工学院实验报告系别计算机系班级学号姓名课程名称计算机操作系统实验日期实验名称实验二分区内存管理成绩实验目的:通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。实验条件:微机一台,操作系统:windows7,编程环境:MicrosoftVisualStudio2010。实验原理:设计程序模拟内存的动态分区内存管理方法。内存分区使用分区(说明)表进行管理,采用最先适应算法从分区表中寻找空闲区进行分配,内存回收时不考虑与相邻空闲区的合并。假定系统的内存共640K,初始状态为操作系统本身占用40K。t1时刻,为作业A、B、C分配80K、60K、100K、的内存空间;t2时刻作业B完成;t3时刻为作业D分配50K的内存空间;t4时刻作业C、A完成;t5时刻作业D完成。要求编程序分别输出t1、t2、t3、t4、t5时刻内存的空闲分区。实验内容:#includestdio.h#includestdlib.h#includemalloc.hintj=0;typedefstructPCB_type{charname;intaddress,len,valid;}PCB;typedefstructseqlist{PCBPCBelem[4];inttotal;2/8}PCBseql;typedefstructPartiton{intaddress,len,valid;}Part;typedefstructPartlist{PartPartelem[5];intsum;}Partseql;PCBseql*pcbl;Partseql*partl;voidinitpcb(){pcbl=(PCBseql*)malloc(sizeof(PCBseql));pcbl-total=0;}voidintipart(){partl=(Partseql*)malloc(sizeof(Partseql));partl-Partelem[0].address=40;partl-Partelem[0].len=600;partl-Partelem[0].valid=1;partl-sum=1;}voidrequest(charname,intlen){inti;3/8for(i=0;ipartl-sum;i++){if(partl-Partelem[i].lenlen){pcbl-PCBelem[pcbl-total].address=partl-Partelem[i].address;partl-Partelem[i].address+=len;pcbl-PCBelem[pcbl-total].len=len;partl-Partelem[i].len-=len;pcbl-PCBelem[pcbl-total].name=name;pcbl-PCBelem[pcbl-total].valid=1;pcbl-total++;break;}elseif(partl-Partelem[i].len==len){while(ipartl-sum){partl-Partelem[i]=partl-Partelem[i+1];i++;}partl-sum--;}else{printf(内存分配不足!);printf(\n);}}}voidrelease(charname)4/8{inti;intk;intm;into;intp;intq;Part*s;s=(Part*)malloc(sizeof(Part));for(i=0;ipcbl-total;i++){if(pcbl-PCBelem[i].name==name){partl-sum++;pcbl-PCBelem[i].valid=0;partl-Partelem[partl-sum-1].address=pcbl-PCBelem[i].address;partl-Partelem[partl-sum-1].len=pcbl-PCBelem[i].len;partl-Partelem[partl-sum-1].valid=1;for(k=partl-sum-1;k0;k--){for(m=0;mk;m++){if(partl-Partelem[k].addresspartl-Partelem[m].address){o=partl-Partelem[k].address;p=partl-Partelem[k].len;q=partl-Partelem[k].valid;partl-Partelem[k].address=partl-Partelem[m].address;partl-Partelem[k].len=partl-Partelem[m].len;partl-Partelem[k].valid=partl-Partelem[m].valid;partl-Partelem[m].address=o;5/8partl-Partelem[m].len=p;partl-Partelem[m].valid=q;}}}break;}}}voidprint(){inti;j=j+1;for(i=0;ipartl-sum;i++){printf(t%d时刻.......................空闲分区有:地址%d长度%d\n,j,partl-Partelem[i].address,partl-Partelem[i].len);}}voidmain(){chara,b,c,d;inte,f,g,h;initpcb();intipart();printf(请输入进程a的名字和所需的内存空间的大小:);scanf(%c,%d,&a,&e);getchar();request(a,e);printf(请输入进程b的名字和所需的内存空间的大小:);6/8scanf(%c,%d,&b,&f);getchar();request(b,f);printf(请输入进程c的名字和所需的内存空间的大小:);scanf(%c,%d,&c,&g);getchar();request(c,g);print();printf(\n);printf(进程%c结束................正在释放进程%c\n,b);release(b);print();printf(\n);printf(请输入进程d的名字和所需的内存空间的大小:);scanf(%c,%d,&d,&h);getchar();request(d,h);print();printf(\n);printf(进程结束..................正在释放进程%c\n,a);release(a);printf(进程结束..................正在释放进程%c\n,c);release(c);print();printf(\n);printf(进程结束..................正在释放进程%c\n,d);release(d);print();printf(\n);}7/8原始数据纪录:输入数据:T1时刻a80,b60,c100,输出空闲分区T2时刻,进程结束,释放进程b,输出空闲分区T3时刻输入d50后,输出空闲分区T4时刻进程结束,释放a,c,输出空闲分区T5时刻进程结束,释放d,输出空闲分区输出数据:实验总结:本次实验还是比较难的,操作系统这本书上也没有什么例子供参考,所以只能靠自己的理解以及平时上课的积累才能完成此次实验。这次实验让我们掌握了内存的分配,回收算法的思想,对内存管理有了进一步的认识。总的来说,实验的意义就是为了进一步对C语言的认识与理解,根据不同的题目,能够很快想出相应的思路。8/8
本文标题:操作系统实验二-内存管理
链接地址:https://www.777doc.com/doc-5802058 .html