文档介绍:--------------------------校验:_____________-----------------------日期:_____________分区内存管理实验报告洛阳理工学院实验报告系别计算机与信息工程系班级B100503学号B10050309姓名赵贺龙课程名称计算机操作系统实验日期2012-11-1实验名称分区内存管理成绩实验目的:通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。实验条件:装有vc实验原理:设计程序模拟内存的动态分区内存管理方法。内存空闲区使用分区(说明)表进行管理,采用最先适应算法从分区表中寻找空闲区进行分配,内存回收时不考虑与相邻空闲区的合并。假定系统的内存共640K,初始状态为操作系统本身占用40K。t1时刻,为作业A、B、C分配80K、60K、100K、的内存空间;t2时刻作业B完成;t3时刻为作业D分配50K的内存空间;t4时刻作业C、A完成;t5时刻作业D完成。要求编程序分别输出t1、t2、t3、t4、t5时刻内存的空闲分区。实验内容:源代码:,//进程Pcb类型及系统PCB表(顺序表)的描述#definemaxPCB15#definemaxPart10#RUE1typedefstruct{charname;//进程名intaddress,len,valid;//进程所占分区起止和长度,//该PCB有效标示1有效,0无效。}PCB;typedefstruct{PCBPCBelem[maxPCB];inttotal;}PCBseql;//分区类型及分区说明表(顺序表)的描述typedefstruct{ intaddress,len,valid;}Part;typedefstruct{ PartPartelem[maxPart]; intsum;//该时刻的分区数}Partseql;voidinitPcb(PCBseql*vpcbl,intiosm);//初始化进程表vpcbl;voidinitpart();//初始化分区表vpartl;voidrequest(charname,intlen);//进程name请求len大小的内存voidrelease(charname);//回收进程name所占的空间voidgetprint(); //输出内存空闲分区主程序:=640;//系统有640的空闲PCBseql*pcbl=(PCBseql*)malloc(sizeof(PCBseql));;Partseql*partl=(Partseql*)malloc(sizeof(Partseql));voidinitPcb(PCBseql*vpcbl,intadr){ inti=1; PCB*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("是否要继续输入进程?(Y/y)是/(N/n)否"); fflush(stdin); c=getchar(); fflush(stdin); if(c=='N'||c=='n') { break; }}}voidinitpart(){ charc,name; intlen; printf(";;;(N/n).退出\n");fflush(stdin);c=getchar();fflush(stdin);while(c!='N'||c!='n'){ if(c=='R'||c=='r'){ fflush(stdin);//做输入的时候要清空缓冲区 printf("请输入请求内存进程的名称,长度"); scanf("%c,%d",&name,&len); request(name,len);//进程请求内存}elseif(c=='P'||c=='p'){ printf("\t*****VIEWbegin*****\n"); getprint(); printf("\t*****VIEWend*****\n");}elseif(c=='S'||c=='s'){ printf("请输入想要回收的进程名称\n"); scanf("%c",&name