对应异步社区资源HW-MLFQ:
根据需要设置两个队列和两个任务,此处可用软件方式进行模拟,结果如下:
从图中可见新来的短工作明显先执行
加上-S表明只要有IO发生便维持当前任务在当前优先级:
结果可见最终任务2仍然在优先级2下:
可以看到当job1和job2出现后,job0得不到运行而只能在等待了:
加入-B设置boost时间为50
可以看到通过boost的方法,job0在job1和job2出现后的一段时间内依然能得到运行。
可见每9ms执行一次I/O,刚好卡在10ms内,这样导致结果如下:
即直到最后此任务依然处在优先级2。
只要把-S标签去掉就能模拟此场景了:
可见此时统计的是总的运行时间了,触发I/O依旧不影响。
通过加入-Q修改不同队列的长度即可进行模拟:
将 -n 队列数设置为1即可
此处参考2.5.1节:
可见job0可“愚弄”调度系统,始终保持在高优先级队列中。
5%也就是20分之一,要想确保,需要设置-B 200,也即每200ms确保此任务能运行10分钟
-I表示单次I/O所需时间
通过上图的模拟,我们可以看到,I/O结束后当前任务是放置在同等级队列的后面,也就是job0还需要等待job1运行才能继续执行。
从上图可见,修改为大写的-I之后,完成I/O后的任务会被放置在队列的最前端,从而直接执行。