单一连续分区
- 内存分为两块:系统区(OS 内核)和 用户区(一个进程独占)
- 通过界地址寄存器实现越界保护
- 适用:单道批处理系统
- 缺点:CPU 利用率低,内存浪费严重
固定分区
- 内存预先划分为若干个大小固定的分区
- 一个作业占用一个分区
- 通过分区状态表(起始地址 + 分区大小 + 状态)管理
- 进程排队方式:多队列(按大小排队,减少内部碎片)或单队列
- 缺点:内部碎片(分区内未用完的空间),分区总数固定,限制并发进程数
重点 可变分区(动态分区)
- 根据作业大小动态划分内存,需要多少切多少
- 用空闲区链表管理(节点含:大小、起始地址、next 指针)
- 外部碎片问题:经过多次分配释放,空闲分区总和够用但不成连续
分配算法
| 算法 | 策略 | 优点 | 缺点 |
|---|
| 首次适应(First Fit) | 从低地址开始找第一个足够大的空闲分区 | 简单,保留高端大空间 | 产生外部碎片,查找次数多 |
| 循环首次适应(Next Fit) | 从上一次分配的位置继续找(循环链表) | 分配均匀,查找更快 | 不易保留大分区 |
| 最佳适应(Best Fit) | 选最小的足够大的空闲分区 | 剩余碎片最小 | 产生许多小外部碎片 |
| 最差适应(Worst Fit) | 选最大的空闲分区 | 无需查找,直接取首 | 大分区被切碎 |
碎片处理
- 外部碎片:空闲分区总和够用但不成连续,无法分配
- 紧凑(Compaction):移动已分配分区聚到一端,合并空闲空间
- 释放时合并规则:空闲块相邻时需合并(前邻空闲、后邻空闲、前后皆空闲、前后皆占用四种情形)
内部碎片 vs 外部碎片
| 类型 | 定义 | 产生场景 |
|---|
| 内部碎片 | 已分配给进程的分区中未被使用的空间 | 固定分区(进程需求 < 分区大小) |
| 外部碎片 | 空闲分区总和够用但不成连续 | 可变分区(多次分配释放后) |