计算机操作系统 在可变分区管理方式下采用最先适应算法实现主存分配与回收
组号 成绩
计算机操作系统课程设计报告 题目 实验3 内存管理 在可变分区管理方式下采用最先适应算法实现主存分配与回收
专 业: 计算机科学与技术班 级: 2014级2班 学号+姓名: 20141308039 王小琴指导教师: 赵晓平
2016年12月 22日
设计目的掌握可变分区内存管理方式,能熟练运用内存管理的各种算法对内存进行分配和回收。设计内容选择一种算法在可变分区管理方式下对内存进行管理。设计原理最先适应算法分配主存空间是按照作业的需要量,查空闲分区表,顺序查看长度栏,找到第一个能满足要求的空闲区。当空闲区大于需要量时,一部分用来装入作业,另一部分在空闲分区表中仍为空闲区。当一个作业执行结束撤离时,作业所占的区域应该归还,归还的区域如果与其它空闲区相邻,则应合成一个较大的空闲区,登记在空闲分区表中。详细设计及编码模块分析作业进入内存:根据作业大小,使用最先适应算法,从低地址空闲分区中依次判断是否有满足作业大小的空闲分区,若有则分配内存,修改空闲分区表,若无则不分配内存,提示没有合适空间,最后都输出空闲分区表情况。作业撤出内存:根据作业起始地址和大小,判断该作业上下是否相邻空闲分区,若只有上邻空闲分区,则释放内存后与其上邻空闲分区合并,若只有下邻空闲分区,则释放内存后与其下邻空闲分区合并,若上下都相邻空闲分区,则释放内存后与其上、下邻空闲分区都合并,若不相邻空闲分区,则释放内存后在空闲分区表内单独形成一个分区,最后输出空闲分区表情况。
流程图开始
输出初始空闲分区表
作业进入内存
需求量
N
需求量=分区表大小 N
Y
没有合适空间修改分区表的起始地址和大小删除该分区表
输出空闲分区表情况
作业撤出内存
是否有上邻空闲区 N
是否有下邻空闲区 Y是否有下邻空闲区
N Y N Y 合并上邻空间生成新空闲分区合并下邻空间合并上、下邻空闲分区
输出空闲分区表情况
结束
代码实现#include #include #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;in)//空闲区空间大于作业需求 { 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)