分区内存管理实验报告(共16页)

上传人:_impsvz****pswzcf... 文档编号:51992265 上传时间:2022-02-07 格式:DOC 页数:16 大小:127.50KB
收藏 版权申诉 举报 下载
分区内存管理实验报告(共16页)_第1页
第1页 / 共16页
分区内存管理实验报告(共16页)_第2页
第2页 / 共16页
分区内存管理实验报告(共16页)_第3页
第3页 / 共16页
资源描述:

《分区内存管理实验报告(共16页)》由会员分享,可在线阅读,更多相关《分区内存管理实验报告(共16页)(16页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上洛阳理工学院实验报告系别计算机与信息工程系班级B学号B姓名赵贺龙课程名称计算机操作系统实验日期2012-11-1实验名称分区内存管理成绩实验目的:通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。实验条件:装有vc6.0的微机一台。实验原理:设计程序模拟内存的动态分区内存管理方法。内存空闲区使用分区(说明)表进行管理,采用最先适应算法从分区表中寻找空闲区进行分配,内存回收时不考虑与相邻空闲区的合并。假定系统的内存共640K,初始状态为操作系统本身占用40K。t1时刻,为作业A、B、C分配80K、60K、100K、的内存空间;t2时刻作业B完成;

2、t3时刻为作业D分配50K的内存空间;t4时刻作业C、A完成;t5时刻作业D完成。要求编程序分别输出t1、t2、t3、t4、t5时刻内存的空闲分区。实验内容:源代码:包含 头文件link.h,Windows.h和主程序 内存管理.cpp头文件link.h#include stdio.h#include malloc.h/进程Pcb类型及系统PCB表(顺序表)的描述#define maxPCB 15#define maxPart 10#define TRUE 1typedef struct char name; /进程名 int address,len,valid;/进程所占分区起止和长度, /

3、该PCB有效标示 1有效,0无效。PCB;typedef struct PCB PCBelemmaxPCB; int total;PCBseql;/分区类型及分区说明表(顺序表)的描述typedef structint address,len,valid;Part;typedef structPart PartelemmaxPart;int sum; /该时刻的分区数Partseql;void initPcb(PCBseql* vpcbl,int iosm); /初始化进程表vpcbl;void initpart(); /初始化分区表vpartl;void request(char name,

4、int len); /进程name请求len大小的内存void release(char name); /回收进程name所占的空间void getprint();/输出内存空闲分区主程序:内存管理.cpp#include link.h#includeint length = 640 ;/系统有640 的空闲PCBseql *pcbl = (PCBseql*)malloc(sizeof(PCBseql); ;Partseql *partl = (Partseql*)malloc(sizeof(Partseql);void initPcb(PCBseql* vpcbl,int adr)int i

5、=1;PCB *pcbelem;int tel;char c;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

6、);if(c=N|c=n)break; void initpart()char c,name;int len; printf(请输入你的操作 R.请求内存;P.输出空闲分区; S. 强制进程结束;(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); /进程请求内存 else if(c=P

7、|c=p) printf(t*VIEW begin*n); getprint(); printf(t*VIEW end *n); else if(c=S|c=s) printf(请输入想要回收的进程名称n); scanf(%c,&name); release(name); printf(请输入你的操作 R.请求内存;P.输出空闲分区; S. 强制进程结束 n); fflush(stdin); c= getchar(); fflush(stdin); void init4IOS(int tem)Part *newPart = &partl-Partelem0;tem = tem0?(temadd

8、ress = 0;newPart-len = tem ;newPart-valid = 1;partl-sum+;printf(-已为操作系统分配了%d kb内存n,tem);newPart = &partl-Partelem1;newPart-address = tem ;length=tem = length -tem;tem = temlen = tem ;newPart-valid = 0;partl-sum+;printf(-为操作系统分配后剩余的内存%d kb内存n,tem);int getTagByPcb(char name)/有提提/*int i=0;char tem ; PC

9、B * newPcb =0; newPcb = pcbl-PCBelem; while (TRUE) tem = newPcb-name;if(name!=tem)newPcb+;i+;else break;return i;*/int i=0;for(;itotal);i+)if(name != pcbl-PCBelemi.name)i+;elsebreak;return i;/分配出去就会产生一个碎片 将元素后移动一位voidArrayToRightOne(int i)/Part tem ;int leng=partl-sum;while(lengi)partl-Partelemleng.

10、address = partl-Partelemleng-1.address;partl-Partelemleng.len = partl-Partelemleng-1.len;partl-Partelemleng.valid = partl-Partelemleng-1.valid;leng-;partl-sum+;int findBylen(int len)int i=0;while(isum)if (partl-Partelemi.valid=0) if (lenPartelemi.len) return i; i+;return 0;void request(char name,int

11、 len)/Part *suipian;char tem; int i; /是name进程的下标int temBylen;int temByPcb ;temByPcb=getTagByPcb(name);while (temByPcbpcbl-total) printf(找不到进程名%c,重新输入Y/N,name); fflush(stdin); tem = getchar(); if(tem=Y) fflush(stdin); /做输入的时候要清空缓冲区 printf(请输入请求内存进程的名称,长度); scanf(%c,%d,&name,&len); if (lenpcbl-PCBelem

12、temByPcb.len) printf(您请求的容量大于您进程最大要求量%d,pcbl-PCBelemtemByPcb.len); return; if (tem=N) return ; /找到一块len内存if(findBylen(len)=0)/sort2part(); /收集内存 代码没写if(i=findBylen(len)=0)printf(警告内存已满,无法分配n);/分配出去就会产生一个碎片 将元素后移动一位ArrayToRightOne(i); /直接对partl-Partelemi赋值 并加入一个碎片temBylen = partl-Partelemi.len-len; p

13、artl-Partelemi.len = len;partl-Partelemi.valid = 1;/新的碎片partl-Partelemi+1.address = partl-Partelemi.address+partl-Partelemi.len;partl-Partelemi+1.len =temBylen;partl-Partelemi+1.valid=0;/更新pcb的状态和容量pcbl-PCBelemtemByPcb.address = partl-Partelemi.address;pcbl-PCBelemtemByPcb.len = pcbl-PCBelemtemByPcb

14、.len-len ;/更新pcb的len pcbl-PCBelemtemByPcb.valid = 1 ;void release(char name)int i=0;int adress,len; if( getTagByPcb(name)PCBelemgetTagByPcb(name).valid=0) printf(%c还没有运行,请先运行n,name);printf(现在正回收%c的内存n,name); adress = pcbl-PCBelemgetTagByPcb(name).address; len = pcbl-PCBelemgetTagByPcb(name).len; whi

15、le (isum)if (adress=partl-Partelemi.address)partl-Partelemi.valid=0;i+;void getprint()int i;printf(-空闲分区begin-n); for (i=0;isum;i+) if (partl-Partelemi.valid=0) printf(第%d块空闲内存 起止为%d,容量为%dn,i,partl-Partelemi.address,partl-Partelemi.len); printf(-空闲分区 end-n); void main()char tem;int k,OSsize = 40;con

16、st int M=25;partl-sum=0;pcbl-total=0;system(color fc);/初始化操作系统 printf(n); printf(n); printf(n); printf(n); printf(n); printf(n); printf(n); printf(n); printf(程序加载中); for(k=1;kM;k+) printf(); Sleep(200); system(cls); printf(ttt*n);printf(ttt*欢迎使用分区内存管理模拟系统*n);printf(ttt*n);printf(ttt* 请你按照提示操作 *n);pr

17、intf(ttt*n);Sleep(3000); system(cls); init4IOS(OSsize); /为进程分配内存 initPcb(pcbl,OSsize); initpart(); scanf(%c,&tem);原始数据纪录:输入数据:a,80,b60,c,100,P;R,a,60,R,b,50,R,c,100 S,b P,S,a,P输出数据:实验总结:在这次实验过程中,有很多知识都不是很清楚,很多都要查书才能弄清楚,在编程过程中也出现了很多错误,最终在同学的帮助下完成了这次实验内容,从中了解到了自己的编程能力急需要提高,关键还是在于数据结构学的不是很好,下面应该着重把数据结构再好好复习一下。专心-专注-专业

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!