《动态分区分配与回收算法实验报告(共10页).doc》由会员分享,可在线阅读,更多相关《动态分区分配与回收算法实验报告(共10页).doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上实验报告实验二 动态分区分配与回收算法一、实验目的了解动态分区分配方式中使用的数据结构和分配算法.并进一步加深对动态分区存储管理方式及其实现过程的理解。二、实验原理算法思想:1分区的个数和大小不是固定不变的.而是可变的.随装入的作业动态划分.且不会产生内部碎片。2.外部碎片:若存储块长度为N.在该系统所采用的调度算法下较长时间内无法选出一道长度不超过该块的进程.则称该块为外部碎片。3.首次适应算法(FF):FF算法要求空闲分区链以地址递增的次序链接。在分配内存时.从链首开始顺序查找.直到找到一个大小能满足要求的空闲分区为止。该算法倾向于优先利用内存中低址部分的空闲分区
2、.从而保留了高址部分的大空闲区.这为以后到达的大作业分配大的内存空间创造了条件。4.最佳适应算法(BF):每次为作业分配内存时.BF总是把能满足要求、又是最小的空闲分区分配给作业.避免大材小用。为了加速寻找.该算法要求将所有的空闲分区按其容量从大到小的顺序形成一空闲分区链.自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区.但造成许多小的空闲区。 分区分配中的内存回收有四种情况:(1)回收区与插入点的前一个空闲分区相邻接。(2)回收区与插入点的后一空闲分区相邻接。(3)回收区同时与插入点的前、后两个空闲分区邻接。(4)回收分区既不与前一个分区邻接.也不与后一个分区邻接。另外.最
3、佳适应算法不需要考虑多个进程.而首次适应算法需要考虑多道程序的大小.所以前两个程序只需要输入一个进程的信息.后者因为考虑多个程序的原因.所以需要输入两个进程的信息。三、 实验步骤、数据记录及处理1、 算法流程抽象数据类型的定义:空闲分区结构体类型和结构体链表typedef struct freespaceint num; /分区号int size; /分区大小int address; /分区首地址status state; /分区状态.FREE和BUSY;typedef struct nodefreespace data;node *head;node *next;*Linklist;主程序的
4、流程以及各程序模块之间的层次(调用)关系:主函数中先调用初始化函数.再调用菜单函数引导用户选择操作和相应的算法.用switch多选择结构来判断调用firstAlloc().bestAlloc().display()还是recycle()。程序流程图:2、 运行结果分析:首次适应算法:分配结束后的空闲分区大小和起始地址与结果相同。大小起始地址30K150K20K280K112K400K最佳适应算法:分配结束后的空闲分区大小和起始地址与结果相同。大小起始地址30K400K42K470K90K210K专心-专注-专业 西安工业大学实验报告 四、总结与体会附录:源代码#include#includeu
5、sing namespace std;#define MAXSIZE 512enum status FREE, BUSY ;/枚举类型typedef struct freespaceint num; /分区号int size; /分区大小int address; /分区首地址status state; /分区状态.FREE和BUSY;typedef struct nodefreespace data;node *head;node *next;*Linklist;Linklist first,last;void init()first = new node;last = new node;fi
6、rst-head = NULL;first-next = last;last-head = first;last-next = NULL;last-data.address = 0;last-data.size = MAXSIZE;last-data.num = 0;last-data.state = FREE;void display()cout *主内存分配情况* next;while (p)cout data.num = 0)cout 空闲区 起始地址: data.address 终止地址: data.address+p-data.size 分区大小: data.size KB 状态:空
7、闲 endl;elsecout data.num;cout 起始地址: data.address 终止地址: data.address + p-data.size 分区大小: data.size KB data.state = FREE)cout 空闲 data.state = BUSY)cout 占用 next;cout * endl endl;int firstAlloc()/首次分配int num, size;cout 请输入作业号和分配的主存大小KB: num size;Linklist list = new node;list-data.num = num;list-data.siz
8、e = size;list-data.state = BUSY;node *p = first-next;while (p)if (p-data.state = FREE&p-data.size = size)/有大小刚好合适的空闲块p-data.state = BUSY;p-data.num = num;display();return 1;if (p-data.state = FREE&p-data.size size)/有大小比他大的空闲块list-head = p-head;list-next = p;list-data.address = p-data.address;p-head-
9、next = list;p-head = list;p-data.address = list-data.address + list-data.size;p-data.size -= size;display();return 1;p = p-next;display();return 0;int bestAlloc()/最佳分配int num, size;cout 请输入作业号和分配的主存大小KB: num size;int min_space=MAXSIZE;Linklist list = new node;list-data.num = num;list-data.size = siz
10、e;list-data.state = BUSY;node *p = first-next;node *q = NULL;while (p)/找到最佳位置if (p-data.size size | p-data.size = size)&p-data.state=FREE)if (p-data.size - size data.size - size;p = p-next;if (q = NULL)return 0;elseif (min_space = 0)q-data.num = num;q-data.state = BUSY;display();return 1;elselist-he
11、ad = q - head;list-next = q;list-data.address = q-data.address;q-head-next = list;q-head = list;q-data.address += size;q-data.size -= size;display();return 1;int recycle()/碎片整理int num;cout 请输入你要回收内存的作业号: num;node *p = first;while (p)if (p-data.num = num)p-data.state = FREE;p-data.num = 0;if (p-head-
12、data.state = FREE)/与前一块空闲区相邻.则合并p-head-data.size += p-data.size;p-head-next = p-next;p-next-head = p-head;if (p-next-data.state = FREE)/与后一块空闲区相邻.则合并p-data.size += p-next-data.size;p-next-next-head = p;p-next = p-next-next;break;p = p-next;display();return 1;void menu()cout *内存分配系统* endl;cout 1.首次适应
13、算法分配内存 endl;cout 2.最佳适应算法分配内存 endl;cout 3.查看主存分配情况 endl;cout 4.回收主存 endl;cout 请选择: choose;switch (choose)case 1:firstAlloc();break;case 2:bestAlloc();break;case 3:display();break;case 4:recycle();break;default :cout 输入错误! endl;break;欢迎您的光临,Word文档下载后可修改编辑.双击可删除页眉页脚.谢谢!希望您提出您宝贵的意见,你的意见是我进步的动力。赠语; 1、如果我们做与不做都会有人笑,如果做不好与做得好还会有人笑,那么我们索性就做得更好,来给人笑吧! 2、现在你不玩命的学,以后命玩你。3、我不知道年少轻狂,我只知道胜者为王。4、不要做金钱、权利的奴隶;应学会做“金钱、权利”的主人。5、什么时候离光明最近?那就是你觉得黑暗太黑的时候。6、最值得欣赏的风景,是自己奋斗的足迹。7、压力不是有人比你努力,而是那些比你牛几倍的人依然比你努力。