- 内部碎片:分配给某进程的内存区域(某分区中),如果有些部分没有用上。
- 外部碎片:是指内存中的某些空闲分区由于太小而难以利用。
一、单一连续分配
- 内存被
划分
为系统区和用户区- 系统区通常位于内存的低地址部分,用于存放操作系统相关数据;用户区用于存放用户进程相关数据。内存中只能有一道用户程序,用户程序独占整个用户区
空间。- 优点:实现简单:无外部碎片(占用整个用户空间),可以采用覆盖技术扩充内存;不一定需要采取内存保护
- 缺点:只能用于单用户、单任务的操作系统中;有内部碎片(如图中的蓝色区域);存储器利用率极低。
二、固定分区分配
- 将整个用户空间(内存)
划分
为若干个固定大小的分区,分区和大小固定,在每个分区中只装入一道作业
- 固定大小的固定分区
- 大小不等的固定分区
- 数据结构:分区说明表
- 实现各个分区的分配与回收。
- 每个表项对应一个分区,通常按分区大小排列。每个表项包括对应分区的大小、起始地址、状态(是否已分配)
- 当某用户程序要装入内存时,由操作系统内核程序根据用户程序大小检索该表,从中找到一个能满足大小的、未分配的分区,将之分配给该程序,然后修改状
态为已分配- 优点:实现简单、无外部碎片
- 缺点:会产生内部碎片,如果程序太大,只能采取覆盖技术来实现,会降低性能
三、动态分区分配
- 又称为可变分区分配。这种分配方式
不会预先划分
内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统分区的大小和数目是可变的- 数据结构和分配
- 存储分区大小、起始地址、状态
- 分配不一定按地址递增顺序排序,取决于采取的动态分区算法。
- 空闲分区表,每次修改表项
- 空闲分区链,每次修改节点
- 没有内部碎片,有外部碎片
碎片空间如何利用:“拼凑技术”,将碎片空间合并为大空间
四、内存空间的回收
- 回收区只有后面有相邻的空闲分区
- 合二为一,起始地址为回收区的起始地址,大小为两片区域的和
- 回收区只有前面有相邻的空闲分区
- 合二为一,起始地址为空闲分区的起始地址,大小为两片区域的和
- 回收区前后都有相邻的空闲分区
- 合三为一,起始地址为前空闲分区的起始地址,大小为三片区域的和
- 回收区前后都没有相邻的空闲分区
- 独立为一个空闲区
五、小结
连续分配管理方式 | 内部碎片 | 外部碎片 |
---|---|---|
单一连续分配 | ✔ | X |
固定分区分配 | ✔ | X |
动态分区分配 | X | ✔ |