《Operating Systems:Three Easy Pieces》第八章课后习题解答

8.1

1.只用两个工作和两个队列运行几个随机生成的问题。针对每个工作计算 MLFQ 的执行记录。限制每项作业的长度并关闭 I/O,让你的生活更轻松。
在这里插入图片描述
答:python3 mlfq.py -n 2 -j 2 -m 15 -M 0 -s 50参数设置-n 2代表2个队列,-j 2 代表2个作业,-m 15 表示随机生成的作业最大运行时间为15,-M 0 表示随机生成的作业最大I/O频率为0,即关闭I/O,-s 20 设置随机种子为50。最后随机生成的情况为每队列时间片为10,Job 0: startTime 0 - runTime 7 - ioFreq 0,Job 1: startTime 0 –runtime 9 -ioFreq 0。
计算MLFQ执行记录如下:
Time Job Queue The situation of CPU
0 0 1 作业0、1到达,运行作业0的1时间单位
1 0 1 运行作业0的1时间单位
2 0 1 运行作业0的1时间单位
3 0 1 运行作业0的1时间单位
4 0 1 运行作业0的1时间单位
5 0 1 运行作业0的1时间单位
6 0 1 运行作业0的1时间单位
7 1 1 作业0完成,运行作业1的1时间单位
8 1 1 运行作业1的1时间单位
9 1 1 运行作业1的1时间单位
10 1 1 运行作业1的1时间单位
11 1 1 运行作业1的1时间单位
12 1 1 运行作业1的1时间单位
13 1 1 运行作业1的1时间单位
14 1 1 运行作业1的1时间单位
15 1 1 运行作业1的1时间单位
16 - - 作业1完成

Job Response Turnaround Wait
0 0 7 0
1 7 16 7
average 3.50 11.50 3.50
在这里插入图片描述

PS:不知道是不是理解出现了偏差,无论如何-a修改MLFQ的时间配额allotments,作业确实是按时间片进行轮转,但是不会按照配额降低优先级???

8.3

3.将如何配置调度程序参数,像轮转调度程序那样工作?
答:RR调度是依据时间片进行轮转的,而且需要作业数>=2,不会发生优先级降低,所以只能有一个队列。于是:
python3 mlfq.py -n c1 -j c2 -q c3 (参数:c1=1,c2>=2,c3为时间片长度)

8.5

5.给定一个系统,其最高队列中的时间片长度为 10ms,你需要如何频繁地将工作推回到高优先级级别(带有-B 标志),以保证一个长时间运行(并可能饥饿)的工作得到至少5%的 CPU?
答:发生“饥饿”的原因是MLFQ的规则当一个作业在其时间片内主动放弃CPU,那么它的优先级不变。这样当有很多交互程序时,每个交互程序运行一段时间后(不足一个时间片)主动放弃CPU发起I/O,I/O持续时间内另一个作业刚好也运行不足一个时间片,随后当第一个作业完成I/O时第二个作业发出I/O,两个作业的优先级都不会降低且一直切换霸占CPU导致其他作业被“饿死”。所以需要每隔一段时间boost提升所有作业到最高优先级队列。此时长时间运行作业可以占用CPU一个时间片,随后降低优先级,继续“饥饿”直到下一次boost又占用CPU一个时间片。若最高队列时间片长度为10ms,切要保证一个长时间运行作业得到至少5%的CPU,那么在一个boost时间内它就要获得5%的CPU,这个时间也是一个时间片长度,所以
T(boost) = T(time slice) / 0.05 = 10 / 0.05 = 200 ms。综上,将作业推回到最高优先级的时间频率不能大于200 ms。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值