Appearance
连续分配(首次/最佳/最坏适应)
考情分析
连续分配属于基本内存管理(28分),选择题常考三种分配策略的区别。属于 🔥🔥 中高频。
内存空闲区大大小小散落各处,新来一个进程该塞进哪块空间?选择不同,碎片的多少和分配效率天差地别。
单一连续分配
内存分为系统区和用户区,用户区只放一个程序。简单但只适用于单用户单任务系统。
有内碎片,无外碎片。
固定分区分配
内存用户区分成若干固定大小的分区,每个分区装一个进程。
| 类型 | 说明 |
|---|---|
| 等大小分区 | 所有分区大小相同,管理简单但不灵活 |
| 不等大小分区 | 分区大小不同,灵活性好一些 |
有内碎片(分区可能大于进程实际需要),无外碎片。
动态分区分配
不预先划分分区,根据进程大小动态分配连续的内存空间。
无内碎片,有外碎片。可通过**紧凑(Compaction)**技术合并外碎片(将进程移动到一起)——类似把书架上零散的空隙都挤到一端,腾出一大块连续空间。
三种分配策略
| 策略 | 规则 | 空闲分区排列 |
|---|---|---|
| 首次适应(First Fit) | 从头开始找,选第一个够大的 | 按地址递增排列 |
| 最佳适应(Best Fit) | 选最小的够大的分区 | 按大小递增排列 |
| 最坏适应(Worst Fit) | 选最大的分区 | 按大小递减排列 |
还有一种变体:
| 策略 | 规则 |
|---|---|
| 邻近适应(Next Fit) | 从上次查找结束的位置继续找 |
策略对比
| 策略 | 优点 | 缺点 |
|---|---|---|
| 首次适应 | 综合性能最好,开销小 | 低地址部分产生很多小碎片 |
| 最佳适应 | 大分区被保留下来 | 产生很多极小的外碎片(难以利用) |
| 最坏适应 | 不会产生太小的碎片 | 大分区被快速用完,大进程可能无法分配 |
| 邻近适应 | 分布均匀 | 大分区也可能被快速拆分 |
综合来看
首次适应算法是实践中效果最好的。虽然低地址区会积累碎片,但因为每次从头开始查找,大的空闲区在高地址处被保留了下来。
易错
动态分区分配产生的是外碎片(分区之间的空隙),不是内碎片。而固定分区分配产生的才是内碎片(分区内部未用完的空间)。选择题常把两者搞混。
另外,"最佳适应"听起来最优但实际效果不一定好——它会产生大量极小的外碎片,这些碎片几乎无法再利用。
交互可视化
考研高频考点
- 🔥🔥🔥 三种分配策略的规则和空闲分区排列方式
- 🔥🔥🔥 各策略的优缺点对比
- 🔥🔥 首次适应综合性能最好
- 🔥🔥 动态分区有外碎片无内碎片
- 🔥 紧凑技术的概念
连续分配要求每个进程占据一整块连续空间,浪费严重——能不能把进程拆成小块,分散放到内存的各个角落?下篇来看基本分页。