4-3 连续分配存储管理方式

为了能将用户程序装入内存,必须为它分配一定大小的内存空间。连续分配方式是最早出现的一种存储器分配方式。连续分配方式可分为四类:单一连续分配、固定分区分配、动态分区分配以及动态可重定位分区分配。

  1. 单一连续分配:单道程序环境下,当时的存储器管理方式是把内存分为系统区和用户区两部分,系统区仅提供给OS使用,它通常是放在内存的低址部分。而在用户区内存中,仅装有一道用户程序,即整个内存的用户空间由该程序独占。这样的存储器分配方式被称为单一连续分配方式。
  2. 固定分区分配(产生内碎片):将整个用户空间划分为若干个固定大小的区域,在每个分区中只装入一道作业,这样就形成了最早的、也是最简单的一种可运行多道程序的分区式存储管理方式。

划分分区的方法:

  1. 分区大小相等(指所有的内存分区大小相等)。其缺点是缺乏灵活性,即当程序太小时,会造成内存空间的浪费。程序太大时,一个分区又不足以装入该程序,致使该程序无法运行。
  2. 分区大小不等。为了增强存储器分配的灵活性,应将存储器分区划分为若干个大小不等的分区。最好能对常在该系统中运行的作业大小进行调查,根据用户的需求来划分。

 

固定分区分配是最早出现的、可用于多道程序系统中的存储管理方式,由于每个分区的大小固定,必然会造成存储空间的浪费,很少将它用于通用的OS中。

 

3.动态分区分配(产生外碎片):又称为可变分区分配,它是根据进程的实际需要,动态地为之分配内存空间。且涉及到分区分配中所用的数据结构、分区分配算法和分区的分配与回收操作。

(1)动态分区分配中的数据结构,用以描述空闲分区和已分配分区的情况,为分配提供依据,常用的数据结构有以下两种形式:

空闲分区表,用于记录每个空闲分区的情况,每个空闲分区占一个表目,表目中包括分区号、分区大小、和分区始址等数据项。

空闲分区链:为了实现对空闲分区的分配和链接,在每个分区的起始部分设置一些用于控制分区分配的信息,以及用于链接各区所用的前向指针,在分区尾部设置一后向指针。通过前、后链接指针,可将所有的空闲分区链接成一个双向链

4-3 连续分配存储管理方式

 

2)动态分区分配算法

为把一个新作业装入内存,需按照一定的分配算法,从空闲分区表或空闲分区链中选出一分区分配给该作业。

基于顺序搜索的动态分区分配算法

常用的分配算法:

  1. 首次适应算法FF

FF算法要求空闲分区链以地址递增的次序链接。分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止。

该算法倾向于优先利用内存中低址部分的空闲分区,从而保留了高址部分的大部分空闲区,

缺点:低址部分不断被划分,会留下许多难以利用的、很小的空闲分区,称为碎片。

(2) 循环首次适应算法(NF从上次已分配的分区下一个开始查找)

从上次找到的空闲分区的下一个分区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。

缺点:这样会缺乏大的空闲分区。

 

(3) 最佳适应算法(BF)按照容量递增

该算法要求将所有的空闲分区按其容量以小到大的顺序形成一空闲分区链。

总是能把满足要求又是最小的空闲分区分配给作业,避免“大材小用”。

缺点:由于每次分配后所切割下来的剩余部分总是最小的,这样,在存储器中会留下许多难以利用的碎片。

 

基于索引搜索的动态分区分配算法

  1. 快速算法
  2. 伙伴系统
  3. 哈希算法

 

4.3.6动态可重定位分配

动态重定位分区分配算法动态分区分配算法基本相同,差别在于增加了紧凑的功能。