某个计算机采用动态分区来分配内存,经过一段时间的运行,现在内存中依地址从小到大存在 100KB、450KB、250KB、200KB 和 600KB 的空闲分区。分配指针现指向地址起始点,继续运行还会有 212KB、417KB、112KB 和 426KB 的进程申请使用内存,那么,能够完全完成分配任务的算法是( )。
A. 首次适应算法 B. 邻近适应算法 C. 最佳适应算法 D. 最坏适应算法
[tag_link]
正确答案:C
首先,分析四种动态分区分配算法对给定内存请求序列的处理情况。 初始空闲分区按地址顺序为:100KB、450KB、250KB、200KB、600KB。 进程申请序列为:212KB、417KB、112KB、426KB。 总申请内存为 1167KB,小于总空闲内存 1600KB,但分配成功与否取决于算法策略和分区匹配。
对于首次适应算法,从起始地址搜索:212KB 分配至 450KB 分区(剩余 238KB),417KB 分配至 600KB 分区(剩余 183KB),112KB 分配至 238KB 分区(剩余 126KB),但 426KB 无法找到足够大分区(最大剩余为 250KB),因此分配失败。
对于邻近适应算法,从当前指针搜索(初始在起始点):212KB 分配至 450KB 分区(指针移至其后),417KB 分配至 600KB 分区(指针移至末尾后循环回起始),112KB 分配至 238KB 分区(剩余 126KB),但 426KB 搜索时从剩余分区中找不到足够大空间(最大为 250KB),因此分配失败。
对于最佳适应算法,每次选择最小足够大的分区:212KB 分配至 250KB 分区(剩余 38KB),417KB 分配至 450KB 分区(剩余 33KB),112KB 分配至 200KB 分区(剩余 88KB),426KB 分配至 600KB 分区(剩余 174KB),所有请求均成功分配。
对于最坏适应算法,每次选择最大分区:212KB 分配至 600KB 分区(剩余 388KB),417KB 分配至 450KB 分区(剩余 33KB),112KB 分配至 388KB 分区(剩余 276KB),但 426KB 请求时最大剩余分区为 276KB,不足分配,因此失败。
综上,只有最佳适应算法能够完全完成所有分配任务。