【操作系统】内存的连续分配管理

前言

当我们的进程在完成编译以后,需要装入内存,此时就有两种方式来进行内存的分配:连续分配、非连续分配。

连续分配管理的方式

单一连续分配

在这里插入图片描述
首先,整个内存被分为了系统区用户区两部分。用户进程只能分配到用户区中,而且只能分配一个进程到用户区。这就是所谓的单一连续分配方式。

  • 优点:实现简单;无外部碎片(主要是因为整个用户区都分配给一个进程了,自然没呀外部的碎片空间)、不一定需要内存保护;
  • 缺点:只能用于单用户、单任务的操作系统;
  • 有内部碎片(用户区都分配给一个进程,导致没利用的空间直接空闲);
  • 存储器利用率低;

固定分区分配

在这里插入图片描述
与单一连续分配方式对应的是固定分配分区。在装入多个进程时,操作系统直接给每个进程分配固定大小的内存空间即为固定分配分区方式。为了让操作系统知道这些分区的具体位置,操作系统会维护相关信息,并将其放入分区说明表中。分区说明表的内容概括如下图:
在这里插入图片描述

  • 优点:实现简单;无外部碎片;
  • 缺点:较大用户程序时,需要采用覆盖技术扩充内存,降低了性能;会产生内部碎片,导致内存利用率降低;

动态分区分配

以上两种方式在分配内存空间时,都相当于是分配了固定大小的内存区域。那么要实现动态的分配内存区域?

我们可以从三个方面来思考:

  • 如何记录内存的使用情况?
  • 选择哪个分区给新进程?
  • 已使用的分区怎么回收?

如何记录内存的使用情况

在记录内存使用情况方面,对固定分区分配的方式做了优化。通过空闲分区表记录内存的使用情况。
在这里插入图片描述
其底层数据结构可以是数组,也可以是双向链表。采用双向链表时,进程进程分配内存空间时,可以向前或者向后查询(方便使用多个分区,看相邻的那几个分区大小更适合当前进程)。

如何选择分区

因此就涉及到了该如何判断哪些分区更适合装入当前进程的方式。具体有以下几种(不同的算法表示了上图链表的排序方式):

  • 首次适应算法:从低地址查找合适空间;
  • 最佳适应算法:优先使用最小空闲空间;
  • 最坏适应算法:优先使用最大连续空间;
  • 临近适应算法:从上次查找处向后查找;

以上几种算法做一个对比,如下图:
在这里插入图片描述

如何对分区进行回收

假如当前存在下图的一个内存分配情况:
在这里插入图片描述
此时用户区存在五个分区,空闲分区仅剩一个,此时的空闲分区表如下:
在这里插入图片描述
如果现在P1进程被回收,那么之前P1进程分配的内存分区信息将会更新到空闲分区表中。
在这里插入图片描述
在这里插入图片描述
接下来,P3进程也进行了回收操作,同样的,空闲分区表将会更新P3进程之前所分配的内存分区信息。
在这里插入图片描述
在这里插入图片描述
以上两个进程的相继回收以后,假如P2或者P4进程继续回收,会使得空闲分区变得连贯,操作系统会将相邻空间合并,同时更新空闲分区表。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Honey Ro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值