课程作业-第八章:
8.1只用两个作业和两个队列运行几个随机生成的问题。针对每个作业计算 MLFQ 的执行记录。为了简化计算,限制每项作业的长度并关闭 I/O。
答:
终端输入./mlfq.py -n 2 -j 2 -m 100 -M 0 -s 9 -c
指令中,-n为队列个数,-j为工作个数,-m为每项作业长度上限,-M为I/O频率,因为关闭I/O,其频率为0
这里,队列个数为2,工作个数为2,每项作业上限为100,I/O频率为0,随机种子为9,显示查看每个单位时间的运行情况。如下图所示:
假设Job0为事件A,Job1为事件B,分析如下表所示:
时刻 | 队列0 | 队列1 | CPU |
0-10 | AB | A | |
10-20 | A | B | B |
20-30 | AB | A | |
31-35 | BA | B | |
35-60 | A | A |
在34时间时,B(Job1)完成工作;在60时间时,A(Job0)完成工作。
每个Job的周转时间和响应时间如下图所示:
从图中可以看出,平均响应时间为5.00,平均周转时间为47.00。其他情况分析方法同上。
8.3将如何配置调度程序参数,使得调度程序像轮转调度程序那样工作?
答:
将队列数设置为1,即可使得调度程序像轮转调度程序那样工作。具体过程如下图所示:
这里,给出一个队列,三个Job,时间片长度为4,可以看到,三个工作以4为单位循环使用CPU。
8.5给定一个系统,其最高队列中的时间片长度为 10ms,你需要如何频繁地将工作推回到最高优先级级别(带有-B 标志),以保证一个长时间运行(并可能饥饿)的作业得到至少5%的CPU?
答:
10ms/5%=200ms,所以boost的周期设置为200ms,才能使该工作至少得到5%的CPU。或者,设置成200的整数倍数ms也可以,但不如直接设置为200ms优。并且,任务数量需要少于20个。