课程设计报告
课程名称:
操作系统原理
题目名称:
可变分区存储管理
姓 名:
学 号:
班 级:
同 组 姓 名:
课程设计时间: 11.12.29~12.01.5
评 语:
成 绩:
可变分区存储管理
一、设计内容及要求
要求:了解动态分区分配中使用的数据结构和分配算法,并进一步加深对动态分
区存储管理方式及其实现过程的理解。
内容 : 输入:(1)输入进程名称及使用内存的大小(创建进程);
(2)结束某一个指定的进程;
输出:显示内存使用状况;每一个进程占据的内存;
使用以下的分配算法:
(1)使用首次适应算法;
(2)最佳适应算法;
(3)最差适应算法;
用 C++语言实现采用首次适应算法的动态分区分配过程和回收过程。其中,空
闲分区通过空闲分区链表来管理。
我实现了:首次适应算法、内存分配和主函数
刘美君实现了:最佳适应算法、最坏适应算法、内存回收和查看主存分配情况
二、详细设计
1)原理概述
●首次适应算法
分配:当进程申请大小为 SIZE 的内存时,系统从空闲区表的第一个表目开
始查询,直到首次找到等于或大于 SIZE 的空闲区。从该区中划出大小为 SIZE
的分区分配给进程,余下的部分仍作为一个空闲区留在空闲区表中。
注意:每次分配和回收后空闲区表都要按首址递增的次序排序。
●最佳适应算法
分配:当进程申请一个存储区时,系统从表头开始查找,当找到第一个满足
要求的空闲区时,停止查找,并且这个空闲区是最佳的空闲区。所谓最佳即选中
的空闲区是满足要求的最小空闲区。
●最坏适应算法
分配:进程申请一个大小为 SIZE 的存储区时,总是检查空闲区表的第一个
空闲区的大小是否大于或等于 SIZE。若空闲区小于 SIZE,则分配失败;否则从
空闲区中分配 SIZE 的存储区给用户,然后修改和调整空闲区表。
●回收内存:按释放区的首址,查询空闲区表,若有与释放区相邻的空闲区,则
合并到相邻的空闲区中,并修改该区的大小和首址,否则,把释放区作为一个空
闲区插入空闲区表。分配和回收后要对空闲区表重新排序。
2)主要数据结构
struct freearea
{
//定义一个空闲区说明表的结构
//分区号
int ID;
long size; //分区大小
long address; //分区起始地址
int state; //状态
};
//--------------定义一个线形表的双向链表存储结构----------------------
typedef struct DuLNode
{
freearea data;
struct DuLNode *prior; //定义一个前驱指针
struct DuLNode *next;
//定义一个后继指针
}DulNode,*DuLinkList;
DuLinkList head;
DuLinkList last;
//------------------所用函数-------------------------------------------
//定义一个头结点指针变量
//定义个尾结点指针变量
int allocate(int ch); //内存分配函数
int release(int ID); //内存回收函数
int First_fit(int ID,int need); //首次适应算法函数
int Best_fit((int ID,int need);
//最佳适应算法函数
int Worst_fit((int ID,int need);
//最佳适应算法函数
void show(); //查看分配函数
//----------------------------开创内存链表-----------------------
int Initblock() //开创带头接点的内存空间链表
3)算法(流程图)
首次适应算法
最佳适应算法
最坏适应算法
分配内存
从链首开始顺序查找
空闲分区链完否?
N
分区大小>所需大小?
Y
分区大小-所需大小<=
不可再分割大小?
N
从该分区中划出所需
大小的新分区
返 回
继续检索下一个表项
Y
N
Y
将该整个分区从空闲
分区链中移出
将该分区分配给相应
的作业,修改有关数据
返 回
4)源程序文件名
20093426—3435
执行文件名
可变分区存储管理.cpp
三、实验结果与分析(要有结果截图)
1.主存的分配
a.首次适应算法
测试数据:创建大小为 100KB 的进程 1
分析:优点:尽可能地利用低地址空间,从而保证高地址空间有较大的空闲区。
缺点:低址部分不断被划分,会留下许多难以利用的、很小的空闲分区。
b.最佳适应算法
测试数据:创建大小为 200KB 的进程 2
分析:优点:(1) 在系统中若存在一个与申请分区大小相等的空闲区,必定会被选中,
而首次适应法则不一定。(2) 若系统中不存在与申请分区大小相等的空闲区,则选中的空闲
区是满足要求的最小空闲区,而不致于毁掉较大的空闲区。
缺点:空闲区的大小一般与申请分区大小不相等,因此将其一分为二,留下来的空闲区
一般情况下是很小的,以致无法使用。随着时间的推移,系统中的小空闲区会越来越多,从
而造成存储区的大量浪费。
c.最坏适应算法
测试数据:创建大小为 300KB 的进程 3