连续分配管理方式
补充:
非连续分配管理方式:
- 基本分页存储管理
- 基本分段存储管理
- 段页式存储管理
一、前言
对于内存来说:
- 内部碎片:已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间
- 外部碎片:还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域
二、单一连续分配
内存被划分为系统区和用户区。
- 系统区:通常位于内存的低地址部分,存放操作系统相关数据。
- 用户区:存放用户进程相关数据。
内存中只能有一道用户程序,用户程序独占整个用户区空间。
-
优点:
- 无外部碎片;
- 实现简单;
- 可以使用覆盖技术扩充内存;
- 不一定需要采取内存保护(eg: 早期的 PC 操作系统 MS-DOS )
-
缺点:
- 有内部碎片;
- 只能用于单用户、单任务的操作系统中;
- 存储器利用率极低。
三、固定分区分配
将整个用户空间划分为若干个固定大小的分区,在每个分区中只装入一道作业。
-
优点:
- 无外部碎片
- 实现简单
-
缺点:
- 会产生内部碎片,内存利用率低
- 当用户程序太大时,可能所有的分区都不能满足需求,此时不得不采用覆盖技术来解决,但这又会降低性能
(一)分区大小相等
缺乏灵活性,但是很适合用于用一台计算机控制多个相同对象的场合(比如:钢铁厂有 n 个相同的炼钢炉,就可把内存分为 n 个大小相等的区域存放 n 个炼钢炉控制程序)
(二)分区大小不等
增加了灵活性,可以满足不同大小的进程需求。根据常在系统中运行的作业大小情况进行划分(比如:划分多个小分区、适量中等分区、少量大分区)
四、动态分区分配(可变分区分配)
这种分配方式不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统分区的大小和数目是可变的。
如果内存中空闲空间的总和本来可以满足某进程的要求,但由于进程需要的是一整块连续的内存空间,因此这些“碎片”不能满足进程的需求。但可以通过紧凑(拼凑,Compaction )技术来解决外部碎片。
(一)系统要用什么样的数据结构记录内存的使用情况?
(二)当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?
按照一定的动态分区分配算法(见下一节)。
(三)如何进行分区的分配与回收操作?
回收内存分区时分四种情况(相邻的空闲分区合并):