赞
踩
一.实验目的
深入了解动态分区存储管理方式主存分配回收的实现。
二.实验要求
1.使用动态分区存储管理方式分配回收内存。
2.使用最优适应算法完成主存空间的分配。
3.输出空闲表,分配表,内存的分配情况。
三.实验设计
算法思想: 利用最优适应算法分配内存,使用合并内存进行回收内存。
最优适应算法: 每次为作业分配主存时,总把能满足要求的,又是最小的空闲的主存分配给作业,避免“大材小用”。
具体实现: 通过第一次遍历空闲表时,查找满足作业大小的主存空间(所谓的满足,不是指空间大小必须相等,而是主存的空间大小与作业的大小差值小于系统规定的值(这样可以避免分割碎片)),若找到满足的主存空间,即对作业进行分配主存空间,修改空闲表和分配表;若没有找到满足主存空间,则进行第二次遍历空闲表,查找第一个大于作业的大小的主存空间,对主存空间进行分割,修改空闲表和分配表。
合并空间回收内存: 进行内存回收时,分为四种情况:
1.回收区与前一个空闲区F1相邻,仅修改空闲区的大小。
2.回收区与后一个空闲区F2相邻,修改空闲区的起始地址和空闲区的地址。
3.回收区既与前一个空闲区F1相邻,又与后一个空闲区F2相邻,修改空闲区的起始地址 和空间大小,将空闲区F2的信息从空闲表中删除。
4.回收区既不与前一个空闲区F1相邻,又不与后一个空闲区F2相邻,直接在空闲表加入回收区的信息。
具体实现: 通过输入作业名,进行对作业的回收。首先,在分配表中查找作业名,若找到,则在空闲表中进行遍历查看符合以上四种情况的哪一种,执行回收区回收后,要在分配表中将该作业删除。若没找到,则输出作业名不存在。
算法流程图
最优适应算法
内存回收
四.代码设计:
1.空闲表结构: struct free_table{ int address; int size; int flag;//空闲时为0,分配时为1 }; 2.分配表结构: struct used_table{ string process;//作业名 int address; int size; int flag; }; 3.空闲表: free_table a[1]={0,100,0}; vector<free_table> vec_free(a,a+1);//空闲表初始化 使用向量存放空闲表,对内存空闲表初始化,每次回收或分配一个作业,空闲表变动一次。 4.分配表: vector<used_table> vec_used; 使用向量存放分配表,开始时分配表为空,每次分配或回收一个作业,分配表变动一次。 5.内存: vector<used_table> vec; 使用向量存放分配表,开始时内存和空闲表相同,每次分配或回收一个作业&#
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。