. .
. 《操作系统》课程实验报告
实验名称:动态分区存储管理
姓 名: 王子瑜 学 号: 5
地 点: 四教楼 指导老师: 放美
专业班级: 软件工程(测试技术14-02)实验成绩:
. .
. .
一、 实验要求:
熟悉并掌握动态分区分配的各种算法。
熟悉并掌握动态分区中分区回收的各种情况,并能够实现分区合并。
二、实验容:
用高级语言模拟实现动态分区存储管理,要求:
1、 分区分配算法至少实现首次适应算法、最佳适应算法和最坏适应算法中的至
少一种。熟悉并掌握各种算法的空闲区组织方式。 2、 分区的初始化——可以由用户输入初始分区的大小。(初始化后只有一个空
闲分区,起始地址为0,大小是用户输入的大小)
3、 分区的动态分配过程:由用户输入作业号和作业的大小,实现分区过程。 4、 分区的回收:用户输入作业号,实现分区回收,同时,分区的合并要体现出
来。(注意:不存在的作业号要给出错误提示!)
5、 分区的显示:任何时刻,可以查看当前存的情况(起始地址是什么,大小多
大的分区时空闲的,或者占用的,能够显示出来)
要求考虑:(1)存空间不足的情况,要有相应的显示;
(2)作业不能同名,但是删除后可以再用这个名字;
(3)作业空间回收是输入作业名,回收相应的空间,如果这个作业名不存在,也
要有相应的提示。
三、实验代码
#include
#include
#define SIZE 640 // 存初始大小
#define MINSIZE 5 // 碎片最小值
enum STATE { Free, Busy };
struct subAreaNode {
int addr; // 起始地址
int size; // 分区大小
int taskId; // 作业号
. . .
. .
STATE state; // 分区状态
subAreaNode *pre; // 分区前向指针
subAreaNode *nxt; // 分区后向指针
}subHead;
// 初始化空闲分区链
void intSubArea() {
// 分配初始分区存
subAreaNode *fir = (subAreaNode *)malloc(sizeof(subAreaNode));
// 给首个分区赋值
fir->addr = 0;
fir->size = SIZE;
fir->state = Free;
fir->taskId = -1;
fir->pre = &subHead;
fir->nxt = NULL;
// 初始化分区头部信息
subHead.pre = NULL;
subHead.nxt = fir; }
. . .
相关推荐: