资源描述:
《分区内存管理实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、洛阳理工学院实验报告系别计算机与信息工程系班级B100503学号B10050309姓名赵贺龙课程名称计算机操作系统实验日期2012-11-1实验名称分区内存管理成绩实验目的:通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。实验条件:装有vc6.0的微机一台。实验原理:设计程序模拟内存的动态分区内存管理方法。内存空闲区使用分区(说明)表进行管理,采用最先适应算法从分区表中寻找空闲区进行分配,内存回收时不考虑与相邻空闲区的合并。假定系统的内存共640K,初始状态为操作系统本身占用40K。t1时刻,为作业A、B、
2、C分配80K、60K、100K、的内存空间;t2时刻作业B完成;t3时刻为作业D分配50K的内存空间;t4时刻作业C、A完成;t5时刻作业D完成。要求编程序分别输出t1、t2、t3、t4、t5时刻内存的空闲分区。16/16实验内容:源代码:包含头文件link.h,Windows.h和主程序内存管理.cpp头文件link.h#include"stdio.h"#include"malloc.h"//进程Pcb类型及系统PCB表(顺序表)的描述#definemaxPCB15#definemaxPart10#defineTRUE1typed
3、efstruct{charname;//进程名intaddress,len,valid;//进程所占分区起止和长度,//该PCB有效标示1有效,0无效。}PCB;typedefstruct{PCBPCBelem[maxPCB];inttotal;}PCBseql;//分区类型及分区说明表(顺序表)的描述typedefstruct{intaddress,len,valid;}Part;16/16typedefstruct{PartPartelem[maxPart];intsum;//该时刻的分区数}Partseql;voidinitP
4、cb(PCBseql*vpcbl,intiosm);//初始化进程表vpcbl;voidinitpart();//初始化分区表vpartl;voidrequest(charname,intlen);//进程name请求len大小的内存voidrelease(charname);//回收进程name所占的空间voidgetprint();//输出内存空闲分区主程序:内存管理.cpp#include"link.h"#includeintlength=640;//系统有640的空闲PCBseql*pcbl=(PCBs
5、eql*)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++);16/16vpcbl->total++;scanf("%c",&(pcbelem->name));printf("请输入进程
6、所需内存");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'
7、
8、c=='n'){break;}}}voidinitpart(){charc,name;intlen;printf("请输入你的操作R.请求内存;P.输出空闲分区;S.强制进程结束;(
9、N/n).退出");fflush(stdin);c=getchar();fflush(stdin);while(c!='N'
10、
11、c!='n'){16/16if(c=='R'
12、
13、c=='r'){fflush(stdin);//做输入的时候要清空缓冲区printf("请输入请求内存进程的名称,长度");scanf("%c,%d",&name,&len);request(name,len);//进程请求内存}elseif(c=='P'
14、
15、c=='p'){printf("t*****VIEWbegin*****");getprin
16、t();printf("t*****VIEWend*****");}elseif(c=='S'
17、
18、c=='s'){printf("请输入想要回收的进程名称");scanf("%c",&name);release(name);