- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统课程设计---动态分区分配存储管理
操作系统课程设计
动态分区分配存储管理
吕 霆计算机10-01班
第一章 课程设计概述
1.1 设计任务:
动态分区分配存储管理
1.2 设计要求
建立描述内存分配状况的数据结构;
?建立描述进程的数据结构;
?使用两种方式产生进程:(a)自动产生, (b)手工输入;
? 在屏幕上显示内存的分配状况、每个进程的执行情况;
? 建立分区的分配与回收算法,支持紧凑算法;
? 时间的流逝可用下面几种方法模拟:(a)按键盘,每按一次可认为过一个时间单位; (b) 响应WM_TIMER;
? 将一批进程的执行情况存入磁盘文件,以后可以读出并重放;
? 支持算法:首次适应算法、循环首次适应算法、最佳适应算法:最坏适应算法。
1.3 设计目的
旨在让我们更好的了解动态分区管理方面的知识.
第二章 原理及算法描述
2.1动态分区分配算法原理
首次适应算法
* 算法概述:分配内存时,从链首开始顺序查找,找到满足的空闲分区则划出空间分配,余下的空闲空间仍保留在空闲链表中
* 实现方法:分配时从数组第一个元素开始比较,若符合条件则将该元素减去对应作业的值
循环首次适应算法
* 算法概述:由首次适应算法演变,只是每次分配改为由上一次找到的空闲分区开始查找
* 实现方法:在首次适应算法的基础上增加一个值用于记录找到的空闲分区的位置
最佳适应算法
* 算法概述:每次为作业分配内存时,总是把能满足要求、又是最小的空闲分区分配给作业
* 实现方法:我们决定每次分配先把空闲分区按从小到大的顺序排列,然后将第一个匹配分区分配给作业
最坏适应算法
* 算法概述:每次为作业分配内存时,总是挑选一个最大的空闲分区分割给作业使用
* 实现方法:算法与最佳适应算法几乎相同,仅在排序时把空闲分区表按从大到小的顺序排列,所以未作详细注释
回收分区
当进程运行完毕释放内存时,系统根据回收区的首址,从空闲区链(表)中找到相应的插入点,此时可能出现以下四种情况之一;
1)回收区与插入点的前一个空闲分区F1相邻接,此时应将回收区与插入点的前一分区合并,不必为回收区分配新表项,而只需修改其前一分区F1的大小.
2)回收分区与插入点的后一空闲分区F2相邻接,此时也可将两分区合并,形成新的空闲分区,但用回收区的首址作为新空闲区的首址,大小为两者之和.
3)回收区同时与插入点的前,后两个分区邻接,此时将三个分区合并,使用F1的表项和F1的首址,取消F2的表项,大小为三者之和.
4)回收区既不与F1相邻接,又不与F2邻接.这时应为回收区单独建立一新表项,填写回收区的首址和大小,并根据其首址插入到空闲链中的适当位置.
紧凑算法
通过移动内存中的作业的位置,以把原来多个分散的小分区拼接成一个大分区的方法.
第三章 开发环境
此程序是本人利用c++语言在vs2012的开发环境中实现的
第四章 程序实现--数据结构
#include iostream
#include string
#include fstream
using namespace std;
ofstream stream;//输出流对象
int ary1[20][4];//内存分配状态
int ary2[20][3];//空闲分区状态
int ary3[10];//进程分配状态
int recycle;//需要回收的盘块序号
int id1;//算法选择号
int m;//内存区数
int n;//空闲区数
int q;//进程数
int r=0;//循环首次适应算法:对应的这次查找到的空闲分区序号
//打印输出函数
void vision()
{
int i;
int j;
if(id1==1)stream.open(first_fit.txt, ios::app);
if(id1==2)stream.open(nextfirst_fit.txt, ios::app);
if(id1==3)stream.open(best_fit.txt,ios::app);
if(id1==4)stream.open(worst_fit.txt, ios::app);
if(id1==5)stream.open(compact.txt,ios::app);
if(id1==6)stream.open(huishou.txt,ios::app);
cout-------------内存分配状态-------------endl;
cout分区号
文档评论(0)