408操作系统:动态分区分配算法——首次、循环首次、最佳、最差适应
·
复习位置:操作系统 → 内存管理 → 连续分配管理方式 → 动态分区分配
一、四种算法核心区别
| 算法 | 英文 | 选择方式 | 典型特点 |
|---|---|---|---|
| 首次适应 | First Fit,FF | 从低地址开始,找到第一个能满足要求的空闲分区 | 低地址容易产生碎片,高地址容易保留大空闲区 |
| 循环首次适应 | Next Fit,NF | 从上次查找结束位置继续寻找 | 空闲区使用较均匀 |
| 最佳适应 | Best Fit,BF | 找到能满足要求的最小空闲分区 | 容易留下大量很小的外部碎片 |
| 最差适应 | Worst Fit,WF | 每次选择最大的空闲分区 | 会不断消耗大的连续空闲区 |
二、首次适应算法 First Fit
规则:
每次从低地址开始查找,
找到第一个足够大的空闲分区就立即分配。
特点:
实现简单,查找速度通常较快。
低地址区域会被频繁切割,容易产生小碎片。
高地址区域较少被使用,因此更容易保留较大的连续空闲区。
408高频结论:
“最有可能使高地址形成较大空闲区”
→ First Fit
三、循环首次适应算法 Next Fit
规则:
从上一次查找结束的位置继续向后寻找,
到达末尾后再回到低地址。
特点:
内存各区域使用较均匀。
高地址的大空闲区也会被不断使用。
识别信号:
“从上次查找结束位置继续”
→ Next Fit
四、最佳适应算法 Best Fit
规则:
在所有能够满足申请的空闲分区中,
选择最小的那个。
例如:
空闲区:100KB 500KB 200KB 300KB 600KB
申请:212KB
Best Fit选择:
300KB
剩余:
88KB
特点:
容易留下大量很小、难以再次利用的外部碎片。
识别信号:
“最小但足够大”
→ Best Fit
五、最差适应算法 Worst Fit
规则:
每次选择当前最大的空闲分区。
同样申请212KB时:
选择600KB
剩余388KB
特点:
剩余空间通常仍较大,
但系统中的大空闲区会不断被消耗。
识别信号:
“选择最大的空闲区”
→ Worst Fit
六、四种算法秒记
FF:
从头找第一个。
低地址碎,高地址容易留大块。
NF:
从上次位置接着找。
使用比较均匀。
BF:
找最小够用的。
容易留下很多小碎片。
WF:
找最大的。
不断消耗大空闲块。
七、典型选择题
题目:
下面最有可能使高地址空间成为大的空闲区的分配算法是:
A. 首次适应算法
B. 最佳适应算法
C. 最差适应算法
D. 循环首次适应算法
答案:
A. 首次适应算法
原因:
首次适应算法总是优先从低地址区域分配,
因此低地址被频繁使用,
高地址较少被访问,更容易保留大的连续空闲区。
八、外部碎片
动态分区属于:
连续内存分配
主要产生:
外部碎片
含义:
空闲内存总量可能足够,
但被分散成多个不连续的小块,
无法满足较大的连续内存申请。
不要和分页中的:
内部碎片
混淆。
九、考前速记
First Fit:第一个能放下的。
Next Fit:从上次位置继续找。
Best Fit:最小但能放下的。
Worst Fit:最大的空闲区。
高地址留大块:First Fit。
小碎片最多:Best Fit。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)