操作系统---动态分区存储管理方式的主存分配回收

一.实验目的

	  深入了解动态分区存储管理方式主存分配回收的实现。

二.实验要求

	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; 
	      使用向量存放分配表,开始时内存和空闲表相同,每次分配或回收一个作业&#
  • 11
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值