🏷️ 知识点:动态内存管理
某计算机按字节编址,其动态分区内存管理采用最佳适应算法,每次分配和回收内存后都对空闲分区链重新排序。当前空闲分区信息如下表所示。
| 分区起始地址 | 20K | 500K | 1000K | 200K |
|---|---|---|---|---|
| 分区大小 | 40KB | 80KB | 100KB | 200KB |
回收起始地址为 60K、大小为 140KB 的分区后,系统中空闲分区的数量、空闲分区链第一个分区的起始地址和大小分别是( )。
A. 3、20K、380KB B. 3、500K、80KB C. 4、20K、180KB D. 4、500K、80KB
[tag_link]
正确答案:B
参考 动态内存内存回收过程 ,回收起始地址为 60K、大小为 140KB 的分区时,它与表中第一个分区和第四个分区合并,成为起始地址为 20K、大小为 380KB 的分区,剩余 3 个空闲分区。在回收内存后,算法会对空闲分区链按分区大小由小到大进行排序,表中的第二个分区排第一。所以选择 B。
回收分区时,仅合并大小相等的空闲分区的算法是()。
A. 伙伴算法 B. 最佳适应算法 C. 最坏适应算法 D. 首次适应算法
[tag_link]
正确答案:A
A. 伙伴算法 是一种特殊的内存分配算法,他在分配和回收内存时,只合并大小相等的空闲分区。这种算法的优点是简单且执行速度快,但可能会导致内存碎片: B. 最佳适应算法:它在分配内存时,会选择大小最接近所需的空闲分区。这种算法的优点是可以减少内存的浪费,但可能会导致大量的小碎片。 C. 最坏适应算法:它在分配内存时,会选择最大的空闲分区。这种算法的优点是可以减沙内存的碎片,但可能会导致大量的大碎片。 D.首次适应算法:它在分配内存时,会选择第一个满足所需的空闲分区。这种算法的优点是简单且执行速度快,但可能会导致内存的碎片。动态分区分配算法具体参考该节。
某个计算机采用动态分区来分配内存,经过一段时间的运行,现在内存中依地址从小到大存在 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,不足分配,因此失败。
综上,只有最佳适应算法能够完全完成所有分配任务。