在可变分区存储管理下,若内存中按照地址递增次序存在3个不邻接的空闲区F1、F2、F3,其大小分别是50KB、120KB和25KB。请给出后备作业序列,使得实施分配时满足:(1)采用最优适配算法效果好,但采用最先适配与最坏适配算法效果不好。(2)采用最坏适应算法效果好,但采用最先适配与最优适配算法效果不好。(3)采用最优适配算法效果不好,但采用最先适配与最坏适配算法效果好。
答1:
对于问题1,采用最优适配算法效果好,可以按照作业大小从小到大的顺序排列后备作业,具体作业序列如下:
作业1:20KB 作业2:30KB 作业3:40KB 作业4:60KB 作业5:80KB
这样,在分配作业时,最先使用最优适配算法,始终选择最小可用空闲区,可以充分利用内存,避免出现大块空闲区不能被使用的情况。
对于问题2,采用最坏适应算法效果好,可以按照作业大小从大到小的顺序排列后备作业,具体作业序列如下:
作业1:80KB 作业2:60KB 作业3:40KB 作业4:30KB 作业5:20KB
这样,在分配作业时,最先使用最坏适配算法,始终选择最大可用空闲区,可以避免出现大块空闲区被小作业占用而造成的内存浪费。
对于问题3,采用最先适配算法和最坏适配算法效果好,可以按照作业大小从小到大的顺序排列后备作业,具体作业序列如下:
作业1:20KB 作业2:30KB 作业3:40KB 作业4:80KB 作业5:60KB
这样,在分配作业时,先使用最先适配算法,选择最先找到的可用空闲区分配作业,可以避免出现大块空闲区一直无法被利用的情况。当没有足够大的空闲区时,再使用最坏适配算法,选择最大可用空闲区分配作业,可以避免出现大块空闲区被小作业占用而造成的内存浪费。
答2:
(1) 采用最优适配算法效果好的序列:
作业 1: 80KB 作业 2: 30KB 作业 3: 60KB
(2) 采用最坏适应算法效果好的序列:
作业 1: 70KB 作业 2: 50KB 作业 3: 110KB
(3) 采用最先适配算法效果好的序列:
作业 1: 30KB 作业 2: 70KB 作业 3: 20KB
答3:
(1) 最优适配算法效果好,最先适配与最坏适配算法效果不好。
后备作业序列:J1需要30KB、J2需要55KB、J3需要40KB、J4需要90KB
最优适配算法:将J1放入F1,剩下20KB;将J2放入F3,剩下25KB;将J3放入F1,剩下10KB;将J4放入F2,剩下30KB
最先适配算法:将J1放入F1,剩下20KB;将J2放入F1,剩下65KB;将J3放入F2,剩下95KB;无法将J4放入任何空闲区
最坏适配算法:将J1放入F2,剩下20KB;将J2放入F2,剩下-55KB(无法分配);
(2) 最坏适应算法效果好,最先适配与最优适配算法效果不好。
后备作业序列:J1需要80KB、J2需要25KB、J3需要30KB、J4需要60KB
最坏适配算法:将J1放入F2,剩下40KB;将J4放入F1,剩下10KB;将J3放入F3,剩下5KB;将J2放入F3,剩下-20KB(无法分配)
最优适配算法:将J1放入F2,剩下50KB;将J2放入F3,剩下95KB;将J3放入F1,剩下20KB;将J4放入F2,剩下-30KB(无法分配)
最先适配算法:将J1放入F2,剩下50KB;将J2放入F3,剩下95KB;将J3放入F1,剩下20KB;将J4放入F2,剩下-30KB(无法分配)
(3) 最优适配算法效果不好,最先适配与最坏适配算法效果好。
后备作业序列:J1需要40KB、J2需要95KB、J3需要60KB、J4需要30KB
最先适配算法:将J1放入F1,剩下10KB;将J2放入F2,剩下25KB;将J3放入F2,剩下-35KB(无法分配)
最坏适配算法:将J1放入F3,剩下25KB;将J2放入F2,剩下0KB;将J3放入F2,剩下-60KB(无法分配)
最优适配算法:将J1放入F1,剩下10KB;将J2放入F2,剩下25KB;将J3放入F2,剩下-35KB(无法分配);将J4放入F1,剩下20KB;
综上,选择不同的存储分配算法,会影响到可变分区存储管理的效率。在实际应用中,需要根据具体情况选择最合适的算法。