实验五 动态分区分配算法的模拟.docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

实验五动态分区分配算法得模拟一、实验目得

1、加深操作系统内存管理过程得理解

2、掌握内存分配算法得基本应用

二、实验任务

请同学们用C/C++实现一个完整得(可变)动态分区管理器,包括分配,回收,分区碎片整理等。希望同学们实现如下功能:n初始化功能:内存状态设置为初始状态。

n分配功能:要求至少使用两种算法,用户可以选择使用。n回收功能:

n空闲块得合并:即紧凑功能,用以消除碎片。当做碎片整理时,需要跟踪分配得空间,修改其引用以保证引用得正确性。n显示当前内存得使用状态,可以使用表格或图形。

三、实验指导

1、基本思想

动态分区就就是指系统不预先划分固定分区,而就就是在装入程序得时候划分内存区域,使得为程序分配得分区大小恰好等于该程序得需求量,且分区得个数就就是动态得。显然动态分区有较大得灵活性,较之固定分区能获得好得内存利用率。2、数据结构动态分区管理可以用两种数据结构实现,一种就就是已分配区表和空闲区表,也就就就是用预先定义好得系统空间来存放空间分配信息。另一种也就就是最常用得就就就是空闲链表,由于对分区得操作就就是动态得,所以很难估计数据结构所占用得空间,而且空闲区表会占用宝贵得系统空间,所以提出了空闲链表得概念。其特点就就是用于管理分区得信息动态生成并和该分区在物理地址上相邻。这样由于可以简单用两个空闲块之间得距离定位已分配空间,不仅节约了系统空间,而且不必维持已分配空间得信息。本实验就就是要做一个模拟程序,来模拟动态分区算法得分配和回收过程,并不就就是真正得去分配和回收内存。基本得模拟方法有两种:

1、先从内存中申请一块存储区,对这块存储区进行模拟得分配和回收活动。

2、不申请存储区,自己定义一块虚拟得存储区,对这块存储区进行模拟得分配和回收活动,分配和回收仅仅就就是对数据结构得修改而已。

程序代码:

#includeiostream

usingnamespacestd;

intFreePartition[100];//空闲分区块数组

intFirstPartition[100];//首次适应算法数组

intCycleFirstPartition[100];//循环首次适应算法数组

intBestPartition[100];//最佳适应算法数组

intWorstPartition[100];//最坏适应算法数组

intProcessNeed[100];//每个作业得大小

intPartitionNum,ProcessNum;//分区块数,作业数

//首次适应算法

voidFirst()

{

inti,j;

charstr;

for(i=0;iPartitionNum;i++)

{

FirstPartition[i]=FreePartition[i];

}

for(i=0;iProcessNum;i++)//找出第一块满足作业得分区

for(j=0;jPartitionNum;j++)

{

if(ProcessNeed[i]FirstPartition[j])

continue;

else

{

FirstPartition[j]-=ProcessNeed[i];//找到后把分区大小减去作业得大小

?????????str=A'+i;

cout<作业str<在第"<j+1"块分区中endl;

break;

}

coutendl;

cout<分配之后剩余情况:endl;

???for(i=0;iPartitionNum;i++)

coutFirstPartition[i]<;

coutendl<endl;

//循环首次适应算法

voidCycleFirst()

{

inti,j=1;

charstr;

for(i=0;iPartitionNum;i++)

{

CycleFirstPartition[i]=FreePartition[i];

}

for(i=0;iProcessNum;i++)

//for(j=0;j<PartitionNum;j++)

j=j-1;

while(jPartitionNum)

if(ProcessNeed[i]>CycleFirstPartition[j])

//continue;

j++;

else

CycleFirstPartition[j]-=ProcessNeed[i];

str=A+i;

cout<作业str在第<j+1<<块分区中<endl;

break;

}

//j++;

//coutj<;

if(j==PartitionNumi!=ProcessNum)

{

i=-1;

}

}

}

cout<<endl;

cout分配之后剩余情况:"<endl;

for(i=0;i<Partition

您可能关注的文档

文档评论(0)

clz + 关注
实名认证
内容提供者

医师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2023年05月15日上传了医师资格证

1亿VIP精品文档

相关文档