操作系统导论-课后作业-ch8

发布时间:2024年01月17日

对应异步社区资源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后的任务会被放置在队列的最前端,从而直接执行。

文章来源:https://blog.csdn.net/weixin_43917399/article/details/135646626
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。