logo资料库

可变分区存储管理实验报告.doc

第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
资料共20页,剩余部分请下载后查看
可变分区存储管理
一、设计内容及要求
二、详细设计
三、实验结果与分析(要有结果截图)
1.主存的分配
a.首次适应算法
测试数据:创建大小为100KB的进程1
四、设计总结
课程设计报告 课程名称: 操作系统原理 题目名称: 可变分区存储管理 姓 名: 学 号: 班 级: 同 组 姓 名: 课程设计时间: 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
分享到:
收藏