计算机操作系统动态分区存储管理方式下的内存空间的分配与回收实验报告

上传人:友**** 文档编号:187313431 上传时间:2023-02-13 格式:DOCX 页数:18 大小:123.40KB
收藏 版权申诉 举报 下载
计算机操作系统动态分区存储管理方式下的内存空间的分配与回收实验报告_第1页
第1页 / 共18页
计算机操作系统动态分区存储管理方式下的内存空间的分配与回收实验报告_第2页
第2页 / 共18页
计算机操作系统动态分区存储管理方式下的内存空间的分配与回收实验报告_第3页
第3页 / 共18页
资源描述:

《计算机操作系统动态分区存储管理方式下的内存空间的分配与回收实验报告》由会员分享,可在线阅读,更多相关《计算机操作系统动态分区存储管理方式下的内存空间的分配与回收实验报告(18页珍藏版)》请在装配图网上搜索。

1、计算机操作系统实验报告实验二实验题:存储器管理系别:计算机科学与技术 系班级:姓名:学号:2、实验深入理解动态分区存储管理方式下的内存空间的分配与回收。二、实验内容编写程序完成动态分区存储管理方式下的内存分配和回收的实现。具体内容包括:确定用来管理内存当前使用情况的数据结构;采用首次适应算法完成内存空间的分配;分情况对作业进行回收;编写主函数对所做工作进行测试。三、实验原理分配:动态分区存储管理方式把内存除os占用区域外的空间看作一个大的 空闲区。当作业要求装入内存时,根据作业需要内存空间的大小查询内存中 各个空闲区,当从内存中找到一个大于或等于该作业大小的内存空闲区时, 选择其中一个空闲区,

2、按作业要求划出一个分区装入该作业。回收:作业执行完后,它所占用的内存空间被收回,成为一个空闲区。如果 该空闲区的相邻分区也是空闲区,则需要将相邻空闲区合并成一个空闲区。实验方法实现动态分区的分配与回收,主要考虑三个问题:第一、设计记录内存使用情况的数据表格,用来记录空闲区和作业占用的区域(利用结构体类型数组来保存数据);第二、在设计的数据表格基础上设计内存分配算法(采用首次适应算法找合适的分区(对空闲分区表进行排序),分配时要考虑碎片问题);第三、在设计的数据表格基础上设计内存回收算法(分四种情况进行回收(上邻、下邻、上下邻和无相邻分区)。五、实验步骤第-,设计记录内存使用情况的数据表格已分配

3、分区表:起始地址、长度、标志(0表示“空表项”,1表示“已分配”)空闲分区表:起始地址、长度、标志(0表示“空表项”,1表示“未分配”)struct used_table float address;已分分区起始地址float length;已分分区长度,单位为字节int flag;已分配表区登记栏标志,用0表示空栏目,char zuoyename;已分配区表Struct free_table float address;空闲分区起始地址float length;空闲分区长度,单位为字节int flag;/空闲分区表登记栏目用0表示空栏目,1表示未; 空闲分区表 第二,在设计的表格上进行内存分

4、配首次适应算法:为作业分配内存,要求每次找到一个起始地址最小的适 合作业的分区(按起始地址递增排序)。最大碎片size :要求当找到的空闲分区-作业的大小的值小于或等于size 时,将该分区全部分配给作业(数组后面元素向前移);否则,给作业分割出一部分空间时,其余部分仍作为新的空闲分区登记(空闲分区长度二空闲分区长度-作业长度,空闲分区起始地址二空闲分区起始地址+作业长度第三,在设计的表格上进行内存回收。1、上邻:条件:回收作业的始址二某个空闲区的始址+长度操作:空闲区的长度二空闲区的长度+作业的大小2、下邻:条件:回收作业的始址+作业的长度二某个空闲区的始址操作:空闲区的始址二回收作业的始址

5、空闲区的长度二空闲区的长度+作业的长度3、上下邻:条件:1, 2条件同时成立操作:空闲区的始址二上邻的始址空闲区的长度二上邻的长度+作业的长度+下邻的长度删除下邻4、无上下邻:操作:找flag=O的行空闲区的始址二回收作业的始址空闲区的长度二作业的长度六、实验代码# include# include#define M 10/允许的空闲区表长最人为m#define N 10允许的最大作业数量为n#define MIN 1碎片的最大值#define SADDRESS 200空闲分区初始的起始地址#define SLENGTH 150000空闲分区的初始长度struct used_tfloat ad

6、dress;已分分区起始地址float length;已分分区长度int flag;已分配表区登记栏标志,用0表示空栏目used_tableN;struct free_tfloat address;空闲分区起始地址float length;/空闲分区长度int flag;空闲分区表登记栏目用0表示空栏目,1表小未分配free_tableM;空闲分区表void allocate(char,float);分配算法子程序void reclaim(char);回收算法子程序void main()int i,a;float zyl;char zyn;空闲分区表初始化空闲分区表的起始地址空闲分区表的长度/

7、标志位置1表示未分配0表示空栏目free_tableO.address二SADDRESS; free_tableO.length二SLENGTH;free_table0.flag = 1;for(i=1;iM;i+)free_tablei.address=0;free_tablei.length=O;free_tablei.flag=0; 已分分区表初始化 for(i=0;iN;i+)used_tablei.address=0;used_tablei.length=O;used_tablei.flag=O;while(1)cout请选择功能项:endl1-分配主存endl2-回收主存endl3

8、-显示主存endl0-退出endla;switch(a)case 0:当选择0时退出程序return;case 1: a = 1分配主存空间coutn请输入作业名zyn和作业所需长度zyl(作业名为个字符,长度 zyl 要小于SLENGTH):zynzyl;allocate(zyn,zyl);为作业zyn分配主存空间break;case 2:/ a=2回收主存空间coutzyn;reclaim(zyn);回收作业zyn的主存空间break;case 3: a = 3显示主存情况,输出空闲区表和已分配区表coutn输出空闲区表:endl起始地址分区长度标志endl;for(i=0;iM;i+)i

9、f(free_tablei.flag!=0)coutsetw(10)free_tablei.addresssetw(10)free_tablei.lengthsetw(10)free_tablei.flagendl;coutn按任意键,输出已分配区表;cin.get();coutn输出已分配区表:endl起始地址分区长度标志endl;for(i=0;iN;i+)if(used_tablei.flag!=O)输出已分配给作业的表目coutsetw(10)used_tablei.addresssetw(10)used_tablei.lengthsetw(1O)(char)used_tablei.f

10、lagendl; break;default:coutn 没有该选项!endl;break;cin.get()分配算法子程序void allocate(char zyn,float zyl)float ad;int k=-1;int i=0;while(i曲斋巨-曲册3冈-、血畑并團罟册画S 麻汁屮32紆胃=歹册3冈&二庄謝團斋巨。*_if (f reelorb - eE. - e n gr+hzyAH MIN)亠 freeltab-e天.f-aguoj adHfreeltab-ekbrddressj zy - H f reelta b - eE. - e n gr+=r forTkx-M=+

11、) freeltab-e三 Hfreeltab-e=+lre-se 亠 freeltab-eE.-engthufreeltab-e 天engthzwadHfreeltab-ekbrddressj freeltab-ekhrddressHfreeltab-ekhrddress+zy-;巨.并 /*修改已分配区表*/i=0;while(used_tablei.flag!=O&iN)i + +; 找空表目 iused_tablei.address二ad;used_tablei.length二zyl;used_tablei.flag=zyn;return;/allocate回收作业名为J的作业所占主存

12、空间void reclaim(char zyn)int i,k,j,s,t;float S丄;s=0;while(used_tables.flag!=zyn|used_tables.flag = =0)&s = N)cout找不到该作业!endl;return;used_tables.flag=O;修改以分配表表目s标志为为空表目S=used_tables.address;取作业zyn在内存中的首地址L=used_tables.length;取作业zyn所分配到的内存的长度j=-1;k=-1;i=0;寻找回收分区的上下邻空闲区,上邻表目k ,下邻表目j while(iM &(j= = -1|k

13、= = -1)if(free_tablei.flag = = 1)if(free_tablei.address+free_tablei.length二二S) k=i;if(free_tablei.address二二S+L) j = i;i+;if(k! = -1)有上邻空闲区if(j! = -1)有下邻空闲区即有上下邻空闲区,三项合并free_tablek.length=free_tablek.length+free_tablej.length + L; free_tablej.flag=0;else上邻空闲区,下邻非空闲区,与上邻合并free_tablek.length二free_table

14、k.length + L;/ifelse /k=-1无上邻空闲区if(j! = -1)无上邻空闲区,有下邻空闲区,与下邻合并free_tablej.address=S;free_tablej.length=free_tablej.length + L;else/j = = -1上下邻均为非空闲区,回收区域直接填入t=0;在空闲区表中寻找空栏目while(free_tablet.flag = = 1 &t = M)空闲区表满,回收空间失败,将已分配区表复原cout主存空闲表没有空间,回收失败!endl;used_tables.flag=zyn;return;free_tablet.address

15、二S;free_tablet.length二L;free_tablet.flag = 1; for(i=0;i二M-1;i+)for(int j = i;jfree_tablej.address) free_t temp;temp二free_tablei; free_tablei=free_tablej;free_tablej=temp; 七、实验结果1、总的存储空间2、分配空间分区长度标志4480145720i安任意键,输蚩已分配区表分区长度20026B40046080S5B0130QBSQ2100368240056B290010603903480438Q1SQ标志12345673、回收空间

16、(1 )有上下邻StAff收分区的作业名: 请世择功饉项:-分齟哇2- 0 KzE#3- 显吓主仔0-很出选择功能项0-3:3S00分区长度WIxa:石地丸L分区长度标志20020014004002130Q80Q421003005240Q5盹6290010007390048084480145720标志11输岀已分配区裘(2)有上邻3 3-0-C顶tL.斗冃 丄功 遲分回显退择 肓圭冃一一 一一主一顶SS功王主主4004480分区长度990145720标志11输区止己勺00 键八春2 意谢 任里L丄I表已分配区表!分区长度200210039924005as2900loss3900489438Q100标志14567893 )有下邻(4)无上下邻,回收7产表:分区长度标志3丽5iaaa74380士岛畀呆丁+台匕T百1099八、实验总结1、通过实验学会了理解动态分区存储管理方式下的内存空间的分配与回收2、学会了回收的四种方式3、实验过程中遇到了问题,学会了与同学探讨解决

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