习题
5.1为什么对调度程序而言,区分CPU约束程序和I/O约束程序很重要?
答:
CPU的成功调度依赖于进程的如下属性:进程执行由CPU执行和I/O等待周期组成,进程在这两个状态之间切换。进程执行从CPU区间开始,在这之后是I/O区间,接着是另一个CPU区间,如此进行下去;最终,最后的CPU区间通过系统请求终止执行。这些CPU区间的长度呈现出指数或超指数形式的频率曲线,具有大量短CPU区间和少量长CPU区间。I/O约束程序通常具有很多短CPU区间。CPU约束程序可能有少量的长CPU区间。所以区分出CPU约束程序和I/O约束程序能够使调度程序更好的执行和选择合适的CPU调度算法。
5.3考虑用于预测下一个CPU区间的长度的指数平均公式。将下面的值赋给算法中的参数的含义是什么?
a.a=0且t=100ms
b.a=0.99且t=10ms
答:
虽然不知道下一个CPU区间的长度,但是可以预测它。认为下一个CPU区间的长度与以前的相似。下一个CPU区间的通常可预测为以前CPU区间的测量长度的指数平均。设t n为第n个CPU区间的长度,设τn+1为下一个CPU区间的预测值。
因此,对于α,0<=α <=1,
定义τ n+1=αt n+(1-α) τ n
公式定义了一个指数平均。t n包括最近信息,τn存储了过去历史。参数α控制了最近和过去历史在预测中的相对加权。如果α=0,那么τ n+1=τ n,近来历史没有影响(当前情形为暂时的);如果α=1,那么τ n+1=t n,只有最近的CPU区间才重要(历史的被认为是无关的)。
所以:
a. α=0且τ=100ms,则τ n+1=τ n=100ms,说明下一个CPU的区间长度和t n(最近信息)并没有关系,而是和τn存储的过去历史有关,并由它决定。
b. α=0.99且τ=10ms,则τ n+1=0.99*tn+0.01*τn,说明t n给了很高的权重,下一个CPU的区间长度是和t n(最近信息)高度相关的,而和τn存储的过去历史关系不大。
a和b两个问题分别反映了两种极端情况,分别是下一个CPU区间长度取决于最近历史还是过去历史。但是更为常见的是,α=0.5,这样最近历史和过去历史同样重要。初始值τ0可作为常量或作为系统的总体平均值。
5.4考虑下列进程集,进程占用的CPU区间长度以毫秒来计算:
假设在时刻0以进程P1,P2,P3,P4,P5的顺序到达。
a.画出4个Gantt图分别演示用FCFS、SJF、非抢占优先级(数字小代表优先级高)和RR(时间片=1)算法调度时进程的执行过程。
b.在a里每个进程在每种调度算法下的周转时间是多少?
c.在a里每个进程在每种调度算法下的等待时间是多少?
d.在a里哪一种调度算法的平均等待时间对所有进程而言最小?
答:
a.
b. 周转时间:
|
FCFS |
SJF |
非抢占优先级 |
RR |
P1 |
10 |
19 |
18 |
19 |
P2 |
11 |
1 |
1 |
2 |
P3 |
13 |
4 |
8 |
7 |
P4 |
14 |
2 |
19 |
4 |
P5 |
19 |
9 |
6 |
14 |
c. 等待时间:
|
FCFS |
SJF |
非抢占优先级 |
RR |
P1 |
0 |
9 |
8 |
9 |
P2 |
10 |
0 |
0 |
1 |
P3 |
11 |
2 |
6 |
5 |
P4 |
13 |
1 |
18 |
3 |
P5 |
14 |
4 |
1 |
9 |
d. 平均等待时间
|
FCFS |
SJF |
非抢占优先级 |
RR |
T |
19.6 |
3.2 |
6.6 |
5.4 |
由表格可知,SJF算法的平均的等待时间最小。
5.5下面哪种调度算法能导致饥饿?
a.先到先服务
b.最短作业优先
c.轮换法
d.优先级
答:
饥饿现象是指某一种作业长时间等待而得不到运行的现象。
a. 先到先服务(FCFS):
FCFS调度算法是一种最简单的调度算法,该调度算法既可以用于作业调度也可以用于进程调度。在作业调度中,算法每次从后备作业队列中选择最先进入该队列的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。
在进程调度中,FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机。
FCFS调度算法属于不可剥夺算法。从表面上看,它对所有作业都是公平的,但若一个长作业先