0%

连续内存管理

img.png

单一连续分配

  • 内存只能有一道用户程序,内存分成2块,操作系统区和用户区,用户程序放在用户区
  • 没有外部碎片,因为分配的是整一块,干干净净,容不下第二道程序;但是有内部碎片,因为一道程序可能没那么大
  • 因为是只支持单道程序,可以采用覆盖技术扩充内存

固定分区分配

  • 支持多道程序,将内存用户空间(一部分是系统空间)划分若干个分区,每个分区只能装一道作业
  • 没有外部碎片,有内部碎片
  • 2种划分方式,分区大小相等,分区大小不相等

动态分区分配

  1. 支持多道程序,在进程进入内存时,动态根据进程大小划分分区

  2. 2种数据结构

    • 空闲分区表
    • 空闲分区链
  3. 进程多大,分区就多大,所以没有内部碎片,但是有外部碎片,外部碎片可以用紧凑技术解决

  4. 回收内存分区时,有4种情况

    • 情况一:回收区的后面有一个相邻的空闲分区
    • 情况二:回收区的前面有一个相邻的空闲分区
    • 情况三:回收区的前、后各有一个相邻的空闲分区
    • 情况四:回收区的前、后都没有相邻的空闲分区

总之,相连的空闲分区要合并

  1. 当多个空闲分区都能满足要求时,应该选择哪个分区进行分配?
    • 首次适应算法first fit
    • 最佳适应算法best fit
    • 最坏适应算法worst fit
    • 邻近适应算法next fit
算法思想分区排列顺序优点缺点
首次适应从头到尾找到适合的分区空闲分区以地址递增次序排列性能最好,算法开销小回收后不需要对空闲分区重新排序
最佳适应优先使用更小的分区,以保留更多的分区空闲分区以容量递增次序排列会有更多的大分区被保留下来,更能满足大进程需求会产生很多小、难以利用的碎片,算法开销大,回收后可能需要对空闲分区队列重新排序
最坏适应优先使用更大的分区,以防止产生太多太小的不可用的碎片空闲分区以容量递增次序排列可以减少许多难以利用的小碎片大分区容易被用完,不利于大进程,算法开销大
邻近适应由首次适应演变而来,每次从上次查找结束位置开始查找空闲分区以地址递增次序排列不用每次都从低地址的小分区开始检索,算法开销小

参考文献:王道计算机考研-操作系统