当前位置:   article > 正文

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

动态分区存储管理方式的主存分配回收

一.实验目的

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

二.实验要求

	1.使用动态分区存储管理方式分配回收内存。
    2.使用最优适应算法完成主存空间的分配。
    3.输出空闲表,分配表,内存的分配情况。
  • 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; 
	      使用向量存放分配表,开始时内存和空闲表相同,每次分配或回收一个作业&#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/755675
推荐阅读
相关标签
  

闽ICP备14008679号