实验三存储管理实验_第1页
实验三存储管理实验_第2页
实验三存储管理实验_第3页
已阅读5页,还剩4页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验三存储管理实验一. ?目的要求:?1、通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。?2、通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。二. 实验内容:1、设计一个固定式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。可以假定每个作业都是批处理作业,并且不允许动态申请内存。为实现分区的分配和回收,可以设定一个分区说明表,按照表中的有关信息进行分配,并根据分区的分配和回收情况修改该表。算法描述:本算法将内存的用户区分成大小相等的四个的分区,设一张分区说明表用来记录分区,其中分区的表项有分区的大小、起始地址和分区的状态,当

2、系统为某个作业分配主内空间时,根据所需要的内存容量,在分区表中找到一个足够大的空闲分区分配给它,然后将此作业装入内存。如果找不到足够大的空闲分区,则这个作业暂时无法分配内存空间,系统将调度另一个作业。当一个作业运行结束时,系统将回收改作业所占据的分区并将该分区改为空闲。算法原程序#include""#include""#include<>#include<>#definePCB_NUM5行程序.");printf("nttt0.退出程序.");scanf("%d",&m);

3、switch(m)case1:break;case0:system("cls");menu();break;default:system("cls");break;)voidpaixu(structMemInf*ComMerpintn)(inti,j,t;for(j=0;j<n-1;j+)for(i=0;i<n-j-1;i+)if(ComMepi.size>ComMepi+1.size)(t=ComMem.size;ComMemi.size=ComMem+1.size;ComMemi+1.size=t;)voidpaixu2()(int

4、i,j,t;for(j=0;j<4;j+)for(i=0;i<4-j;i+)if(pcbListi.size>pcbListi+1.size)(t=pcbListi.size;pcbListi.size=pcbListi+1.size;pcbListi+1.size=t;)voidmain()(DDmenu();charch;inti,j,n,a=0;structMemInf*ComMemsystem("cls");printf("你要分多少个分区呢,请输入数值吧:");scanf("%d",&n);ComM

5、em=(structMemInf*)malloc(n*sizeof(structMemInf);printf("请划分内存固定大小分区:n");ize);if(i=0)ComMemiaddr=40;ddr=ComMefri-1.addr+ComMe(ii-1.size;tate=0;ize+a;if(a>=INT)(printf("超出规定内存范围”);ch=getchar();ch=getchar();gotoDD;paixu(ComMemn);cblD=1;pcbList0.RunState=0;ize=30;pcbList0.RunTime=0;pcb

6、List0.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;pcbList

7、4.pcbID=5;pcbList4.RunState=0;pcbList4.size=125;pcbList4.RunTime=0;pcbList4.TolTime=9;ch=getchar();ch=getchar();while(pcbListPCB_NUM1.RunTime<pcbListPCB_NUM.TolTime)for(j=0;j<PCB_NUMj+)tate=0&&pcbListj.RunState=0)ize>=pcbListj.size)tate=pcbListj.pcbID;pcbListj.RunState=1;)unTime>

8、=pcbListj.TolTime)tate=pcbListj.pcbID)ComMemi.state=0;unState=2;unState=1&&pcbListi.RunTime<pcbListi.TolTime)unTime+;cbID,pcbListi.size,pcbListi.RunState,pcbListi.TolTime,pcbListi.RunTime);printf("分区IDt分区大小t状态n");for(i=0;i<n;i+)printf("%dt%dtt%dn”,i,ComMem.size,ComMem.st

9、ate);printf("按回车键继续.n");getchar();tart=-1;freesi.length=0;strcpy(freesi.tag,"free");occupysi.start=-1;occupysi.length=0;strcpy(occupysi.tag,"");free_quantity=0;occupy_quantity=0;voidwritedata()tart);printf("输入第d个分区的长度:n",j);scanf("%d",&freesi.len

10、gth);if(fp=fopen(fname,"wb")=NULL)printf("错误,文件打不开,请检查文件名n");for(i=0;i<SIZE;i+)if(fwrite(&freesi,sizeof(structnode),1,fp)!=1)printffclose(fp);("文件写入错误!n");voidreaddata()tart<=freest.start)freesfreesfreesfreesfreesfrees=j;free_quantityfree_quantityi.i.t.t.start

11、=freesi.start;.length=freesi.length;voidview()printf("nnstart=freest.start;length=freest.length;start=freesfree_quantitylength=freesfree_quantity.start;.length;,freesi.length,freesi.tag);已分配分区表显示如下:n");tartprintf("起始地址t长度t占用作业名n");for(j=0;j<occupy_quantity;j+)printf("%6dk

12、t%10dkt%stn”,occupysj.start,occupysj.length,occupysj.tag);getchar();getchar();voidearliest()ength>=joblength)f=1;printf("n当前没有能满足你申请长度的空闲内存,请稍候再试n");getchar();)else(ength>=joblength)(t=1;)j+;)j-;occupysoccupy_quantity.start=freesj.start;ag,jobname);occupysoccupy_quantity.length=joble

13、ngth;occupy_quantity+;if(freesj.length>joblength)(freesj.start+=joblength;freesj.length-=joblength;)else(for(i=j;i<free_quantity-1;i+)(freesi.start=freesi+1.start;freesi.length=freesi+1.length;)free_quantity-;)printf("作业申请内存空间成功!n");getchar();getchar();)void)excellent()ength>=jobl

14、ength)f=1;)if(f=0)(printf("n当前没有能满足你申请长度的空闲内存,请稍候再试n");getchar();)elseength>=joblength)(=1;+;for(i=0;i<free_quantity;i+)(&&freesi.length<freesj.length)if(freesi.length>=joblengthj=i;).start=freesj.start;ag,jobname);.length=joblength;occupysoccupy_quantityoccupysoccupy_q

15、uantityoccupy_quantity+;if(freesj.length>joblength)(freesj.start+=joblength;freesj.length-=joblength;)else(for(i=j;i<free_quantity-1;i+)(freesi.start=freesi+1.start;freesi.length=freesi+1.length;)free_quantity-;)printf("作业申请内存空间成功!n");getchar();getchar();)voidworst()(charjobname20;in

16、tjoblength,f=0;inti,j;printf("请输入作业名:n");scanf("%s",&jobname);printf("输入作业的长度:n")scanf("%d",&joblength);for(i=0;i<free_quantity;i+)(if(freesi.length>=joblength)f=1;)printf("n当前没有能满足你申请长度的空闲内存,请稍候再试n");getchar();getchar();)elseength>=

17、joblength)(t=1;)j+;)j-;for(i=0;i<free_quantity;i+)(if(freesi.length>=joblength&&freesi.length>freesj.length)j=i;)occupysoccupy_quantity.start=freesj.start;ag,jobname);occupysoccupy_quantity.length=joblength;occupy_quantity+;if(freesj.length>joblength)(freesj.start+=joblength;free

18、sj.length-=joblength;)else(for(i=j;i<free_quantity-1;i+)(freesi.start=freesi+1.start;freesi.length=freesi+1.length;)free_quantity-;)printf("作业申请内存空间成功!n");getchar();getchar();)voidmain()(initial();intn;writedata();system("cls");readdata();for(;)(sort();printfprintfprintf("

19、;*n"("*n"("*欢迎使用可变分区存储管理系统*n"printf("*1.显示空闲表和分配表*n"printf("*2.首次适应算法*n"printf("*3.最佳适应算法*n"printf("*4.最坏适应算法*n"printf("*0.退出系统*n"printfprintf("*5,("*5,printfprintfscanf("*5,("请输入您要选择的项目:n");("%d

20、",&n););););););););););););forif(n<0|(printfscanfn>4)("没有这个选项,请重新输入("%d",&n);!");elsebreak;)switch(n)(case0:printf("感谢您的使用!再见!n");exit(0);case1:view();break;case2:earliest();break;case3:excellent();break;case4:worst();break;)system("cls");)

21、测试结果:使用首次适应算法的结果:使用最佳适应算法:使用最坏适应算法:内存过满:3、编写并调试一个段贞式存储管理的地址转换的模拟程序。首先设计好段表、贞表,然后给出若干个有一定代表性的地址,通过查找段表贞表后得到转换的地址。要求打印转换前的地址,相应的段表,贞表条款及转换后的地址,以便检查。代码实现#include<iostream>#include<string>usingnamespacestd;typedefstructQuick(intqs;um»ssss1.flag>>ssss1.plen>>ssss1.psta;cout&l

22、t;<"请初始化第"<<ss1<<"段的页表,输入两个数据页表状态和对应块号"<<endl;for(intsss1=0;sss1<ssss1.plen;sss1+)(pagess1sss1.num=sss1;cout<<"请输入该段第"<<sss1<<"个页表的页表状态和对应块号"<<endl;cin>>pagess1sss1.flag>>pagess1sss1.block;um=bn;cout<<"请输入第"<<bn<<"个内存块里的作业内容"<<endlcin>>workbn.str;)lag!=1|page皿flag!=1)cout<<"该页不在内存请输入一页在内存中的作为快表,请输入要作为快表的段号和页号"<<endl;cin>>>>)=page.block;();menu)voidchange()cout<<"请输入要转化的逻辑地址,段号s,段内页号p,页内偏移

温馨提示

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

评论

0/150

提交评论