Skip to content

2019年 408 操作系统 第 32 题

操作系统2019年选择题2分

题目

在下列动态分区分配算法中,最容易产生内存碎片的是( )。

错因

A

首次适应从地址低端开始扫,遇到第一个够大的就分——它的副作用是低地址区被切得很碎,但比起最佳适应,整体碎片化程度反而温和得多:每次只切一刀(够大就用),不刻意挑最贴合的,留下来的碎片大小分布更均匀。把它当成"最碎"的,多半是被"低地址越来越碎"的现象误导。

B

最坏适应每次都从最大空闲区里切——切完剩下的还相对大块,最不容易剩下细碎块。直觉上"挑最大的切显得浪费"会被误判成"碎片多",但实际效果相反:剩余分区平均较大、可用性高,外部碎片最不严重

D

循环首次适应是首次适应的变种,每次从上次结束位置开始扫——目的就是让低地址不要总被切,使整体分区分布更均匀。它的碎片化情况和首次适应类似(不会比它更碎),都比不上最佳适应那么夸张地小。

总解析

四种动态分区算法,按"产生外部碎片"程度排序:

算法选哪个空闲区切下来后剩余分区的特征外部碎片
首次适应 First Fit从低地址扫,第一个够大的低地址被切碎,整体一般
循环首次适应 Next Fit从上次位置扫,第一个够大的比 First Fit 均匀一点
最佳适应 Best Fit最贴合的(剩余最少)每次切完剩极小的"边角块",几乎不可用最严重
最坏适应 Worst Fit最大的空闲区切完剩下还相对大,可用性高最轻

直觉解释:"最佳"听起来好,实际很差——每次都把空闲区精准削成一个细缝,这些细缝小到没法再装下后续任何请求,只能闲置在内存里。久而久之,内存里全是这种"刚好不够下一次用"的小碎块,外部碎片爆炸。

最佳适应的命名是从"本次分配看最省"角度起的,但全局看反而是碎片最多的方案。

最终答案是 C

编者注(解题技巧):四种适应算法里名字反直觉的两个直接背:最佳适应碎片最多最坏适应碎片最少。"最佳/最坏"看的是单次分配视角,问"全局碎片"时答案正好是反的。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数