《动态分区存储管理方式的主存分配回收实验参考[].docx》由会员分享,可在线阅读,更多相关《动态分区存储管理方式的主存分配回收实验参考[].docx(13页珍藏版)》请在第壹文秘上搜索。
1、动态分区存储管理方式的主存安排回收试验报告一、试验目的深化了解动态分区存储管理方式的主存安排回收的实现。二、试验要求编写程序完成动态分区存储管理方式的主存安排回收的实现。试验详细包括:首先确定主存空间安排表;然后采纳最优适应算法完成主在空间的安排,完成主存空间的回收:最终编写主函数对所作工作进程测试。三、试验原理:存储管理中动态分区的管理方式。四、试验程序设计1 .数据结构已分分区表的数据结构定义/definen10假定系统允许的最大作业数量为ntypedefstructusedf1.oataddress;已分分区起始地址f1.oat1.ength;已分分区长度,单位为字节CStringf1.
2、ag;已安排区表登记栏标记,用0表示空栏目,作业名表示运用USED;已安排区表USEDused_tab1.en:空闲区表的数据结构定义definem10假定系统允许的空闲区表最大为mtypedefstructfree(f1.oataddress;空闲区起始地址f1.oat1.ength;空闲区长度,单位为字节intf1.ag;空闲区表登记栏标记,用0”表示空栏目,用”1表示未安排FREE;空闲区表FREEfree_tab1.em;2 .功能函数设计I)系统数据初始化free-tab1.e0.address=10240:freetab1.e0.1.ength=102400:free-tab1.e
3、O.fIag=I;空闲区表初始化for(i=1.:im;i+)freetab1.ei.f1.ag=0;空闲区表初始化for(i=0;in;i+)used_tab1.ei.f1.ag=。;2)安排函数voiiCExp3D1.g:a1.1.ocatc(CStringJ,f1.oatxk)采纳最优安排算法安排xk大小的空间(inti,k;f1.oatad:k=-1.:for(i=0:i=xk&free_tab1.ei.f1.ag=1.)if(k=-1.Ifree_tab1.ei.1.engthfree_tab1.ek.1.ength)k=i;if(k=-1.)未找到可用空闲区,返回(11/5-刈60
4、528680*(无可用空闲区”);return;)/*找到可用空闲区,起先安排:若空闲区大小与要求安排的空间差小于minisize大小,则空闲区全部安排:若空闲区大小与要求安排的空间差大于minisize大小,则从空闲区划出一部分安排*/if(free_tab1.ek1.1.ength-k=minisize)(free-tab1.ek.f1.ag=O;ad=free_tab1.ek.address;xk=free_tab1.ek.1.ength;)e1.se(free_tab1.ek.1.ength=free_tab1.ek.1.ength-xk;ad=free_tab1.ek.address
5、+free_tab1.ek.1.ength:修改已安排区表i=0;whi1.e(used-tab1.ei.f1.ag!三,O&i=m)无表目填写已分分区(MessageBox(无表目填写已分分区,错误”);/修正空闲区表if(free-tab1.ek.f1.ag=O)前面找到的是整个空闲区free-tab1.ek.fIag=I;e1.se前面找到的是某个空闲区的一部分free-tab1.ek.1.ength=free-tab1.ek.1.ength+xk:return;修改已安排区表e1.seused_tab1.ei.address=ad:usedtab1.ei.1.ength=xk;used
6、-tab1.ei.f1.ag=J;return;)3)回收函数voidCExp3D1.g:rec1.aim(CStringJ)回收作业名为J的作业所占主存空间(inti,k,j,s,t;f1.oatS11.;找寻已安排区表中对应登记项s=0;whi1.e(used_tab1.es.f1.ag!=Jused_tab1.es.f1.ag=0)&s=n)作业MCSSageBox(找不到该作业”);return;)修改已安排区表USed_tabes.f1.ag=*0;取得归还分区的起始地址S和长度1.S=USed_tab1.es.address;1.=used_tab1.es.1.ength;j=-1
7、.;k=-1.;i=0;找寻回收分区的上下邻空闲区,上邻表目k,下邻表目whi1.e(iMIM&(j=-1.|:k=-1.)(if(free_tab1.ei.f1.ag=0)(if(free_tab1.ei.address+free_tab1.ei.1ength=S)k=i;找到上邻if(free_tab1.ei.address=S+1.)j=i;找到下邻i+;if(k!=-1.)/上邻空闲区,下邻空闲区,三项合并free_tab1.ek.1.ength=free_tab1.ej.1.ength+free-tab1.ek.Iength+1.;free-tab1.ej.f1.ag=O;)e1.s
8、e/上邻空闲区,下邻非空闲区,与上邻合并free-tab1.ek.1.ength=free-tab1.ek.1.ength+1.:e1.seif(j!=-1.)上邻非空闲区,下邻为空闲区,与下邻合并(free_tab1.ej.address=S;free-tab1.ej.1.ength=free_tab1.ej,1.ength+1.:)e1.se上下邻均为非空闲区,回收区域干脆填入(在空闲区表中找寻空栏目t=0;whi1.e(free_tab1.et.f1.ag=1.&tUpdateData(true);CStringname;f1.oatsize;name=this-m_EDIT_NAME;
9、size=this-mEDITSIZE;a1.1.ocate(name,size);I 【回收】按钮voidCExp3D1.g:OnButtonRec1.aimO(this-UdateData(true);CStringname;nane=this-mEDITNAME;this-recIaim(name);) 【显示安排区】按钮voidCExp3D1.g:OnButtonA1.IocateO(CStringstr,xx;C1.istBox*1.:1.=&m_1.IST_A1.1.OC;1.-ResetContentO;分区长度1.-InsertString(O,”起始地址标记):for(int
10、j=0;jInsertString(j+1.,str);)【显示回收区】按钮voidCExp3D1.g:OnButtonFreeO(/TODO:Addyourcontro1.notificationhand1.ercodehereCStringstr,xx;C1.istBox*1.;1.=111.ISTFREE;1.-KesetContentO;1.-InsertString(O,”起始地址分区长度标记”);for(intj=O;jInsertString(j+1.,str);)3.界面设计本程序的界面力求简洁、友好,每一步须要用户操作的提示以与每一次用户操作产生的调度结果都以中文的形式显示在
11、屏幕上,运用户对要做什么和已经做了什么一目了然。五、试验结果与分析1.本程序可以模拟动态分区存储管理方式的主存安排回收过程,并在对话框中进行显示,经检验,结果正确。但是,这个程序的优化还是尚待完善的,比如:(I)应在分别在安排和回收时设置计数器,以记录当前空闲区和安排区中作业的数目,这样,就可以在显示时便于限制,不要一次显示数组中的全部储存信息,影响界面整齐程序只是简洁的实现了安排与Im收的过程,对于一些细微环节问题和边界问题出力的比较粗糙。例如当没有安排区没有作业时,【回收】按钮应失效:在进行回收过程时,不仅要输入作业名,还要输入作业大小,这在实际应用中是很不便利的。2.测试样本数据如下:1安排作业(作业名-作业大小)a-2,b-12,c-15,d-18应进行限制,使界面整齐,应进行限制,使界面整齐安排作业e-58,回收作业a