如何对内存进行分区?
将内存分为一些大小相等或不等的分区(partition),每个应用进程占用一个分区。操作系统占用其中一个分区。适用于多道程序系统和分时系统,支持多个程序并发执行,但是难以进行内存分区的共享。
固定分区
把内存划分为若干个固定大小的连续分区。每个分区装一个且只能装一个作业。可以采用大小相等和大小不等两种形式。
分区大小相等:根据内存空间大小和程序运行大小划分成相同大小的分区。
分区大小不等:多个小分区、适量的中等分区、少量的大分区。根据程序的大小,分配当前空闲的、适当大小的分区。
动态分区
内存不是预先划分好的,在作业装入时,根据作业的需求和内存空间的使用情况来决定是否分配,若有足够的空间,则按需要分割一部分分区给该进程;否则令其等待内存空间。
动态分区分配算法
首次适应法(first-fit):按分区的先后次序,从头查找,找到符合要求的第一个分区。
下次适应法(next-fit):按分区的先后次序,从上次分配的分区起查找(到最后分区时再回到开头),找到符合要求的第一个分区。
最佳适应法(best-fit):找到其大小与要求相差最小的空闲分区。
最坏适应法(worst-fit):找到最大的空闲分区。
动态分区回收
进程执行结束时,要收回存储区,需要对空闲区进行合并,有四种情况:
(1)上下相邻分区都是空闲区:取消下相邻分区,修改上相邻分区的大小。
(2)上相邻区是空闲区:修改上相邻分区的大小。
(3)下相邻区是空闲区:修改下相邻分区的起始地址和大小。
(4)不与其他空闲区相邻:作为一个新空闲区插入可用分区表。
碎片问题
经过一段时间的分配回收后,内存中存在很多很小的空闲块。它们每一个都很小,不足以满足分配要求;但其总和满足分配要求。这些空闲块被称为碎片,造成了存储资源的浪费。
可以采用紧凑技术解决碎片问题,将占用分区向内存一端移动,空闲分区聚集在另一端,再合并成为一个空闲分区。
本节资料

