分区内存管理系统实验报告材料

上传人:feng****ing 文档编号:53626194 上传时间:2022-02-10 格式:DOC 页数:18 大小:146KB
返回 下载 相关 举报
分区内存管理系统实验报告材料_第1页
第1页 / 共18页
分区内存管理系统实验报告材料_第2页
第2页 / 共18页
分区内存管理系统实验报告材料_第3页
第3页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
洛阳理工学院实验报告系别计算机与信息工程系班级B100503学号B10050309姓名赵贺龙课程名称计算机操作系统实验日期2012-11-1实验名称分区内存管理成绩实验目的:通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法 的思想。实验条件:装有vc6.0的微机一台。实验原理:设计程序模拟内存的动态分区内存管理方法。内存空闲区使用分区(说明) 表进行管理,米用最先适应算法从分区表中寻找空闲区进行分配,内存回收时 不考虑与相邻空闲区的合并。假定系统的内存共 640K,初始状态为操作系统本身占用 40K。t1时刻,为作 业 A B C分配80K、60K、100K、的内存空间;t2时刻作业 B完成;t3时刻为 作业D分配50K的内存空间;t4时刻作业 C、A完成;t5时刻作业 D完成。要 求编程序分别输出 t1、t2、t3、t4、t5时刻内存的空闲分区。实验内容:源代码:包含 头文件link.h , Windows.h和主程序内存管理.cpp头文件link.h#i nclude stdio.h#i nclude malloc.h/进程Pcb类型及系统PCB表(顺序表)的描述#defi ne maxPCB 15#define maxPart 10#defi ne TRUE 1 typedef structchar n ame; / 进程名int address,le n,valid;进程所占分区起止和长度,/ 该PCB有效标示1 有效,0无效。PCB;typedef structPCB PCBelemmaxPCB;int total;PCBseql;/分区类型及分区说明表(顺序表)的描述typedef structint address,le n, valid;Part;typedef structPart PartelemmaxPart;int sum; /该时刻的分区数Partseql;/初始化进程表初始化分区表 vpartl;void initPcb(PCBseql* vpcbl,int iosm); vpcbl;void in itpart();/void request(char n ame,i nt len);/存void release(char n ame);/void getpri nt();进程 name请求len大小的内回收进程name所占的空间/输出内存空闲分区主程序:内存管理.cpp#i nclude li nk.h#in cludevWi ndows.hint length = 640 ;/系统有 640 的空闲PCBseql *pcbl = (PCBseql*)malloc(sizeof(PCBseql); Partseql *partl = (Partseql*)malloc(sizeof(Partseql); void in itPcb(PCBseql* vpcbl,i nt adr)int i=1;PCB *pcbelem;int tel;char c;pcbelem=vpcbl-PCBelem; while(TRUE)printf(请输入第4进程名称,i+);vpcbl-total+;sea nf(%c,&(pcbelem-n ame);printf(请输入进程所需内存);sea nf(%d, &tel);pcbelem-le n=tel;pcbelem-address=adr+tel;pcbelem-valid=1;pcbelem+;printf(是否要继续输入进程? (丫/y) 是/(N/n) 否);fflush(stdi n);c = getchar();fflush(stdi n);if(c=N|c= n)break;void in itpart()char c,n ame;int len;prin tf(请输入你的操作R.请求内存;P.输出空闲分区;S.强制进程结束;(N/n). 退出 n);fflush(stdi n);c= getchar();fflush(stdi n);while(c!=N|c!= n)if(c=R|c=r)fflush(stdi n);/做输入的时候要清空缓冲区printf(请输入请求内存进程的名称,长度);sca nf(%c,%d,&n ame,&len);request( name,le n); /进程请求内存else if(c=P|c=p)prin tf(t*VIEW begi n*n);getpri nt();prin tf(t*VIEW end *n);else if(c=S|c=s)printf(请输入想要回收的进程名称n);sca nf(%c,&n ame);release( name);printf(请输入你的操作R.请求内存;P.输出空闲分区;S.强制进程结束n);fflush(stdi n);c= getchar();fflush(stdi n);void in it4IOS(i nt tem)Part *n ewPart = & partl-PartelemO;tem = tem0?(temaddress = 0;n ewPart-le n = tem ;n ewPart-valid = 1;partl-sum+;printf(已为操作系统分配了%d kb内存n,tem);n ewPart = & partl-Partelem1;n ewPart-address = tem ;len gth=tem = len gth -tem;tem = temle n = tem ;n ewPart-valid = 0;partl-sum+;printf(为操作系统分配后剩余的内存%d kb内存n,tem); int getTagByPcb(char n ame)/有提提/* int i=0;char tem ;PCB * n ewPcb =0;n ewPcb = pcbl-PCBelem;while (TRUE)tem = n ewPcb-n ame;if(n ame!=tem)n ewPcb+;i+;else break;return i;*/int i=0;for(;itotal);i+)if(n ame != pcbl-PCBelemi. name)i+;else break;return i;/分配出去就会产生一个碎片将元素后移动一位voidArrayToRight On e(i nt i)/Part tem ;int len g=partl-sum;while(le ngi)partl-Partelemle ng.addresspartl-Partelemle ng-1.address;partl-Partelemle ng.le n = partl-Partelemle ng-1 .len; partl-Partelemle ng.valid = partl-Partelemle ng-1.valid; len g-;partl-sum+;int fin dByle n(i nt len)int i=0;while(isum)if (partl-Partelemi.valid=0)if (le nPartelemi .len)return i;i+;return 0;void request(char n ame,i nt len)/Part *suipia n;char tem;int i; /是name进程的下标int temByle n;int temByPcb ;temByPcb=getTagByPcb( name);while (temByPcbpcbl-total)printf(找不到进程名 %c,重新输入丫/N,name);fflush(stdi n);tem = getchar();if(tem=Y)fflush(std in);/做输入的时候要清空缓冲区printf(请输入请求内存进程的名称,长度);scan f(%c,%d,&n ame,&len);if (le npcbl-PCBelemtemByPcb.le n)printf(”您请求的容量大于您进程最大要求量 %d,pcbl-PCBelemtemByPcb.le n);return;if (tem=N)return ;/找到一块len内存if(fin dByle n(len )=0)/sort2part(); /收集内存 代码没写if(i=fi ndByle n(le n)=0)printf( 警告内存已满,无法分配 n);/分配出去就会产生一个碎片 将元素后移动一位ArrayToRightO ne(i);/ 直接对partl-Partelemi 赋值并加入一个碎片temByle n = partl-Partelemi .len-le n;partl-Partelemi .len = len;partl-Partelemi.valid = 1;/新的碎片partl-Partelemi+1.addresspartl-Partelemi.address+partl-Partelemi .len;partl-Partelemi+1en =temByle n; partl-Partelemi+1.valid=0;/更新pcb的状态和容量pcbl-PCBelemtemByPcb.address = partl-Partelemi.address;pcbl-PCBelemtemByPcb.le n= pcbl-PCBelemtemByPcb.le n-le n;/更新pcb的lenpcbl-PCBelemtemByPcb.valid = 1 ;void release(char n ame)int i=0;int adress,le n;if( getTagByPcb( name)PCBelemgetTagByPcb( name).valid=0)prin tf(%c还没有运行,请先运行n ,n ame);printf(现在正回收%c的内存n,name);adress = pcbl-PCBelemgetTagByPcb( name).address;len = pcbl-PCBelemgetTagByPcb( name).le n;while (isum)if (adress=partl-Partelemi.address)partl-Partelemi.valid=0;i+;void getpri nt()int i;printf(空闲分区 beginn);for (i=O;isum;i+)if (partl-Partelemi.valid=0)printf(第%d 块空闲内存 起止为 %d,容量为 dn ,i,partl-Partelemi.address,partl-Partelemi .len);printf(空闲分区 endn);void mai n()char tem;int k,OSsize = 40; const int M=25; partl-sum=O; pcbl-total=0; system(color fc);/初始化操作系统prin tf(n);prin tf(n);prin tf(n);prin tf(n);prin tf(n);prin tf(n);prin tf(n);prin tf(n);printf(程序加载中=);for(k=1;kM;k+)printf( );Sleep(200); system(cls);*n);*prin tf(ttt*欢迎使用分区内存管理模拟系统*n);prin tf(ttt*prin tf(ttt*请你按照提示操作*n);prin tf(ttt*Sleep(3000); system(cls);in it4IOS(OSsize);/为进程分配内存ini tPcb(pcbl,OSsize);in itpart();sca nf(%c, &tem);原始数据纪录:输入数据:a,80,b60,c,100,P;R,a,60,R,b,50,R,c,100 S,b P,S,a,P输出数据:E) MAS作系絡瘵二内存管理-1 nJ xj程序加载中 = JdU確作黎豁趣二1血bug内存琶理z*欢迎使用分区内存管理模拟系统派恆 K 科 # !( 科 Mi M W if Mi W M *请你按照提示操作*棘料诵粧料科供耳舞耳廉舞科供群淸帯魅料科K 耳舞裤廉舞苦贰秣卿-|n| Xjnl x可M:懐岸雄-盘二1D由ug内茗琶理诡40 khFW 二序価0 kb内存翠盘Ii&R9 XsS? 是/肠否Y 程名称E左程? 是/ 否Y100P a 寫熾飜龄踹醴瀟区;S.强制进程结束;.退岀强制进程结束强制进程结束謬翱容益雲盤闲分区;8.*VI EW bejfin*空闲分Xbefin第1块ifflFl存起止为4叫容量为6亟空闲分区endwmmmwUIEU end mtot请输入你禹操作乩请耒内存吧输岀空闲分区;$请输入你的操作R-请求内存汀-输出空闲分区;驭强制进程结束 R10S:S.强制进程结束材输入想要回收的讲程名称B现在正回收B的内存请镒入你戲操雅R-请求内存汛输岀空闲分呂S-强制进程结束*41 IEW begin*空闲分区bag in 亠-第令块卷內存起止为20叫容量为叫祁空闭分区end*411EW end请输入你的操作R请求内存認输岀空闲分産;S-强制进程结束 备输入想要回收的进程名称G驚嬲留鄒?请求内存認输出空闲分区i; S.强制进程結束P*h*HJ IEW begin空闲分区第迂块空询丙存起止为100-量为工砸當3块誉内存起止为羽孔容量为呛邻工I闱芬区 end*h*h*(JIEW end “朋如肌童请输入你的操作乩请求内存吧输出空闲分区;S.强制进程结束实验总结:在这次实验过程中,有很多知识都不是很清楚,很多都要查书才能弄清楚,在 编程过程中也出现了很多错误,最终在同学的帮助下完成了这次实验内容,从 中了解到了自己的编程能力急需要提高,关键还是在于数据结构学的不是很好, 下面应该着重把数据结构再好好复习一下。实用文档
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划


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

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


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