分区存储管理算法模拟.docx
《分区存储管理算法模拟.docx》由会员分享,可在线阅读,更多相关《分区存储管理算法模拟.docx(15页珍藏版)》请在冰点文库上搜索。
![分区存储管理算法模拟.docx](https://file1.bingdoc.com/fileroot1/2023-6/27/3e573116-65e4-48a1-9b11-00d513f435d2/3e573116-65e4-48a1-9b11-00d513f435d21.gif)
分区存储管理算法模拟
20132014学年第3学期
实验项目名称
分区存储管理算法模拟
实验日期
2014/12/25
实验成绩
实验类型
验证型
实验目的与要求
一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。
当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。
当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。
主存的分配和回收的实现虽与主存储器的管理方式有关的,通过本实验帮助学生理解在不同的存储管理方式下应怎样实现主存空间的分配和回收。
实
验
原
理
用最先使用算法模拟内存的分配和回收
实验环境
C语言
1/11
实验方案设计
当要1.可变分区方式是按作业需要的主存空间大小来分割分区的。
装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,则作业不能装入。
则按需要量分割一个分区分配给该作业;若无,若有,有的分区被作业主存空间被分成许多个分区,随着作业的装入、撤离,
2/11
实所示。
3.1如下图占用,而有的分区是空闲的。
验内容
3/11
主存分区分配示意图图3.1
为了说明哪些区是空闲的,可以用来装入新作业,必须要有一张空所示。
闲区说明表,格式如下表3.1其中,起址——指出一个空闲区的主存起始地址。
长度——指出从起始地址开始的一个连续空闲的长度。
状态——有两种状态,一种是“未分配”状态,指出对应的由起址指出的某个长度的区域是空闲区;另一种是“空表目”状态,表示表中,可用来登记新的空闲区(例如,作业对应的登记项目是空白(无效)撤离后,它所占的区域就成了空闲区,应找一个“空表目”栏登记归还。
由于分区的个数不定,所以空闲区说明区的起址和长度且修改状态)表中应有适量的状态为“空表目”的登记栏目,否则造成表格“溢出”无法登记。
3.1空闲区说明表表态状起址长度12K14K第一栏配分未
96K32K配未分第二栏
目空表?
目空表?
?
?
中的例子所装入的三个作3.1上述的这张说明表的登记情况是按图业占用的主存区域后填写的。
从中找必须查空闲区说明表,2.当有一个新作业要求装入主存时,这时出一个足够大的空闲区。
有时找到的空闲区可能大于作业需要量,另一部分又成为应把原来的空闲区变成两部分:
一部分分给作业占用;而尽量保存为了尽量减少由于分割造成的空闲区,一个较小的空闲区。
在为此,高地址部分有较大的连续空闲区域,以利于大型作业的装入。
即每个后继的空闲把每个空闲区按其地址顺序登记,空闲区说明表中,,总是区其起始地址总是比前者大。
为了方便查找还可使表格“紧缩”让“空表目”栏集中在表格的后部。
采用最先适应算法(顺序分配算法)分配主存空间。
3.
按照作业的需要量,查空闲区说明表,顺序查看登记栏,找到第一一部分用来装入作业,当空闲区大于需要量时,个能满足要求的空闲区。
另一部分仍为空闲区登记在空闲区说明表中。
4/11
所以把主存区分配给作业后并不实由于本实验是模拟主存的分配,际启动装入程序装入作业,而用输出“分配情况”来代替。
最先适应分。
配算法如图3.2归还的当一个作业执行结束撤离时,4.作业所占的区域应该归还,登记在空闲区域如果与其它空闲区相邻,则应合成一个较大的空闲区,撤离,归还中列举的情况下,如果作业2区说明表中。
例如,在图3.1下相邻的空闲区一起合成一个大的空闲区登所占主存区域时,应与上、3.3。
记在空闲区说明表中。
归还主存时的回收算法如图中3.15.请按最先适应算法设计主存分配和回收的程序。
然后按图确定空闲区说明表的且形成两个空闲区,假设主存中已装入三个作业,3申请装入主存;然后作业的作业4初值。
现有一个需要主存量为6K把空闲区说明撤离。
请你为它们进行主存分配和回收,撤离;再作业2表的初值以及每次分配或回收后的变化显示出来或打印出来。
调试过程及实验结果
5/11
此实验还可以写一个用户自己的输入来验证,增加验证的准确性总
结6/11
附录
<><>512
{
名称
起始位置
大小是否分配的标志};
数组[]被分成的块数统计
;
;
pc;先对数组进行初始化,使没有分配的名称为
()
{
1;
[0]='P';
[0]=0;
[0];
[0]=1;
}
对数组的插入操作()
{
i;
;
(>1)
{
[i][1];
}
[m];
[m];
}
移动操作,即对数组的删除操作(m)
{
i;
(<1)
{
[i][1];
}
;
7/11
}
如果相邻块都没有分配,则要合并到一起)(
{
([1][1])
{
;[m]='P'[m]=1;
}
([1])
{
[1][1];
(m);
}
([1])
{
[m][m][1];
'P';[m]=[m]=1;
(1);
}
}
打印输出()
{
i;
状态长度屜屮);起址标识名称(
(0<)
{
([i])
(停尠);
?
([i]);
(?
ㄥ?
?
ㄥ?
?
[i][i]);
([i])
(屜屮未分配);
(屜屮已分配);
}
}
从键盘输入数据()
{
(屜屮请输入申请或者释放的进程名称及资源数量:
);
8/11
();
);(\);(\);(\
}
()
{
0;
0;
0;
提出申请资源()
{
(<)
{
([i]>[i])
{
([i])
{
[i];
[i]=0;
}
{
(1[i][i]);
[1]=1;
'P'[1]=;
[i][i];
[i];
[i];
[i]=0;
}
1;
}
;
}
()
{
申请成功!
();屜屮1;
}
{
屜屮申请失败!
没有足够大的空闲空间。
();
0;
9/11
}
}
提出释放资源
{
(<)
{
([i])
{
([i])
{
([i][i]);
}
{
([i]>)
{
(1[i][i]);
;[1]='P'[1]=0;
[i];
[i]=1;
([1])
{
([i][i]);
}
}
{
屜屮释放失败,因为正使用的数量小于要求释放的数量。
();
0;
}
}
1;
}
;
}
()
{
();屜屮释放成功!
1;
}
{
(释放失败!
未找到匹配的进程名称。
屜屮);
10/11
0;
}
}
}
()
{
();
();
(1)
{
();
();
();
}
}
指导教师评语及成绩
11/11