模板实验2存储器的分配与回收Word文件下载.docx
- 文档编号:15733059
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:14
- 大小:210.69KB
模板实验2存储器的分配与回收Word文件下载.docx
《模板实验2存储器的分配与回收Word文件下载.docx》由会员分享,可在线阅读,更多相关《模板实验2存储器的分配与回收Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
2011年12月1日第3、4节
2011年12月5日第7、8节
实验地点
软件实验室7-216
软件实验室7-219
软件实验室7-215
批改意见
成绩
教师签字:
实验内容:
1.模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不实际启动装入作业。
(124)
2.采用最先适应法、最佳适应法、最坏适应法分配主存空间。
3.当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。
若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。
4.当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。
5.运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。
实验要求:
1.详细描述实验设计思想、程序结构及各模块设计思路;
2.详细描述程序所用数据结构及算法;
3.明确给出测试用例和实验结果;
4.为增加程序可读性,在程序中进行适当注释说明;
5.认真进行实验总结,包括:
设计中遇到的问题、解决方法与收获等;
6.实验报告撰写要求结构清晰、描述准确逻辑性强;
7.实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。
【实验过程记录(源程序、测试用例、测试结果及心得体会等)】
源程序:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Collections;
namespaceshen_2
{
classsuit//分配主存空间的类
{
publicvoidzxSuit(ArrayListkzfq,intneedSize)//最先适应法
inti=0;
for(;
i<
kzfq.Count;
i++)
if(needSize==Math.Abs((int)kzfq[i])&
&
(int)kzfq[i]>
0)//与空闲分区大小相等
Console.WriteLine("
存放在第{0:
00}块\n"
i+1);
kzfq[i]=-(int)kzfq[i];
break;
}
if(needSize<
Math.Abs((int)kzfq[i])&
0)//小于空闲分区大小
kzfq.Insert(i+1,(int)kzfq[i]-needSize);
kzfq[i]=-needSize;
if(i==kzfq.Count)
没有足够大的空闲分区来存储!
\n"
);
publicvoidzSuit(ArrayListkzfq,intneedSize,boolway)//最…适应法
{//布尔变量way为true时表示最优适应法,为false时表示最差适应法
inti=-1,balance;
//int存储块号balance表示选择分区与目标大小的差额
if(way)
balance=int.MaxValue;
//int.MaxValue表示int类型中最大数
else
balance=int.MinValue;
//int.MinValue表示int类型中最小数
for(intj=0;
j<
j++)
if((int)kzfq[j]>
0)
inttempBal=(int)kzfq[j]-needSize;
if(tempBal>
=0)
if(tempBal<
balance)
balance=tempBal;
i=j;
if(i==-1)
if(balance==0)
classrecover//回收主存的类
publicrecover(ArrayListfqlb)
this.fqlb=fqlb;
publicvoidfindOccupied()
Console.Write("
目前第"
for(inti=0;
fqlb.Count;
if((int)fqlb[i]<
{0:
00}块,"
被占用\n"
publicvoidrecMemory(intsite)//回收类中的回收方法
intrecSize=(int)fqlb[site];
intfontSize=0,afterSize=0;
if(site!
=0)
fontSize=(int)fqlb[site-1];
//指定前一块分区
=fqlb.Count-1)
afterSize=(int)fqlb[site+1];
//指定后一块分区
if(fontSize>
0&
afterSize==0)//回收分区为最后一块且前一块空闲
fqlb[site-1]=fontSize+(-recSize);
fqlb.RemoveAt(site);
if(fontSize<
afterSize==0)//回收分区为最后一块且前一块被占用
fqlb[site]=-recSize;
if(fontSize==0&
afterSize>
0)//回收分区为第一块且后一块被空闲
fqlb[site]=-recSize+afterSize;
fqlb.RemoveAt(site+1);
afterSize<
0)//回收分区为第一块且后一块被占用
0)//回收分区为中间块且前一块占用,后一块空闲
0)//回收分区为中间块且前一块空闲,后一块占用
0)//回收分区为中间块且前后两均空闲
fqlb[site-1]=fontSize+-recSize+afterSize;
//fqlb.RemoveAt(site);
//fqlb.RemoveAt(site+1);
0)//回收分区为中间块且前后两均占用
ArrayListfqlb;
classProgram
staticvoidMain(string[]args)
ArrayListfqlb=newArrayList();
//模拟内存分区的集合类
suitmySuit=newsuit();
recovermyRec=newrecover(fqlb);
foreach(intsizeinnewint[10]{10,30,35,20,15,40,80,20,20,-25})
{//并测试添加的10个空闲分区
fqlb.Add(size);
//用符号位表示分区是不占用:
正数表示未使用,负数表示已占用
设置的10个空闲分区大小为:
第{0:
00}号分区:
状态:
空闲,分区大小:
{1}\n"
i+1,fqlb[i]);
----------------------------------------\n"
输入工作个数:
"
intc=Int32.Parse(Console.ReadLine());
for(intn=0;
n<
c;
n++)
00}号分区:
n+1);
输入工作所需内存:
"
inta=Int32.Parse(Console.ReadLine());
输入分配内存空间适应方法:
1.最优适应算法,2.最差适应算法,3.最先适应算法(输入1或2或3):
intb=Int32.Parse(Console.ReadLine());
switch(b)
case1:
mySuit.zSuit(fqlb,a,true);
case2:
mySuit.zSuit(fqlb,a,false);
case3:
mySuit.zxSuit(fqlb,a);
break
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模板 实验 存储器 分配 回收
![提示](https://static.bdocx.com/images/bang_tan.gif)