




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
存储管理实验实验报告1实验目的设计一个固定分区分配的存储管理方案,并编程模拟实现分区的分配和回收过程。 对分区的管理法可以是循环首次适应算法 或 最佳适应算法。2实验原理通过采用最佳适应算法的固定式分区分配的存储管理方案,模拟实现分区的分配和回收过程。可以假定每个作业都是批处理作业,并且不允许动态申请内存。为实现分区的分配和回收,可以设定一个分区说明表,按照表中的有关信息进行分配,并根据分区的分配和回收情况修改该表。3采用算法及算法描述本程序通过手动输入内存大小的输入,然后通过冒泡法对分区的大小进行排序,采用最佳适应算法构建整个算法的架构,该算法要求所有的空闲分区按照其容量的大小进行从小到大的顺序形成一空闲分区链。因而,第一次如果能够满足要求的空闲区,必然是最佳的。该算法也存在一定的缺陷,因为每次分配后切割下来的剩余部分总是最小的,故而存储器中会留下许多难以利用的小空余区。4数据结构描述,程序模块划分头文件模块:#include stdio.h#include windows.h#include #include #define PCB_NUM 5 /模拟进程数量 #define INT 800/内存分区数量 struct MemInfint addr; /分区起始地址 int size; /分区大小int state; /0表示空闲,0时表示已分配,存储的是进程ID ; struct PCB int pcbID; /进程ID int size; /进程大小 int RunState; /运行状态,0表示就绪,1表示已分配内存正运行,2表示运行结束且退出内存 int TolTime; /总需要运行时间 int RunTime; /已运行时间 ; PCB pcbListPCB_NUM;菜单模块:void menu() /菜单 int m;system(cls);printf(nntt*ttn);printf(tttt固定分区存储程序演示n);printf(tt*ttn);printf(nttt1.执行程序.);printf(nttt0.退出程序.);scanf(%d,&m);switch(m)case 1: break;case 0: system(cls);menu(); break;default: system(cls);break;排序模块:void paixu(struct MemInf* ComMem,int n) int i,j,t; for(j=0;jn-1;j+) for(i=0;iComMemi+1.size) t=ComMemi.size; ComMemi.size=ComMemi+1.size; ComMemi+1.size=t; void paixu2() int i,j,t; for(j=0;j4;j+) for(i=0;ipcbListi+1.size) t=pcbListi.size; pcbListi.size=pcbListi+1.size; pcbListi+1.size=t; 主函数模块:void main()DD: menu();char ch;int i,j,n,a=0;struct MemInf* ComMem; system(cls); printf(你要分多少个分区呢,请输入数值吧:); /个分区大小的输入 scanf(%d,&n); ComMem=(struct MemInf*)malloc(n*sizeof(struct MemInf); printf(请划分内存固定大小分区:n);/划分内存固定大小分区 for(i=0;i=INT) printf(超出规定内存范围); ch=getchar(); ch=getchar(); goto DD; paixu(ComMem,n);/初始化就绪进程队列pcbList0.pcbID =1;pcbList0.RunState =0; /运行状态,0表示就绪,1表示已分配内存正运行,2表示运行结束且退出内存 pcbList0.size=30;pcbList0.RunTime =0; pcbList0.TolTime =5;pcbList1.pcbID =2;pcbList1.RunState =0;pcbList1.size=15;pcbList1.RunTime =0;pcbList1.TolTime =6;pcbList2.pcbID =3;pcbList2.RunState =0;pcbList2.size=50;pcbList2.RunTime =0;pcbList2.TolTime =3;pcbList3.pcbID =4;pcbList3.RunState =0;pcbList3.size=120;pcbList3.RunTime =0;pcbList3.TolTime =4; pcbList4.pcbID =5;pcbList4.RunState =0;pcbList4.size=125;pcbList4.RunTime =0;pcbList4.TolTime =9;ch=getchar();ch=getchar();while(pcbListPCB_NUM-1.RunTime pcbListPCB_NUM-1.TolTime)for(j=0;jPCB_NUM;j+)/内存分配for(i=0;i= pcbListj.size) /如果该内存分区空间大于或等于进程空间,即可以把该空闲内存分区分配给该进程 ComMemi.state =pcbListj.pcbID ;pcbListj.RunState=1;/内存回收if(pcbListj.RunTime =pcbListj.TolTime) /如果该进程运行时间大于或等于总需时间,即可回收该进程占用内存 for(i=0;in;i+)if(ComMemi.state = pcbListj.pcbID) ComMemi.state = 0; /内存状态变为 未分配pcbListj.RunState=2; /进程状态变为 运行完毕 /运行时间加1for(i=0;iPCB_NUM;i+)if (pcbListi.RunState=1 & pcbListi.RunTime pcbListi.TolTime) /处于运行状态且运行时间小于总需时间的进程,运行时间加1 pcbListi.RunTime+; 显示模块:printf(进程IDt 进程大小t 状态t 需要时间t 运行时间n);for(i=0;iPCB_NUM;i+)printf(%dt %dtt %dt %dtt %dn,pcbListi.pcbID,pcbListi.size, pcbListi.RunState, pcbListi.TolTime ,pcbListi.RunTime);printf(分区IDt 分区大小t 状态n);for(i=0;in;i+)printf(%dt %dtt %dn,i,ComMemi.size ,ComMemi.state );printf(按回车键继续.n); getchar(); /按任意键继续(分步执行,以便观察内存分配回收)5主模块流程图、各子模块流程图6程序源代码及调试#include stdio.h#include windows.h#include #include #define PCB_NUM 5 /模拟进程数量 #define INT 800/内存分区数量 struct MemInfint addr; /分区起始地址 int size; /分区大小int state; /0表示空闲,0时表示已分配,存储的是进程ID ; struct PCB int pcbID; /进程ID int size; /进程大小 int RunState; /运行状态,0表示就绪,1表示已分配内存正运行,2表示运行结束且退出内存 int TolTime; /总需要运行时间 int RunTime; /已运行时间 ; PCB pcbListPCB_NUM;void menu() /菜单 int m;system(cls);printf(nntt*ttn);printf(tttt固定分区存储程序演示n);printf(tt*ttn);printf(nttt1.执行程序.);printf(nttt0.退出程序.);scanf(%d,&m);switch(m)case 1: break;case 0: system(cls);menu(); break;default: system(cls);break;void paixu(struct MemInf* ComMem,int n) int i,j,t; for(j=0;jn-1;j+) for(i=0;iComMemi+1.size) t=ComMemi.size; ComMemi.size=ComMemi+1.size; ComMemi+1.size=t; void paixu2() int i,j,t; for(j=0;j4;j+) for(i=0;ipcbListi+1.size) t=pcbListi.size; pcbListi.size=pcbListi+1.size; pcbListi+1.size=t; void main()DD: menu();char ch;int i,j,n,a=0;struct MemInf* ComMem; system(cls); printf(你要分多少个分区呢,请输入数值吧:); scanf(%d,&n); ComMem=(struct MemInf*)malloc(n*sizeof(struct MemInf); printf(请划分内存固定大小分区:n);/划分内存固定大小分区 for(i=0;i=INT) printf(超出规定内存范围); ch=getchar(); ch=getchar(); goto DD; paixu(ComMem,n);/初始化就绪进程队列pcbList0.pcbID =1;pcbList0.RunState =0; /运行状态,0表示就绪,1表示已分配内存正运行,2表示运行结束且退出内存 pcbList0.size=30;pcbList0.RunTime =0; pcbList0.TolTime =5;pcbList1.pcbID =2;pcbList1.RunState =0;pcbList1.size=15;pcbList1.RunTime =0;pcbList1.TolTime =6;pcbList2.pcbID =3;pcbList2.RunState =0;pcbList2.size=50;pcbList2.RunTime =0;pcbList2.TolTime =3;pcbList3.pcbID =4;pcbList3.RunState =0;pcbList3.size=120;pcbList3.RunTime =0;pcbList3.TolTime =4; pcbList4.pcbID =5;pcbList4.RunState =0;pcbList4.size=125;pcbList4.RunTime =0;pcbList4.TolTime =9;ch=getchar();ch=getchar();while(pcbListPCB_NUM-1.RunTime pcbListPCB_NUM-1.TolTime)for(j=0;jPCB_NUM;j+)/内存分配for(i=0;i= pcbListj.size) /如果该内存分区空间大于或等于进程空间,即可以把该空闲内存分区分配给该进程 ComMemi.state =pcbListj.pcbID ;pcbListj.RunState=1;/内存回收if(pcbListj.RunTime =pcbListj.TolTime) /如果该进程运行时间大于或等于总需时间,即可回收该进程占用内存 for(i=0;in;i+)if(ComMemi.state = pcbListj.pcbID) ComMemi.state = 0; /内存状态变为 未分配pcbListj.RunState=2; /进程状态变为 运行完毕 /运行时间加1for(i=0;iPCB_NUM;i+)if (pcbListi.RunState=1 & pcbListi.RunTime pcbListi.TolTime) /处于运行状态且运行时间小于总需时间的进程,运行时间加1 pcbListi.RunTime+; /显示模块printf(进程IDt 进程大小t 状态t 需要时间t 运行时间n);for(i=0;iPCB_NUM;i+)printf(%dt %dtt %dt %dtt %dn,pcbListi.pcbID,pcbListi.size, pcbListi.RunState, pcbListi.TolTime ,pcbListi.RunTime)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【淮安】2025年江苏淮安市金湖县事业单位公开招聘工作人员96人笔试历年典型考题及考点剖析附带答案详解
- 第四章氧化还原反应第四节元素标准电极电势图及其应用无机化学
- 第三节组合体本节主要内容00课件
- 云霓课件教学设计
- 小学生科普显微镜课件
- 2025年小学语文教师招聘考试测试卷及答案
- 基金从业人员资格考试资料2025年含答案
- 2025矿山开采项目社会稳定风险评估与风险评估产业创新报告
- 口才课件自我介绍模板
- 企业房产租金管理办法
- 《尿路感染诊治指南》课件
- 特征值优化设计-洞察分析
- 市场营销策划岗位招聘笔试题与参考答案(某大型央企)
- 2024年高考英语新课标1卷读后续写教学设计
- 市医院开展“小金库”专项治理工作方案
- PDCA提高便秘患者肠镜检查肠道准备合格率
- 淮南新东辰控股集团有限责任公司招聘笔试题库2024
- 03D201-4 10kV及以下变压器室布置及变配电所常用设备构件安装
- 人民网删除稿件(帖文)申请登记表
- (正式版)YBT 6328-2024 冶金工业建构筑物安全运维技术规范
- 诊所中药饮片清单
评论
0/150
提交评论