第十周固定分区分配管理实验

上传人:dus****log 文档编号:104757666 上传时间:2022-06-11 格式:DOC 页数:9 大小:35KB
收藏 版权申诉 举报 下载
第十周固定分区分配管理实验_第1页
第1页 / 共9页
第十周固定分区分配管理实验_第2页
第2页 / 共9页
第十周固定分区分配管理实验_第3页
第3页 / 共9页
资源描述:

《第十周固定分区分配管理实验》由会员分享,可在线阅读,更多相关《第十周固定分区分配管理实验(9页珍藏版)》请在装配图网上搜索。

1、存储管理实验实验报告1实验目的设计一个固定分区分配的存储管理方案,并编程模拟实现分区的分配和回收过程。 对分区的管理法可以是循环首次适应算法 或 最佳适应算法。2实验原理通过采用最佳适应算法的固定式分区分配的存储管理方案,模拟实现分区的分配和回收过程。可以假定每个作业都是批处理作业,并且不允许动态申请内存。为实现分区的分配和回收,可以设定一个分区说明表,按照表中的有关信息进行分配,并根据分区的分配和回收情况修改该表。3采用算法及算法描述本程序通过手动输入内存大小的输入,然后通过冒泡法对分区的大小进行排序,采用最佳适应算法构建整个算法的架构,该算法要求所有的空闲分区按照其容量的大小进行从小到大的

2、顺序形成一空闲分区链。因而,第一次如果能够满足要求的空闲区,必然是最佳的。该算法也存在一定的缺陷,因为每次分配后切割下来的剩余部分总是最小的,故而存储器中会留下许多难以利用的小空余区。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 ; stru

3、ct 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

4、);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;ipcbLi

5、sti+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);/划分内存固定

6、大小分区 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

7、.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

8、=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) /如果该进程运行时间大

9、于或等于总需时间,即可回收该进程占用内存 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 需要时

10、间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主模块流程图、各子模块流

11、程图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 TolTim

12、e; /总需要运行时间 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 Me

13、mInf* 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;i

14、nt 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;pcbList

15、0.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 =

16、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+)/

17、内存分配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; /进程状态

18、变为 运行完毕/运行时间加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 ,

19、pcbListi.RunTime);printf(分区IDt 分区大小t 状态n);for(i=0;in;i+)printf(%dt %dtt %dn,i,ComMemi.size ,ComMemi.state );printf(按回车键继续.n); getchar(); /按任意键继续(分步执行,以便观察内存分配回收)7程序运行调试和结果8实验体会实践是检验知识过不过关的关键,通过对该实验的操作,我们发现了许多之前的问题,但是我们组积极分工进行操作,通过连续奋斗,终于基本掌握了整个程序的运行原理与增强了对最佳适应算法的理解,同时更进一步认识了操作系统,更重要的是我们认识到了团地精神的重要性。

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