资源描述:
《操作系统分区内存管理系统》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实用文案洛阳理工学院实验报告系别计算机系班级学号姓名课程名称计算机操作系统实验日期2015/10/26实验名称分区内存管理成绩实验目的:过本次实验,加深对进程概念的理解,进一步掌握进程状态的转变及进程调度策略。实验条件:计算机一台,软件vc++6.0一、实验目的通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。二、实验原理设计程序模拟内存的动态分区内存管理方法。内存分区使用分区(说明)表进行管理,采用最先适应算法从分区表中寻找空闲区进行分配,内存回收时不考虑与相邻空闲区的合并。假定系统的内
2、存共640K,初始状态为操作系统本身占用40K。t1时刻,为作业A、B、C分配80K、60K、100K、的内存空间;t2时刻作业B完成;t3时刻为作业D分配50K的内存空间;t4时刻作业C、A完成;t5时刻作业D完成。要求编程序分别输出t1、t2、t3、t4、t5时刻内存的空闲分区。三、实验内容#include#include#include#include#definemaxPCB10#definemaxPart10#defineTRU
3、E1#defineFALSE0typedefstructPCB_type标准文档实用文案{charname;//进程名intaddress,len,valid;//进程所占分区起止、长度、该PCB有效标识(1有效,0无效)}PCB;typedefstructseqlist{PCBPCBelem[maxPCB];//maxPCB为系统中允许的最多进程数inttotal;//系统中实际的进程数}PCBseql;typedefstructPartition{intaddress,len,valid;//分区起址、长度、
4、有效标识(1空闲,0已分配)}Part;typedefstructPartlist{PartPartelem[maxPart];//maxPart为系统中可能的最多分区数intsum;//系统中实际的分区数}Partseql;intlength=640;//系统有640的空闲PCBseql*pcbl;Partseql*partl;voidinitpcb(PCBseql*vpcbl,intadr);//初始化进程表vpcblvoidgetprint();voidinitpart();//初始化分区表vpartlvo
5、idrequest(charname,intlen);//进程name请求len大小的内存voidrelease(charname);//回收name进程所占内存空间voidprint();//输出内存空闲分区/*voidprintp()标准文档实用文案{inti;for(i=0;i<(pcbl->total);i++){printf("%c",pcbl->PCBelem[i].name);}}*/voidinitpcb(PCBseql*vpcbl,intadr)//初始化进程表vpcbl{inti=1;PC
6、B*pcbelem;inttel;charc;pcbelem=vpcbl->PCBelem;while(TRUE){printf("请输入第%d进程名称",i++);vpcbl->total++;scanf("%c",&(pcbelem->name));printf("请输入进程所需内存");scanf("%d",&tel);pcbelem->len=tel;pcbelem->address=adr+tel;pcbelem->valid=1;pcbelem++;printf("是否要继续输入进程(Enter-是E
7、sc-否)");fflush(stdin);c=getch();fflush(stdin);if(c==27)标准文档实用文案{break;}}}voidinitpart(){charc,name;intlen;printf("请输入你的操作R.请求内存;P.输出空闲分区;S.强制进程结束;(N/n).退出");fflush(stdin);c=getchar();fflush(stdin);while(c!='N'
8、
9、c!='n'){if(c=='R'
10、
11、c=='r'){fflush(stdin);//做
12、输入的时候要清空缓冲区printf("请输入请求内存进程的名称,长度");scanf("%c,%d",&name,&len);request(name,len);//进程请求内存}elseif(c=='P'
13、
14、c=='p'){printf("t*****VIEWbegin*****");getprint();printf("t*****VIEWend*****