本文主要是介绍操作系统导论-课后作业-ch8,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
对应异步社区资源HW-MLFQ:
1.
根据需要设置两个队列和两个任务,此处可用软件方式进行模拟,结果如下:
2.
2.1 单个长工作(图8.2)
2.2 来了一个短工作(图8.3)
从图中可见新来的短工作明显先执行
2.3 如果有I/O呢(图8.4)
加上-S表明只要有IO发生便维持当前任务在当前优先级:
结果可见最终任务2仍然在优先级2下:
2.4 提升优先级
2.4.1 图8.5左
可以看到当job1和job2出现后,job0得不到运行而只能在等待了:
2.4.2 图8.5右
加入-B设置boost时间为50
可以看到通过boost的方法,job0在job1和job2出现后的一段时间内依然能得到运行。
2.5 更好的计时方式
2.5.1 图8.6左
可见每9ms执行一次I/O,刚好卡在10ms内,这样导致结果如下:
即直到最后此任务依然处在优先级2。
2.5.2 图8.6右
只要把-S标签去掉就能模拟此场景了:
可见此时统计的是总的运行时间了,触发I/O依旧不影响。
2.6 MLFQ调优
通过加入-Q修改不同队列的长度即可进行模拟:
3.
将 -n 队列数设置为1即可
4.
此处参考2.5.1节:
可见job0可“愚弄”调度系统,始终保持在高优先级队列中。
5.
5%也就是20分之一,要想确保,需要设置-B 200,也即每200ms确保此任务能运行10分钟
6.
-I表示单次I/O所需时间
通过上图的模拟,我们可以看到,I/O结束后当前任务是放置在同等级队列的后面,也就是job0还需要等待job1运行才能继续执行。
从上图可见,修改为大写的-I之后,完成I/O后的任务会被放置在队列的最前端,从而直接执行。
这篇关于操作系统导论-课后作业-ch8的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!