计算机操作系统内存分配实验源代码Word文档格式.docx

上传人:b****6 文档编号:17441024 上传时间:2022-12-01 格式:DOCX 页数:14 大小:16.90KB
下载 相关 举报
计算机操作系统内存分配实验源代码Word文档格式.docx_第1页
第1页 / 共14页
计算机操作系统内存分配实验源代码Word文档格式.docx_第2页
第2页 / 共14页
计算机操作系统内存分配实验源代码Word文档格式.docx_第3页
第3页 / 共14页
计算机操作系统内存分配实验源代码Word文档格式.docx_第4页
第4页 / 共14页
计算机操作系统内存分配实验源代码Word文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

计算机操作系统内存分配实验源代码Word文档格式.docx

《计算机操作系统内存分配实验源代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算机操作系统内存分配实验源代码Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

计算机操作系统内存分配实验源代码Word文档格式.docx

//记录要删除的分区序号

StatusInitblock<

>

//开创带头结点的内存空间链表

{

first=<

LinkList>

malloc<

sizeof<

Node>

;

end=<

first->

prior=NULL;

next=end;

end->

prior=first;

next=NULL;

data.num=1;

data.address=40;

data.length=600;

data.state=0;

returnOK;

}

voidsort<

//分区序号重新排序

Node*p=first->

next,*q;

q=p->

next;

for<

p!

=NULL;

p=p->

next>

{

for<

q=p->

q;

q=q->

{

if<

p->

data.num>

=q->

q->

data.num+=1;

}

}

//显示主存分配情况

voidshow<

{intflag=0;

//用来记录分区序号

Node*p=first;

p->

data.num=0;

data.address=0;

data.length=40;

data.state=1;

sort<

printf<

"

\n\t\t》主存空间分配情况《\n"

**********************************************************\n\n"

分区序号\t起始地址\t分区大小\t分区状态\n\n"

while<

p>

%d\t\t%d\t\t%d"

p->

data.num,p->

data.address,p->

data.length>

if<

data.state==0>

\t\t空闲\n\n"

elseprintf<

\t\t已分配\n\n"

p=p->

//首次适应算法

StatusFirst_fit<

intrequest>

//为申请作业开辟新空间且初始化

LinkListtemp=<

temp->

data.length=request;

<

&

data.length==request>

{//有大小恰好合适的空闲块

break;

elseif<

&

<

request>

{//有空闲块能满足需求且有剩余

prior=p->

prior;

next=p;

data.address=p->

data.address;

data.num=p->

data.num;

prior->

next=temp;

prior=temp;

data.address=temp->

data.address+temp->

data.length;

data.length-=request;

returnERROR;

//最佳适应算法

StatusBest_fit<

intch;

//记录最小剩余空间

Node*q=NULL;

//记录最佳插入位置

p->

//初始化最小空间和最佳位置

=request>

>

q==NULL>

q=p;

ch=p->

data.length-request;

q->

data.length>

//没有找到空闲块

q->

else

prior=q->

next=q;

data.address=q->

data.num=q->

data.address+=request;

data.length=ch;

//最差适应算法

StatusWorst_fit<

//记录最大剩余空间

//初始化最大空间和最佳位置

data.state==0&

data.length<

data.length=1;

//分配主存

Statusallocation<

inta>

intrequest;

//申请内存大小

请输入申请分配的主存大小<

单位:

KB>

:

scanf<

%d"

&

request<

0||request==0>

分配大小不合适,请重试!

switch<

a>

case1:

//默认首次适应算法

First_fit<

==OK>

\t****分配成功!

****"

\t****内存不足,分配失败!

break;

case2:

//选择最佳适应算法

Best_fit<

case3:

//选择最差适应算法

Worst_fit<

Statusdeal1<

Node*p>

//处理回收空间

Node*q=first;

q!

q==p>

data.state==0&

next->

data.state!

=0>

data.length+=q->

next=q->

q=q->

data.num=flag-1;

=0&

prior=q;

data.num=flag;

Statusdeal2<

//主存回收

Statusrecovery<

intflag>

data.num==flag>

{

prior==first>

next!

=end>

//当前P指向的下一个不是最后一个时

if<

//与后面的空闲块相连

data.length+=p->

prior=p;

next=p->

}

elsep->

next==end>

//当前P指向的下一个是最后一个时

}//结束if<

prior==block_first>

的情况

elseif<

prior!

=first>

deal1<

else

deal2<

=block_first>

}//结束if<

\t****回收成功****"

//主函数

voidmain<

inti;

//操作选择标记

inta;

//算法选择标记

**********************************************************\n"

\t\t用以下三种方法实现主存空间的分配\n"

\t<

1>

首次适应算法\t<

2>

最佳适应算法\t<

3>

最差适应算法\n"

\n"

请输入所使用的内存分配算法:

a<

1||a>

输入错误,请重新输入所使用的内存分配算法:

case1:

printf<

\n\t****使用首次适应算法:

****\n"

break;

\n\t****使用最佳适应算法:

\n\t****使用最坏适应算法:

Initblock<

//开创空间表

show<

\t1:

分配内存\t2:

回收内存\t0:

退出\n"

请输入您的操作:

i>

i==1>

allocation<

//分配内存

i==2>

//内存回收

请输入您要释放的分区号:

flag>

recovery<

i==0>

printf<

\n退出程序\n"

//退出

else//输入操作有误

输入有误,请重试!

continue;

八、执行结果和结果分析

初始化首次适应算法:

当作业1、2、3顺利分配内存空间后:

回收序号2里面的内存:

分配作业4:

回收序号3里面的内存〔与上邻序号2相连了

回收序号1里的内存〔与下邻序号2相连了

继续分配〔会发现总是按顺序查找满足要求的第一个空闲块,一旦发现就会分配:

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

当前位置:首页 > 高中教育 > 英语

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

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