主存储器空间的分配和回收实验报告Word文档下载推荐.docx

上传人:b****4 文档编号:6559009 上传时间:2023-05-06 格式:DOCX 页数:20 大小:661.63KB
下载 相关 举报
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第1页
第1页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第2页
第2页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第3页
第3页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第4页
第4页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第5页
第5页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第6页
第6页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第7页
第7页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第8页
第8页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第9页
第9页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第10页
第10页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第11页
第11页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第12页
第12页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第13页
第13页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第14页
第14页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第15页
第15页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第16页
第16页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第17页
第17页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第18页
第18页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第19页
第19页 / 共20页
主存储器空间的分配和回收实验报告Word文档下载推荐.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

主存储器空间的分配和回收实验报告Word文档下载推荐.docx

《主存储器空间的分配和回收实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《主存储器空间的分配和回收实验报告Word文档下载推荐.docx(20页珍藏版)》请在冰点文库上搜索。

主存储器空间的分配和回收实验报告Word文档下载推荐.docx

26k

32k

512k

操作系统

作业1

作业3

空闲区

作业2

为了说明哪些区是空闲的,可以用来装入新作业,必须要有一张空闲区说明表,格式如下:

起址

长度

状态

第一栏

14K

12K

未分配

第二栏

32K

96K

其中,起址-—指出一个空闲区的主存起始地址。

长度—-指出从起始地址开始的一个连续空闲的长度.

状态——有两种状态,一种是“未分配”状态,指出对应的由起址指出的某个长度的区域是空闲区.

(2)当有一个新作业要求装入主存时,必须查空闲区说明表,从中找出一个足够大的空闲区。

有时找到的空闲区可能大于作业需要量,这时应把原来的空闲区变成两部分:

一部分分给作业占用;

另一部分又成为一个较小的空闲区.为了尽量减少由于分割造成的空闲区,而尽量保存高地址部分有较大的连续空闲区域,以利于大型作业的装入。

为此,在空闲区说明表中,把每个空闲区按其地址顺序登记,即每个后继的空闲区其起始地址总是比前者大。

(3)采用最先适应算法(顺序分配算法)分配主存空间.

按照作业的需要量,查空闲区说明表,顺序查看登记栏,找到第一个能满足要求的空闲区。

当空闲区大于需要量时,一部分用来装入作业,另一部分仍为空闲区登记在空闲区说明表中.

由于本实验是模拟主存的分配,所以把主存区分配给作业后并不实际启动装入程序装入作业,而用输出“分配情况"

来代替。

(4)当一个作业执行结束撤离时,作业所占的区域应该归还,归还的区域如果与其它空闲区相邻,则应合成一个较大的空闲区,登记在空闲区说明表中。

(5)请按最先适应算法设计主存分配和回收的程序。

假设初始时主存中没有作业,现按下面序列进行内存的申请与释放:

作业1申请300K,作业2申请100K,作业1释放300K,作业3申请150K,

作业4申请30K,作业5申请40K,作业6申请60K,作业4释放30K。

请你为它们进行主存分配和回收,把空闲区说明表的初值以及每次分配或回收后的变化显示出来或打印出来。

四、算法流程图

五、源程序及注释

#include<

iostream〉

usingnamespacestd;

#include〈list〉//双向链表结构头文件

#defineResidue512//除系统占用内存外的剩余内存

#definefst_free0//第一块空闲区的起至地址

#definefst_size512//第一块空闲区的大小

#include〈stdio。

h>

#include〈stdlib.h〉//清屏函数头文件

classFree//定义空闲区类

public:

Free(){};

Free(ints,intl)

{

start=s;

length=l;

intget_free(intlength);

//成员函数获取空闲分区

voidfree_task(intstart,intlength);

friendvoidprint_free();

protected:

intstart;

intlength;

};

list〈Free*>

free_list;

//声明空闲分区表

intFree:

:

get_free(intsize)

{

intstart=-1;

list〈Free*〉:

iteratorit=free_list.begin();

//查找适当的空闲分区iterator:

迭代器(游标)提供一种方法访问一个容器

boolfind=false;

while(it!

=free_list。

end())

if((*it)—>

length〉=size)

{

find=true;

start=(*it)—〉start;

if((*it)—〉length>

size)//大于就分割把低地址分配出去

(*it)->

start+=size;

(*it)—〉length—=size;

}

else

free_list.erase(it);

//等于就从空闲分区中删掉

break;

//找到就跳出循环

it++;

returnstart;

}

voidFree:

free_task(intstart,intlength)

list<

Free*>

iteratorinit_it,last_it;

//查找要插入的位置

last_it=init_it;

list〈Free*〉:

iteratorit=free_list。

begin();

=free_list.end())

if((*it)-〉start>

start)break;

last_it=it;

boollink_prev=false;

boollink_next=false;

if(last_it!

=init_it)//有前一个时

if((*last_it)-〉start+(*last_it)—〉length==start)

link_prev=true;

if(it!

end())//有后一个时

if(start+length==(*it)-〉start)

link_next=true;

if(link_prev&&

link_next)//与前后都相连

(*last_it)-〉length+=length+(*it)->

length;

free_list。

erase(it);

elseif(link_prev)//只与前相连

(*last_it)->

length+=length;

elseif(link_next)//只与后相连

(*it)—〉start=start;

(*it)—>

length+=length;

else//前后都不相连

Free*fr=newFree(start,length);

free_list.insert(it,fr);

voidprint_free()

cout<

<

endl<

"

空闲区状态:

〈endl<

起始地址大小"

〈<

endl;

for(list<

begin();

it!

=free_list.end();

it++)

cout〈〈”"

(*it)-〉start〈<

”"

〈(*it)->

length〈<

cout〈<

______________________________________"

endl〈〈endl<

endl;

classTask:

publicFree//定义分配分区类

public:

Task()

{};

Task(intn,ints,intl):

Free(s,l)

name=n;

voiddo_request(intname,intlength);

voiddo_revoke(intname);

friendvoidprint_task();

protected:

intname;

};

list<

Task*>

task_list;

//分配可用起始地址

voidTask:

do_request(intname,intsize)

if(name==0)

cout〈<

"

申请不合法!

非法作业名!

<

endl〈<

endl;

return;

if(size〉Residue)

〈"

超出最大可用内存!

”〈<

return;

//查找是否已存在同名作业

Task*>

iteratorit=task_list.begin();

=task_list。

if((*it)—>

name==name)

break;

if(find)

”此作业已存在!

endl<

〈endl;

intstart=get_free(size);

//从空闲分区选择合适的空间

if(start==-1)//未找到合适空间

”系统内存不足!

作业等待!

”<

Task*ta=newTask(name,start,size);

task_list.push_back(ta);

cout〈〈"

作业申请内存成功!

”〈〈endl<

〈endl;

do_revoke(intname)

错误!

不能回收系统内存!

endl;

//查找要回收的作业是否存在

list〈Task*〉:

iteratorit=task_list.begin();

while(it!

=task_list.end())

find=true;

it++;

if(!

find)

”错误!

作业名不存在!

”〈〈endl;

;

free_task((*it)-〉start,(*it)->

length);

task_list。

erase(it);

回收作业占用内存成功!

〈endl;

voidprint_task()

〈”_____________________________________"

〈〈endl;

作业名称起始地址大小"

〈endl;

for(list〈Task*>

iteratorit=task_list。

it!

=task_list.end();

cout〈〈"

”〈<

name〈<

””<

〈(*it)—>

start<

〈””〈<

(*it)—〉length<

”_____________________________________"

intmain()

*******************************************"

主存储器空间的分配和回收"

〈〈endl;

”*******************************************”〈〈endl〈〈endl<

Free*fr1=newFree(fst_free,fst_size);

//把系统占用后剩余的内存空间计入空闲分区表

push_back(fr1);

print_free();

boolquit=false;

while(!

quit)

TaskT;

FreeF;

cout<

a。

申请内存b。

回收内存"

”c。

查看作业0.退出程序"

〈〈endl<

请选择:

charop;

cin>

〉op;

if(op=='

a’||op==’A’)

intname;

intsize;

请输入作业名及占用空间大小:

”;

cin〉>

name;

cin〉〉size;

T.do_request(name,size);

elseif(op=='

b'

||op=='

B'

{intname;

请输入要回收的作业名:

cin〉〉name;

T.do_revoke(name);

print_free();

elseif(op==’c’||op=='

C’)

print_task();

0'

非法操作!

〈〈endl;

charcon;

”继续(Y/N):

cin>

〉con;

if(con=='

n'

||con=='

N'

quit=true;

system(”cls”);

六、打印的程序运行时初值和运行结果

七、实验小结

模拟在可变分区管理方式下采用最先适应算法实现了主存分配和回收,整个程序由两个类构成其主体,空闲区类和申请空间类。

使的整个程序更结构化。

程序在编写过程中也遇到了很多问题,还好在查询各方面资料后都得以解决。

每一个的程序的编写成功都是一件不易的工程不仅是对能力的检测,也是对心态的检测。

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2