ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:137.82KB ,
资源ID:22911782      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22911782.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验2存储器的分配与回收Word格式.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验2存储器的分配与回收Word格式.docx

1、2. 采用最先适应法、最佳适应法、最坏适应法分配主存空间。3. 当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。4. 当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。5. 运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。实验要求:1 详细描述实验设计思想、程序结构及各模块设计思路;2 详细描述程序所用数据结构及算法;3 明确给出测试用例和实验结果;4 为增加程序可读性,在程序中进行适当注释说明;5 认真进行实验总结,包

2、括:设计中遇到的问题、解决方法与收获等;6 实验报告撰写要求结构清晰、描述准确逻辑性强;7 实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。【实验过程记录(源程序、测试用例、测试结果及心得体会等)】#includeusing namespace std;typedef struct Ramtable /内存表 结构体 int use; /是否被占用,=0未被占用,=1被占用 Ramtable;typedef struct FreeRamtable /空闲地址登记表 结构体 int FreeRamSize; /空闲占用内存大小 int FreeStartAdd; /空闲起始地址 int

3、 FreeEndAdd; /空闲结束地址 int FreeNumber; /按照顺序的空闲分区编号(由地址的从前到后) FreeRamtable;typedef struct UsedRamtable /已分配区地址登记表 结构体 int UsedRamSize; /已分配区地址占用大小 int UsedStartAdd; /已分配区起始地址 int UsedEndAdd; /已分配区结束地址 int UsedNumber; /按照作业占用的内存起始地址顺序的排序编号 string WorkName; /作业名称 UsedRamtable;Ramtable Ram100=0; /内存表 Fre

4、eRamtable FreeRam51; /空闲地址登记表UsedRamtable UsedRam100; /已分配区地址登记表int WorkNumber=0; /当前作业数 注意:全局变量只能计算一次,再次计算需先置零 int FreeWorkNumber=0; /当前空闲区数 注意:全局变量只能计算一次,再次计算需先置零int Choose; /选择三种算法的一种 string name; /作业的名字 int WorkSize; /作业所占内存大小 void CountWorkNumber() /计算当前作业数 for(int i=0;i100;i+) if(UsedRami.Work

5、Name=) break; else WorkNumber+; void CountFreeWorkNumber()51; if(FreeRami.FreeStartAdd!=-1) FreeWorkNumber+;void InitWorkName() /初始化已分配内存登记表的第一个记录,使其名字为空,方便计算 UsedRam0.WorkName=; FreeRam0.FreeRamSize=100; FreeRam0.FreeStartAdd=0; FreeRam0.FreeEndAdd=99; FreeRam1.FreeStartAdd=-1;void GetWork() coutna

6、meWorkSize;Enter 1 using Quick arithmeticendl;Enter 2 using Best arithmeticEnter 3 using Worst arithmetic: Choose;int Quick() /最先适应算法 int i; for(i=0; if(FreeRami.FreeRamSize=WorkSize) if(i=51) coutERROR! No Enough FreeRam Lefe! return -1; /找不到合适的空间时返回-1,方便进行下一步操作 return i; /返回值是指示第几个空闲区的下标 int Best(

7、) /最佳适应算法 int temp=-1; if(tempFreeRami.FreeRamSize) temp=i; if(temp return temp;int Worst() /最坏适应算法 if(FreeRamtemp.FreeRamSizevoid Moldification() WorkNumber=0; CountWorkNumber();WorkNumber; for(int j=UsedRami.UsedStartAdd;j=UsedRami.UsedEndAdd;j+) Ramj.use=1;void Insert() int k; /找到要插入的作业的所在已分配表中的位

8、置 FreeWorkNumber=0; /计算此时的作业数 CountFreeWorkNumber(); /计算此时的空闲区数 if(Choose=1) i=Quick(); for(int j=0; if(WorkNumber!=0) /这种情况可能会使k=0,在第一个作业的开始地址比较靠后,且前面是空闲分区 if(UsedRamj.WorkName= /这个没有登记作业 k=j; break; else if(FreeRami.FreeEndAddk;j-) UsedRamj.UsedRamSize=UsedRamj-1.UsedRamSize; UsedRamj.UsedStartAdd

9、=UsedRamj-1.UsedStartAdd; UsedRamj.UsedEndAdd=UsedRamj-1.UsedEndAdd; UsedRamj.WorkName=UsedRamj-1.WorkName; UsedRamk.UsedStartAdd=FreeRami.FreeStartAdd; UsedRamk.UsedEndAdd=FreeRami.FreeStartAdd+WorkSize-1; UsedRamk.UsedRamSize=WorkSize; UsedRamk.WorkName=name; UsedRamWorkNumber+1.WorkName= if(FreeR

10、ami.FreeRamSizeWorkSize) FreeRami.FreeStartAdd=UsedRamk.UsedEndAdd+1; FreeRami.FreeRamSize=FreeRami.FreeEndAdd-FreeRami.FreeStartAdd+1; else for(int j=i;FreeWorkNumber-1; FreeRamj.FreeRamSize=FreeRamj+1.FreeRamSize; FreeRamj.FreeStartAdd=FreeRamj+1.FreeStartAdd; FreeRamj.FreeEndAdd=FreeRamj+1.FreeEn

11、dAdd; FreeRamFreeWorkNumber-1.FreeStartAdd=-1; else /这个格子还没有登记 /即 是数组中最后空白中的第一个格子 UsedRamk+1.WorkName= else /k=0时有两种情况,一种是没有作业,另一种是: /第一个作业的开始地址之前是空闲分区,且大小比插入作业大小大 if(WorkNumber=0)0; int x; x=1; else if(Choose=2) i=Best(); if(UsedRamj.UsedStartAdd=0&UsedRamj.UsedEndAdd=0) if(UsedRamk.UsedStartAdd! U

12、sedRamk.UsedStartAdd=FreeRami.FreeStartAdd; UsedRamk.UsedEndAdd=FreeRami.FreeStartAdd+WorkSize-1; UsedRamk.UsedRamSize=WorkSize; UsedRamk.WorkName=name; if(FreeRami.FreeRamSize FreeRami.FreeStartAdd=UsedRamk.UsedEndAdd+1; FreeRami.FreeRamSize=FreeRami.FreeEndAdd-FreeRami.FreeStartAdd+1; for(int j=i;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1