Appearance
连续分配(首次/最佳/最坏适应)
考情分析
连续分配属于基本内存管理(28分),选择题常考三种分配策略的区别。属于 🔥🔥 中高频。
内存空闲区大大小小散落各处,新来一个进程该塞进哪块空间?选择不同,碎片的多少和分配效率天差地别。
单一连续分配
内存分为系统区和用户区,用户区只放一个程序。简单但只适用于单用户单任务系统。
有内碎片,无外碎片。
固定分区分配
内存用户区分成若干固定大小的分区,每个分区装一个进程。
| 类型 | 说明 |
|---|---|
| 等大小分区 | 所有分区大小相同,管理简单但不灵活 |
| 不等大小分区 | 分区大小不同,灵活性好一些 |
有内碎片(分区可能大于进程实际需要),无外碎片。
动态分区分配
不预先划分分区,根据进程大小动态分配连续的内存空间。
无内碎片,有外碎片。可通过**紧凑(Compaction)**技术合并外碎片(将进程移动到一起)——类似把书架上零散的空隙都挤到一端,腾出一大块连续空间。
三种分配策略
| 策略 | 规则 | 空闲分区排列 |
|---|---|---|
| 首次适应(First Fit) | 从头开始找,选第一个够大的 | 按地址递增排列 |
| 最佳适应(Best Fit) | 选最小的够大的分区 | 按大小递增排列 |
| 最坏适应(Worst Fit) | 选最大的分区 | 按大小递减排列 |
还有一种变体:
| 策略 | 规则 |
|---|---|
| 邻近适应(Next Fit) | 从上次查找结束的位置继续找 |
策略对比
| 策略 | 优点 | 缺点 |
|---|---|---|
| 首次适应 | 综合性能最好,开销小 | 低地址部分产生很多小碎片 |
| 最佳适应 | 大分区被保留下来 | 产生很多极小的外碎片(难以利用) |
| 最坏适应 | 不会产生太小的碎片 | 大分区被快速用完,大进程可能无法分配 |
| 邻近适应 | 分布均匀 | 大分区也可能被快速拆分 |
综合来看
首次适应算法是实践中效果最好的。虽然低地址区会积累碎片,但因为每次从头开始查找,大的空闲区在高地址处被保留了下来。
手算例题
当前空闲分区表(按地址递增):A=20KB / B=10KB / C=120KB / D=60KB。依次到达 3 个进程:P1=15KB、P2=30KB、P3=50KB。三种策略各分配到哪些分区?
首次适应(地址递增):
| 进程 | 扫描顺序 | 命中 | 分配后状态 |
|---|---|---|---|
| P1=15 | A(20✓) | A | A 剩 5 / B=10 / C=120 / D=60 |
| P2=30 | A(5✗)/B(10✗)/C(120✓) | C | A=5 / B=10 / C 剩 90 / D=60 |
| P3=50 | A(5✗)/B(10✗)/C(90✓) | C | A=5 / B=10 / C 剩 40 / D=60 |
最佳适应(大小递增):
| 进程 | 候选(≥需求中最小) | 命中 | 分配后状态 |
|---|---|---|---|
| P1=15 | A(20)<最小够大> | A | A 剩 5 / B=10 / C=120 / D=60 |
| P2=30 | D(60)<最小够大> | D | A=5 / B=10 / C=120 / D 剩 30 |
| P3=50 | C(120)<唯一够大>(D 剩 30 不够) | C | A=5 / B=10 / C 剩 70 / D=30 |
最坏适应(大小递减):
| 进程 | 候选(最大) | 命中 | 分配后状态 |
|---|---|---|---|
| P1=15 | C(120) | C | A=20 / B=10 / C 剩 105 / D=60 |
| P2=30 | C(105) | C | A=20 / B=10 / C 剩 75 / D=60 |
| P3=50 | C(75) | C | A=20 / B=10 / C 剩 25 / D=60 |
三策略结果对比
- 三种策略最终剩余的可用大块完全不同:首次留 90+60、最佳留 120 拆走 30、最坏 D 完整保留
- 真题答这种题时最易错点是没把"上一题分配后"的状态滚动到下一题——做完 P1 要在新表上找 P2,不是回到初始表
- "最佳适应"反而最容易产生"极小不可用碎片"(这里的 5KB、10KB、30KB 都是隐患),与名字相反
易错
动态分区分配产生的是外碎片(分区之间的空隙),不是内碎片。而固定分区分配产生的才是内碎片(分区内部未用完的空间)。选择题常把两者搞混。
另外,"最佳适应"听起来最优但实际效果不一定好——它会产生大量极小的外碎片,这些碎片几乎无法再利用。
交互可视化
考研高频考点
- 🔥🔥🔥 三种分配策略的规则和空闲分区排列方式
- 🔥🔥🔥 各策略的优缺点对比
- 🔥🔥 首次适应综合性能最好
- 🔥🔥 动态分区有外碎片无内碎片
- 🔥 紧凑技术的概念
连续分配要求每个进程占据一整块连续空间,浪费严重——能不能把进程拆成小块,分散放到内存的各个角落?下篇来看基本分页。