- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机操作系统 在可变分区管理方式下采用最先适应算法实现主存分配与回收
组号 成绩
计算机操作系统
课程设计报告
题目 实验3 内存管理
在可变分区管理方式下采用最先适应算法实现主存分配与回收
专 业: 计算机科学与技术
班 级: 2014级2班
学号+姓名: 20141308039 王小琴
指导教师: 赵晓平
2016年12月 22日
设计目的
掌握可变分区内存管理方式,能熟练运用内存管理的各种算法对内存进行分配和回收。
设计内容
选择一种算法在可变分区管理方式下对内存进行管理。
设计原理
最先适应算法分配主存空间是按照作业的需要量,查空闲分区表,顺序查看长度栏,找到第一个能满足要求的空闲区。当空闲区大于需要量时,一部分用来装入作业,另一部分在空闲分区表中仍为空闲区。当一个作业执行结束撤离时,作业所占的区域应该归还,归还的区域如果与其它空闲区相邻,则应合成一个较大的空闲区,登记在空闲分区表中。
详细设计及编码
模块分析
作业进入内存:根据作业大小,使用最先适应算法,从低地址空闲分区中依次判断是否有满足作业大小的空闲分区,若有则分配内存,修改空闲分区表,若无则不分配内存,提示没有合适空间,最后都输出空闲分区表情况。
作业撤出内存:根据作业起始地址和大小,判断该作业上下是否相邻空闲分区,若只有上邻空闲分区,则释放内存后与其上邻空闲分区合并,若只有下邻空闲分区,则释放内存后与其下邻空闲分区合并,若上下都相邻空闲分区,则释放内存后与其上、下邻空闲分区都合并,若不相邻空闲分区,则释放内存后在空闲分区表内单独形成一个分区,最后输出空闲分区表情况。
流程图
开始
输出初始空闲分区表
作业进入内存
需求量<分区表大小
Y
N
需求量=分区表大小
N
Y
没有合适空间
修改分区表的起始地址和大小
删除该分区表
输出空闲分区表情况
作业撤出内存
是否有上邻空闲区
N
是否有下邻空闲区
Y
是否有下邻空闲区
N
Y N
Y
合并上邻空间
生成新空闲分区
合并下邻空间
合并上、下邻空闲分区
输出空闲分区表情况
结束
代码实现
#include <stdio.h>
#include <String.h>
#define N 3 //空闲区和空表目总块数
struct free
{
int start; //空闲分区始址
int size; //空闲分区长度
int state; //标志位,1表示未分配,0表示分空表目
};
free free[N]={{14,12,1},{32,96,1},{128,120,0}};//初始化空闲分区
//给作业分配主存空间函数
int alloc(int n) //为作业分配内存,满足返回1,不满足返回0
{
int i,flag=0; //用来标识是否有满足作业的空闲空间,1表示有,0表示无
for(i=0;i<N;i++)
{
if(free[i].state==1 && free[i].size>n)//空闲区空间大于作业需求
{
free[i].start=free[i].start+n;
free[i].size=free[i].size-n;
flag=1;
return 1;
}
if(free[i].state==1 && free[i].size==n)//空闲分区刚好满足作业需求
{
free[i].state=0; //调整状态位
flag=1;
return 1;
}
}
if(flag==0)
文档评论(0)