模板实验2存储器的分配与回收Word文件下载.docx

上传人:b****6 文档编号:15733059 上传时间:2022-11-15 格式:DOCX 页数:14 大小:210.69KB
下载 相关 举报
模板实验2存储器的分配与回收Word文件下载.docx_第1页
第1页 / 共14页
模板实验2存储器的分配与回收Word文件下载.docx_第2页
第2页 / 共14页
模板实验2存储器的分配与回收Word文件下载.docx_第3页
第3页 / 共14页
模板实验2存储器的分配与回收Word文件下载.docx_第4页
第4页 / 共14页
模板实验2存储器的分配与回收Word文件下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

模板实验2存储器的分配与回收Word文件下载.docx

《模板实验2存储器的分配与回收Word文件下载.docx》由会员分享,可在线阅读,更多相关《模板实验2存储器的分配与回收Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。

模板实验2存储器的分配与回收Word文件下载.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

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

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