分区存储管理是一种很早期的内存管理方案,其基本思想是将内存区域划分为多个区,给每个作业分配一个区使用,并且每个作业只能在被分配的区中运行。
按照划分方式不同,主要有三种不同的分区方式:固定分区,可变分区,重定位分区
固定分区
固定分区是指当程序载入时,系统为程序选择一个大小最接近作业大小的分区。
如上图所示,新作业大小与分区3接近,故而新作业将被加载到分区3中。
由于每个作业大小不一定能恰好等于分区大小,故而会产生大量的内碎片,造成内存空间浪费。
可变分区
可变分区是指在作业加载时由操作系统根据作业实际大小来分配分区(作业大小等于分区大小)。这种方式能解决固定分区内存浪费的问题。这种方式需要系统记录两张表:已分配分区表和未分配分区表。
分区选择算法主要分为以下四类:
最佳适应算法
这种方式的核心是,假设内存中由n个空白分区。当作业载入时,系统从n个空白分区中找出最接近作业大小的分区。但是由于空白区的大小不可能刚好等于作业大小,故而空白区会被分为两个分区,一个恰好等于作业大小,一个为剩余大小。当空白分区被拆分得不能再分时,剩下的空白空间被称作外碎片。
最差适应算法
这种方式的核心是,总是将作业加载到最大的空白区,空白区被拆分后的剩余空白区依然很大,这样子就尽可能减少了外碎片。
首次适应算法
系统每次加载作业时,都从内存中最低地址开始查找一个能够加载作业的分区。
循环首次适应算法
系统每次加载作业时,都从上一次分配的分区开始查找一个能够加载作业的分区。
重定位分区
无论是固定分区还是可变分区都不可避免会产生碎片,使用重定位分区的方式可以完全消除这个问题。重定位分区的思想是将已经分配的分区进行移动。当系统不能找到一块足够大的分区加载作业时,移动所有的已经分配的分区,使之“挨”在一起。这样子就会使所有空白分区和外碎片连接在一起,合并起来的空间或许足够再加载作业