还剩22页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
族猪孩大专4操作系统试验汇报试验二动态分辨别配算法学生:学号:学院:U系另专业:试验时间:汇报时间:ifhf1-Startp-Overhf1-Start=p-Starthfl==hh=h-next;else ifhf1-Startp-Overhf1-Start=p-Starthf2-next=hf1-next;hf2=hfl;if!h〃检查有无空闲区块,当空闲区块是原空闲块时会清除重新分派h二p;elseifh-next=NULLp-next=h;h=p;else for;hp;hp=hp-nextifp-Sizehp-Sizep-next=hp;hf-next=p;break;hf=h;if!hphf-next=p;int pos=p-Start+p-Size,jugy=0;Table*phl=h;forTable*ph=h;ph;ph=ph-next ifph-Start==posjugy=l;Table*pphl=h;Table*pph=h;for;pph;pph=pph-next ifpph-Over==p-Start//3pph1-next=pph-next;ph1-next=ph-next;Table*n=newTablepph-Start,ph-Size+pph-Size+p-Size;PXh,n;break;pphl=pph;if!pph//4ph-Size=ph-Size+p-Size;ph-Start=p-Start;PXh,ph;phi二ph;if!jugyTable*pphl=h;forTable*pph二h;pph!jugy;pph=pph-nextforPro*pp1=pp;pp1;pp1=pp1-nextifp-Start==pp1-Start+pp l-Size//2ifp-Start+p-Size==h2-StartTable*n=new Tablep-Start,p-Size+h2-Size;PXh,n;jugy=l;break;}if!jugyTable*n=new Tablep-Start,p-Size;PXh,n;jugy=l;break;else ifp-Start+p-Size==pp1-Start//Iifh1-Over==p-StartTable*n=new Tableh1-Start,p-Size+h1-Size;PXh,n;jugy=l;break;}if!jugyTable*n=new Tablep-Start,p-Size;PXh,n;jugy=l;break;pphl=pph;if!jugyforTable*pph=h;pph;pph=pph-next//5ifpph-Over==p-Startpph-Size=pph-Size+p-Size;pph-Over=pph-Over+p-Size;PXh,pph;break;if!hTable*x=new TabIep-Start,p-Size;h=x;void SFPro*ph,char N[],Table*h〃释放作业intjugy=O;Pro*pp=ph;if!strcmpph-Name,NZJKXh,ph,ph;ph=ph-next;jugy=l;else forPro*p=ph-next;p;p=p-nextif!strcmpN,p-Name〃完毕作业的删除删除作业对象+增长空闲区块对象,并检查与否可以合并ZJKXh,p,ph;pp-next=p-next;jugy=l;PP=P;if!jugycout«M队歹U中没有这个作业!«endl;void JRPro*ph,Pro*p,Table*h〃加入作业Pro*pp=ph;int jugy=O;〃分割空闲区块Table*hpp=h;forTable*hp二h;hp;hp=hp-nextifp-Size=hp-Sizep-Start=hp-Start;ifp-Start+p-Size==1000ifhpp==hph=NULL;elsehpp-next=NULL;jugy=l;elsehp-Size=hp-Size-p-Size;hp-Start=p-Start+p-Size;jugy=l;break;ifjugyif!phph=p;elsefor;pp-next;pp=pp-next〃作业队列尾部插入新作业对象pp-next=p;
一、试验内容编写一种内存动态分辨别配模拟程序,模拟内存的分派和回收日勺完整过程一种好日勺计算机系统不仅要有一种足够容量啊、存取速度高的、稳定可靠的主存储器,并且要能合理地分派和使用这些存储空间当顾客提出申请存储器空间时,存储管理必须根据申请者的规定,按一定的方略分析主存空间的I使用状况,找出足够的空闲区域分派给申请者当作业撤离或积极偿还主存资源时,,则存储管理要收回作业占用的主存空间或偿还部分主存空间主存的分派和回收时实现与主存储器的管理方式有关的,通过本试验协助学生理解在可变分区管理方式下应怎样实现主存空间的J分派和回收
三、试验原理模拟在可变分区管理方式下采用最先适应算法实现主存分派和回收⑴可变分区方式是按作业需要的I主存空间大小来分割分区的当要装入一种作业时,根据作业需要的I主存量查看与否有足够的空闲空间,若有,则按需耍量分割一种分辨别配给该作业;若无,则作业不能装入伴随作业的装入、撤离,主存空间被提成许多种分区,有日勺分区被作业占用,而有的分区是空闲日勺例如起址长度状态第一栏14K12K未分配为了阐明哪些区是空闲日勺,可以用来装入新作业,必须要有一张空闲区阐明表,格式如下:elsecoutvv”没有足够的空间分派!H«endl;int mainCOUtVV”这是一种采用最先适应算法次序分派算法分派主存空间的小测试n«endl;coutvv”这里一共有lOOOkb内存可供使用,有三种选择”vendl«l.载入一种作业endl”
2.释放一种作业”endl”
0、结束测试”endl;int choice;Pro*ph=NULL;Table*head=new Table0,1000;char Na|10];int size;whilelcoutvv”请输入你的选择:;cin»choice;ifchoice==l coutv”请输入作业名以及作业大小cin»Na»size;Pro*p=new Prosize,Na;JRph,p,head;Priph;Prikhead;else ifchoice==2cout”请输入作业名称”;cin»Na;SFph,Na,head;Priph;Prikhead;}else if!choicePriph;第二栏未分配32K96K••**•*••*Pr汰head;exitO;其中,起址指出一i种空闲区的|主存起始地址长度一一指出从起始地址开始的一种持续空闲的长度状态一一有两种状态,一种是“未分派”状态,指出对应时由起址指出日勺某个长度的J区域是空闲区2当有一种新作业规定装入主存时,必须查空闲区阐明表,从中找出一种足够大时空闲区有时找到的空闲区也许不小于作业需要量,这时应把本来的空闲区变成两部分一部分分给作业占用;另一部分又成为一种较小的空闲区为了尽量减少由于分割导致日勺空闲区,而尽量保留高地址部分有较大时持续空闲区域,以利于大型作业的装入为此,在空闲区阐明表中,把每个空闲区按其地址次序登记,即每个后继口勺空闲区其起始地址总是比前者大3采用最先适应算法次序分派算法分派主存空间按照作业时需要量,查空闲区阐明表,次序查看登记栏,找到第一种能满足规定的空闲区当空闲区不小于需要量时,一部分用来装入作业,另一部分仍为空闲区登记在空闲区阐明表中由于本试验是模拟主存的分派,因此把主存辨别配给作业后并不实际启动装入程序装入作业,而用输出“分派状况”来替代4当一种作业执行结束撤离时,作业所占的区域应当偿还,偿还的区域假如与其他空闲区相邻,则应合成一种较大口勺空闲区,登记在空闲区阐明表中5请按最先适应算法设计主存分派和回收的程序假设初始时主存中没有作业,现按下面序列进行内存的申请与释放:作业1申请300K,作业2申请100K,作业1释放300K,作业3申请150K,作业4申请30K,作业5申请40K,作业6申请60K,作业4释放30K请你为它们进行主存分派和回收,把空闲区阐明表的I初值以及每次分派或回收后的变化显示出来或打印出来
四、试验汇报1画出最先适应分派算法流程图、偿还主存时的回收算法流程图最先适应分派算法流程图:偿还主存时的回收算法流程图:2程序中使用的数据构造及符号阐明答本程序用C++语言编写,其中用到了class类、指针,运用指针将class Table{}空闲表类和class Pro什作业类用链式存储的方式进行插入、删除、新建、排序等工作3打印一份源程序并附上注释#includeiostream.h#includestring.hclass Pro〃作业对象public:Pro{Size=O;next=NULL;Start=O;Name[O]=,\O,;}Proint Si,char Na[]{Size=Si;next=NULL;Start=O;strcpyName,Na;void printfcout«Name«n\tH«Start«endl;void ArrangeintSta,Pro NeStart=Sta;next=Ne;〃用来指向下一种输入的作业Pro*next;int Size;〃作业大小char Name
[10];//作业名称int Start;〃在内存中寄存日勺起始地址;class Table//空闲表public:Table*next;〃指向下一种空闲区块int Size;〃空闲区块大小Table{Tableint Sta,int SizStart=Sta;Size=Siz;Over=Sta+Siz;next=NULL;〃空闲区块起始地址int Start;〃空闲区块结束地址int Over;void PriPro*phifph cout«endlvv”内存中日勺作业vendl«作业名”\起始地址〈©11出;forPro*p=ph;p;p=p〉nextp-printf;cout«endl;elsecoutv”作业己所有运行完毕!n«endl;void PrikTable*hifhcout«”空闲区块分派状况”《endl〈”空闲区块起始地址“v\t空闲区块大小”Wendi;for;h;h=h-nextcout«,,\tn«h-Start«,\t\t\t,,«h-Size«endl;cout«endl;elsecout”无空闲区块!n«endl;}void PXTable*h,Table*p〃排序次序空闲区块Table^hp=h-next;Table*hf=h;Table*hf2=h;Table*hfl=h;ifp-Start==1000return;for;hfl;hfl=hfl-next〃检查新增空闲区块与否是原空闲区块。
个人认证
优秀文档
获得点赞 0