Skip to content

连续分配(首次/最佳/最坏适应)

考情分析

连续分配属于基本内存管理(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=15A(20✓)AA 剩 5 / B=10 / C=120 / D=60
P2=30A(5✗)/B(10✗)/C(120✓)CA=5 / B=10 / C 剩 90 / D=60
P3=50A(5✗)/B(10✗)/C(90✓)CA=5 / B=10 / C 剩 40 / D=60

最佳适应(大小递增):

进程候选(≥需求中最小)命中分配后状态
P1=15A(20)<最小够大>AA 剩 5 / B=10 / C=120 / D=60
P2=30D(60)<最小够大>DA=5 / B=10 / C=120 / D 剩 30
P3=50C(120)<唯一够大>(D 剩 30 不够)CA=5 / B=10 / C 剩 70 / D=30

最坏适应(大小递减):

进程候选(最大)命中分配后状态
P1=15C(120)CA=20 / B=10 / C 剩 105 / D=60
P2=30C(105)CA=20 / B=10 / C 剩 75 / D=60
P3=50C(75)CA=20 / B=10 / C 剩 25 / D=60

三策略结果对比

  • 三种策略最终剩余的可用大块完全不同:首次留 90+60、最佳留 120 拆走 30、最坏 D 完整保留
  • 真题答这种题时最易错点是没把"上一题分配后"的状态滚动到下一题——做完 P1 要在新表上找 P2,不是回到初始表
  • "最佳适应"反而最容易产生"极小不可用碎片"(这里的 5KB、10KB、30KB 都是隐患),与名字相反

易错

动态分区分配产生的是外碎片(分区之间的空隙),不是内碎片。而固定分区分配产生的才是内碎片(分区内部未用完的空间)。选择题常把两者搞混。

另外,"最佳适应"听起来最优但实际效果不一定好——它会产生大量极小的外碎片,这些碎片几乎无法再利用。

交互可视化

加载可视化中...

考研高频考点

  • 🔥🔥🔥 三种分配策略的规则和空闲分区排列方式
  • 🔥🔥🔥 各策略的优缺点对比
  • 🔥🔥 首次适应综合性能最好
  • 🔥🔥 动态分区有外碎片无内碎片
  • 🔥 紧凑技术的概念

连续分配要求每个进程占据一整块连续空间,浪费严重——能不能把进程拆成小块,分散放到内存的各个角落?下篇来看基本分页。

真题练习

相关真题(5题)

2024Q27选择题2分

CPU模式:用户态只能执行非特权指令,内核态可执行所有指令

连续分配
2019Q32选择题2分

最佳适应算法:每次留下最小的空闲分区,最容易产生碎片

连续分配
2017Q25选择题2分

最佳适应算法:分区回收与合并后重新按大小排序

连续分配
2012Q25选择题2分

虚拟存储:必须基于非连续分配(分页/分段)技术

连续分配
2010Q28选择题2分

分段地址:32位地址-8位段号=24位段内偏移,最大段长2²⁴

连续分配