没有合适的资源?快使用搜索试试~ 我知道了~
存储管理动态分区分配算法的模拟.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 5 浏览量
2022-11-10
06:41:11
上传
评论
收藏 241KB PDF 举报
温馨提示
试读
11页
。。。
资源推荐
资源详情
资源评论
一.题目:存储管理---动态分区分配算法的模拟
二.任务:设计主界面以灵活选择某算法,且以下算法都要实现:首次适应算法、循环首次适应算法、最佳适应算法;。
三.思想:对任务进行构思和设想。
(1)首次适应算法:
FF 算法要求空闲分区链以地址递增的次序链接。在分配内存时,从链首开始顺巡查找,直到找到一个大小能够满足要求的空闲分区为止;
然后再按照作业的大小,从该分区中划出一块内存空间分配给请求者,余下的空闲区间仍留在空闲链中。若从链首直至链尾都不能找到
一个能满足要求的分区,则此次内存分配失败,返回。该算法倾向于优先利用内存中低址部分的空闲分区,从而保留了高址部分的大空
闲区。这给为以后到达的大作业分配大的内存空间创造了条件。
(2)循环首次适应算法
该算法是由首次适应算法演变而成的。在为进程分配内存空间时,不再是每次都从链首开始查找,而是从上次找到的空闲分区
的下一个空闲分区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块的请求大小相等的内存空间分配给作业。为实现该算
法,应设置一起始查找指针,用于指示下一次起始查询的空闲分区,并采用循环查找方式,即如果最后一个(链尾)空闲分区的大小仍
不能满足要求,则返回到第一个空闲分区,比较大小是否满足,找到后,应调整起始查询指针。
(3)最佳适应算法
是将最小的空闲分区分配给作业,避免"大材小用"。为了加速寻找,该算法要求将所有的空闲分区按照某容量以从小到大的顺序
形成一空闲分区链。这样,第一次找到的能满足要求的空闲区,必然是最佳的。
(4)内存回收:
将释放作业所在内存块的状态改为空闲状态,删除其作业名,设置为空。并判断该空闲块是否与其他空闲块相连,若释放的内存空间与
空闲块相连时,则合并为同一个空闲块,同时修改分区大小及起始地址。
四.目的:在构思中提出要达到的目的。
(1)按照首次适应算法对内存进行分配,得到
(2)按照循环首次适应算法对内存
(3)按照最佳适应算法对内存进行分配
(4)在作业完成时,释放作业所在内存块,使其能够再次被利用
五.方案:对构思的细化,提出粗略的方案。
(1)首次适应算法:设立头指针,每次从头指针开始查找,进行内存分配
(2)最佳适应算法:设立一个指针纪录最佳位置,然后根据内存大小,对最佳位置进行分配
(3)循环首次适应算法:设立查找指针,查找指针初始为链首指针,最后位置为查找指针,返回查找指针,第二次运行时从查找指针开
始查找。
(4)内存回收:将释放的空间与前后空闲状态区间合并,改写空闲区间地址和大小
六.框图:根据方案画出框图并审核框图。
七.程序:是实施框图的主体并运行和修改。
1.有大小恰好合适的空闲块
if(p->data.state==Free && p->data.size==request)
{
p->data.state=Busy;
p->data.ID=ID;
return OK;
break;
}
2.有空闲块能满足需求且有剩余"
if(p->data.state==Free && p->data.size>request)
{
temp->prior=p->prior;
temp->next=p;
temp->data.address=p->data.address;
p->prior->next=temp;
p->prior=temp;
p->data.address=temp->data.address+temp->data.size;
p->data.size-=request;
return OK;
}
3.回收内存
if(p->data.ID==ID)
p->data.state=Free;
p->data.ID=Free;
if(p->prior->data.state==Free)// 与前面的空闲块相连
{
p->prior->data.size+=p->data.size;
p->prior->next=p->next;
p->next->prior=p->prior;
}
if(p->next->data.state==Free)// 与后面的空闲块相连
{
p->data.size+=p->next->data.size;
p->next->next->prior=p;
p->next=p->next->next;
}
八.文档:运行环境,输入条件,输出结果,整理成文。
1. 运行环境:
操作系统 WINDOWS XP
编译软件 Microsoft Visual C++
电脑配置:主频 3.0GHz 内存 512MB
2.输入条件
作业 1 申请 130KB
作业 1 申请 60KB
作业 1 申请 100KB
作业 1 释放 130KB
作业 1 申请 100KB
作业 1 释放 60KB
九.总结:谈心得体会,特别是开发一个软件的体会。
开发一个软件需要有软件需求分析,软件流程图,根据流程进行软件的编写。
在编写软件时需要很好的结构感,编写的程序需要有框架,编写的程序需要补充
语句说明,让观看着更好的了解程序,使用程序。
十.附件:完整程序
#include<iostream.h>
#include<stdlib.h>
#define Free 0 //空闲状态
#define Busy 1 //已用状态
#define OK 1 //完成
#define ERROR 0 //出错
#define MAX_length 640 //最大内存空间为 640KB
typedef int Status;
typedef struct freearea//定义一个空闲区说明表结构
{
int ID; //分区号
long size; //分区大小
long address; //分区地址
剩余10页未读,继续阅读
资源评论
若♡
- 粉丝: 6171
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功