可变分区存储管理

固定分区存储管理的方法内存利用率不高,使用不灵活。

「可变分区存储管理」是另一种存储管理方式。指事先并未将主存划分为一块块分区,而是在作业进入主存时,按作业的大小动态地建立分区,且分区个数也是随机的,实现多个作业对内存的共享,进一步提高内存资源利用率。

例如计算机系统有 2560KB 主存,按照可变分区方式,系统首先为 OS 分配一个系统分区,剩余的作为一个整的分区作为用户分区。OS需要 400KB,则用户区为 2160KB。系统启动后,有 5 个作业依次进入内存,其内存要求和进入时间如表:

进程 主存 时间
P1 600KB 10
P2 1000KB 5
P3 300KB 20
P4 700KB 8
P5 500KB 15

则可变分区存储管理的过程如下

img-2024-05-20 10-07-35.png

由于作业的大小以及进入主存的时间不同。形成以下特点:

  • 分区个数可变,分区大小不固定。
  • 主存中分布着个数和大小都是变化的自由分区。 

必须解决的问题 

  • 记录分区信息的数据结构 
  • 分配算法 
  • 分配和回收操作

硬件

img-2024-04-28 18-10-14.png

img-2024-04-28 18-11-02.png

表管理

如果使用固定分区的MBT方式进行管理,存在缺点

  • 表长难确定,由于分区个数变化,因此 MBT 表项也需变化;
  • 查找速度慢,由于空闲分区在表中一般没有按大小排序,查找一个可供分配的分区需要察看更多的表项。

可变分区内存分配表可由两张表格组成:

  • “已分配区表”:存放已在分配使用的分区信息。
  • “未分配区表”:存放空闲、尚未分配使用的分区信息。 

分配内存时只需查找FBT,提高了内存分配速度。但是以上两种方法采用表格方式,表长仍然难以确定,由此产生了链表空闲区管理方法

算法

以上分配方法各有优缺点,不同情况下,会得到不同的结果。

特点

由于作业的大小以及进入主存的时间不同。形成以下特点:

  • 分区个数可变,分区大小不固定。
  • 主存中分布着个数和大小都是变化的自由分区。 

必须解决的问题 

  • 记录分区信息的数据结构 
  • 分配算法 
  • 分配和回收操作

例题

某一时刻,内存分布如右图

img-2024-04-28 18-07-42.png

有进程 P1(190K), P2(300K),P3(20K)。

问:下列情况下,采用哪种方式可使所有进程装入内存?

  1. 进入内存次序为P1,P2,P3。
  2. 进入内存次序为P3,P2,P1。

解:

例子

计算机系统有 2560KB 主存,按照可变分区方式,系统首先为 OS 分配一个系统分区,剩余的作为一个整的分区作为用户分区。OS 需要 400KB,则用户区为 2160KB。系统启动后,其主存分配图(a),此时有 5 个作业依次进入内存,其内存要求和进入时间如表:

进程 主存 时间
P1 600KB 10
P2 1000KB 5
P3 300KB 20
P4 700KB 8
P5 500JB 15

运行情况如下图(碎片这个概念经常作为简答题考,解释内部、外部碎片产生的原因以及能否作为二次利用,50%以上概率)

img-2024-04-17 19-56-37.png

  • b 时刻,P1,P2,P3 进入内存空间后,剩余的内存空间不足以分配给其他进程。
  • c 时刻 P2 运行完毕,留下的空间称为外部碎片。
  • d 时刻 P4 进入 P2 留下的外部碎片,此时外部碎片被重复利用
  • e 时刻,P1 退出内存,同样留下了外部碎片。目前存储空间内有 3 块碎片,可以随时拿来分配
  • f 时刻,操作系统第一个碎片就可以满足 P5 需求,因此直接分配给 P5