计算机操作系统——连续存储分配管理

一、 实验目的

1) 理解内存管理相关理论;
2) 掌握连续内存管理理论;
3) 掌握动态连续内存管理理论。

二、实验仪器设备

计算机1台、VC++ 6.0

三、实验原理或算法

连续内存分配:为一个用户程序分配一个连续的内存空间,它分为单一连续分配,固定分区分配和动态分区分配,在本实验中,我们主要讨论动态分区分配。
动态连续分配:根据进程的实际需要,动态地为之分配内存空间。在实现可变分区分配时,将涉及到分区分配中的所用的数据结构、分区分配算法和分区的分配与回收操作这几个问题。

  1. 分区分配中的数据结构
    (1) 空闲分区表:一张数据表,用于记录每个空闲块的情况,如起始地址、大小,使用情况等。
    (2) 空闲分区链:为了实现对空闲分区的分配,把所有的空闲内存块连成一个双向链,便于分配和回收。
  2. 分区分配算法
    (1) 首次适应算法:从链首出发,寻找满足申请要求的内存块。
    (2) 循环首次适应算法:从上次查找的下一个空闲块开始查找,直到找到满足要求的内存块。
    (3) 最佳适应算法:在每次查找时,总是要找到既能满足要求又最小的内存块给分配给用户进程。为了方便查找,所有的空闲内存块按从小到大的顺序存放在空闲链表中。
  3. 内存分配操作
    利用分配算法查找到满足要求的内存块,设请求内存大小为 u.size,而分配的内存块大小为 m.size,如果 m.size-u.size≤size (size 为设定的不可再分割的内存大小),则不再切割;反之,按 u.size 分配给申请者,剩余的部分仍留在内存链中。
  4. 回收内存
    根据回收区地址,从空闲链表中找到相应的插入点。
    (1) 回收区与插入点的前一个空闲分区相邻,此时将回收区与前一分区合并,不为回收区分配新表项。
    (2) 回收区与插入点的后一个空闲分区相邻,将回收区与后一分区合并成一个新区,回收区的首址最为新分区的首址。
    (3) 回收区与前(F1)后(F2)分区相邻,则把三个分区合并成一个大的分区,使 F1 的首址作为新分区的首址,修改 F1 大小,撤销 F2 表项。
    (4) 回收区不与任何分区相邻,为回收区建立一个新表项。

四、程序代码及验证过程

在这里插入图片描述
初始空闲表,未进行作业分配:
在这里插入图片描述

  1. 使用first fit算法申请作业名为work1,长度为18的空间:
    Work1长度为18,优先选择起始地址为50,长度为20的空闲空间,申请完成起始地址更新为50+18即68,长度更新为20-18即2
    在这里插入图片描述
  2. 接着使用best fit算法申请作业名为work2,长度为10的空间:
    Work2长度为10,best fit算法先将空闲分区表按空闲分区大小的升序组织,再从头查找符合要求的第一个分区。所以优先选择起始地址为80,长度为10的空闲空间,申请完成起始地址更新为80+10即90,长度更新为12-10即2
    在这里插入图片描述
  3. 接着使用worst fit算法申请作业名为work3,长度为5的空间:
    Work3长度为5,worst fit算法先将空闲分区表按空闲分区大小的降序组织,再从头选择最大的空闲分区。所以优先选择起始地址为120,长度为25的空闲空间,申请完成起始地址更新为120+5即125,长度更新为25-5即20
    在这里插入图片描述
  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值