动态分区存储管理方式的主存分配回收_第1页
动态分区存储管理方式的主存分配回收_第2页
动态分区存储管理方式的主存分配回收_第3页
动态分区存储管理方式的主存分配回收_第4页
动态分区存储管理方式的主存分配回收_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、动态分区存储管理方式的主存 分配回收动态分区存储管理方式的主存分配回收一、实验目的深入了解动态分区存储管理方式主存分配回收的实现。二、实验要求编写程序完成动态分区存储管理方式的主存分配回收的实现。实验具体包 括:首先确定主存空间分配表;然后釆用最优适应算法完成主存空间的分配和 回收;最后编写主函数对所做工作进行测试。三、实验步骤实现动态分区的分配和回收,主要考虑的问 题有三个:第一,设计记录主存使用情况的数据 表格,用来记录空闲区和作业占用的区域;第二, 在设计的数据表格基础上设计主存分配算法:第 三,在设计的数据表格基础上设计主存回收算 法。首先,考虑第一个问题:设计记录主存使用 情况的数据

2、表格,用来记录空闲区和作业占用的 区域。由于动态分区的大小是由作业需求量决定的,故分区的长度是预先不固定的,且分区的个 数也随主存分配和回收变动。总之,所有分区情 况随时可能发生变化,数据表格的设计必须和这 个特点相适应。由于分区长度不同,因此设计的 表格应该包括分区在主存中的起始地址和长度。 由于分配时空闲区有时会变成两个分区:空闲区 和已分分区,回收主存分区时,可能会合并空闲 分区,这样如果整个主存采用一张表格记录已分 分区和空闲区,就会使表格操作繁琐。主存分配 时查找空闲区进行分配,然后填写已分配区表, 主要操作在空闲区;某个作业执行完后,将该分 区变成空闲区,并将其与相邻的空闲区合并,

3、主 要操作也在空闲区。由此可见,主存的分配和回 收主要是对空闲区的操作。这样为了便于对主存 空间的分配和回收,就建立两张分区表记录主存 使用情况.一张表格记录作业占用分区的“已分 配区表”一张是记录空闲区的空闲区表”。这 两张表的实现方法一般有两种,一种是链表形 式,一种是顺序表形式。在试验中,采用顺序表 形式,用数组模拟。由于顺序表的长度必须是提 前固定,所以无论是“已分配区表”还是“空闲 区表”都必须事先确定长度。他们的长度必须是 系统可能的最大项数,系统运行过程中才不会出 错,因而在多数情况下,无论是“已分配区表” 还是空闲区表”都有空闲栏目。已分配区表中 除了分区起始地址、长度外,也至

4、少还有一项“标 志”,如果是空闲栏目,内容为“空”如果为某个作业占用分区的登记项,内容为该作业的作业 名;空闲区表中除了分区起始地址、长度外,也 要有一项“标志”,如果是空闲栏目,内容为“空”, 如果为某个空闲区的登记项,内容为“未分配”。 在实际系统中,这两表格的内容可能还要多,实 验中仅仅使用上述必须的数据。为此,“已分配 区表”和“空闲区表”可变分区管理方式将内存除操作系统占用 区域外的空间看做一个大的空闲区。当作业要求 装入内存时,根据作业需要内存空间的大小 查 询内存中的各个空闲区,当从内存空间中找到一 个大于或等于该作业大小的内存空闲区时,选择 其中一个空闲区,按作业需求量划出一个

5、分区装 人该作业,作业执行完后,其所占的内存分区被 收回,成为一个空闲区。如果该空闲区的相邻分 区也是空闲区,则需要将相邻空闲区合并成一个 空闲区。四、实验结果 程序代码:#include #include float minsize=5;int countl=0;int count2=0;#define m 10#define n 10structfloat address;float length;int flag;used_tablen;structfloat address;float length;int flag;free_tablem;void initialize(void);

6、int distribute(int, float);int recycle(int);void show();void initialize(void)int a;for(a=0; a=n-1; a+)used_tablea.flag=0;free_table0.address=1000;free_table0.length=1024; free_table0.flag=1;int distribute(int process_name, float need_length) int i, k=-1;float ads, len; int count=0;i=0;while(iv=m-1)i

7、f(free_tablei.flag=1 & need_length v=free_tablei.length) count+;if(count=1llfree_tablei.length v free_tablek.length) k=i;i=i+1;if(k!=-1)if(free_tablek.length-need_length)v=minsize)free_tablek.flag=0;ads=free_tablek.address;len=free_tablek.length;elseads=free_tablek.address;len=need_length;free_table

8、k.address+=need_length; free_tablek.length-=need_length; i=0;while(used_tablei.flag!=0)i=i+1;if(iv=n-1)used_tablei.address=ads; used_tablei.length=len; used_tablei.flag=process_name; count1+;elseif(free_tablek.flag = 0)free_tablek.flag=1; free_tablek.address=ads; free_tablek.length=len;elsefree_tabl

9、ek.address=ads; free_tablek.length+=len;coutvv内存分配区已满,分配失败! n; return 0;elsecout vv无法为该作业找到合适分区! n; return 0;return process_name;int recycle(int process_name)int y=0;float recycle_address, recycle_length; int i, j, k;int x;while(yv=n-1&used_tabley.flag!=process_name) y=y+1;if(y=mll(k!=-1&j!=-1)if(fr

10、ee_tablei.flag=1)if(free_tablei.address+free_tablei.length)=recycle_address)k=i;if(recycle_address+recycle_length)=free_tablei.address) j=i;i=i+1;if(k!=-1)if(j!=-1) free_tablek.length+=free_tablej.length+recycle_length; free_tablej.flag=0;else free_tablek.length+=recycle_length;else if(j!=-1)free_ta

11、blej.length+=recycle_length; free_tablej.address=recycle_address;elsex=0;while(free_tablex.flag!=0)x=x+1;if(xjob_nameneed_memory;distribute(job_name, need_memory);break;case 2:int ID;coutvv请输入您要释放的分区号:; cinID;recycle(ID);break;case 3:show(); break;、假定系统内存分配表允许的最大作业项为10,当分配超过10时,提 示“内存分配区已满,分配失败”+区+闲

12、:空+区+闲:空+区配分已+ + + + + +012245i78?l名名名名名名名名名名0920005467 1211221122 M =M =M =M =M =M =M =M =M区配分已+ + + + + +012245i78?l名名名名名名名名名名0920005467 1211221122 M =M =M =M =M =M =M =M =M: -fe-fe-fe-fe-fe-fe-fe-fe-fe-fe 业业业业业业业业业业 EEEEE=1 一二一二 1 二 1 二1000 1010 1039 1051 1061 108111011116 1130 1158址址址址址址址址址址1=分配

13、内存2:回收内存*3:舌看分咅己回:退 *開虚鸳需屛內存打25内存弁配区已満,弁配失收I、回收作业所占内存时,当输入的作业名不存在,回收失败,提示“该 作业不存在”。g C: Docu.en.t s and Set t ingsAdainst ratorMW+ + + + + + + + + + + + + + + + + +1-+1-+1-+1-+1-+1-+1-十空闲区十址+址址址址址址扯址址址 +地+地地地地地地地地地地:1006:1016:1039:1051:1Q61:1QS1十址+址址址址址址扯址址址 +地+地地地地地地地地地地:1006:1016:1039:1051:1Q61:1Q

14、S1;1101;lilt;1130;1158十K=十配 5R =R =K =K =K =K =K =K=K=K = +.+卄+#+业+已+业业业业业业业业业业 +作*匚4-+4 J 4 4 .I.I.I.1- .1- .1- .1-作q+ 9 + + 3 + K + 0920005487+ 8 + S+ 1211221122+状+i名名名名名名名名名名 】业业业业业业业业业业J .1 .1 .1 / / / /+ 1 + + + 0* *12345G7891请揃?您的sfew.的分区号:12请揃?您的sfew.的分区号:12、当要释放某个作业时,将已分配表中此作业的标志置为0并在空 闲区做相应

15、登记。-H-H- + + + + + + + + + + + + + + + + + + + + + + + + + + -H-H-H-H-“十“空闲区4-I-4-I- + + + + + + + + + + + + + + + + + + + + + + + + + + 4-I-4-I-4-I-4-+-地址:1082作业长度:942 状 态:14亠4亠区 配 分 己4亠4亠4亠区 配 分 己4亠4亠度度度度-fe-fe-fe-fe0 8 7 712 12名名名名业12 3 4* 1=分配内存2:回收内存* 3=畫看分配血退 由為输入您果释放的分区号;2K1=分配内存2=回收内存43=香看分配

16、0:退 1!词输入您的操作;3H- + H- + H- + H- + H- + H- + + + + + + + + + + + -F4-F4-F4-F4-F4-F4- + + + + +-F + -F + -F + -F空|?| 区-F4- + + + -H-H- + H- + H- + H- + H- + H- + + + + + + + + + + + -F4-F4-F4-F4-F4-F4- + + + + +地址:1082 施址:1010,乍业长度:942 地址:1082 施址:1010,乍业长度:942 咋业長度:28怂:1+ + + + + |+* +* +* +* +* +* +

17、-+ + + + + |+* +* +* +* +* +* +-+|+区PUS分己+ + + + + |+* +* +* +* +* +* +-止止止止度度度度0 8 7 712 12名名名名 业业业业-10 3 4五、总结核心算法:最优分配算法实现的动态分区int distribute(int process_name, float need_length)int i, k=-1; /k用于定位在空闲表中选择的未分配栏 float ads, len;int count=0;i=0;核心的查找条件,找到最优空闲区while(iv=m-1)循环找到最佳的空闲分区if(free_tablei.fl

18、ag=1 & need_length v=free_tablei.length) count+;if(count=1llfree_tablei.length v free_tablek.length) k=i;i=i+1;if(k!=-1)if(free_tablek.length-need_length)v=minsize) /整个分配 free_tablek.flag=0;ads=free_tablek.address; len=free_tablek.length;else切割空闲区ads=free_tablek.address; len=need_length;free_tablek.address+=need_length; free_tablek.length-=need_length;i=0;循环寻找内存分配表中标志为空栏目的项while(used_tablei.flag!=0)i=i+1;if(i=n-1)找到

温馨提示

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

评论

0/150

提交评论