文章目录
第七章 进程调度
7.1 工作负载假设
在对进程调度策略进行探讨之前,我们先进行一些简化假设,这些假设与系统中运行的进程有关,被称之为工作负载。
- 每一个工作运行相同的时间
- 所有的工作同时到达
- 一旦开始,每个工作保持运行直到完成
- 所有工作只是用CPU
- 每个工作的运行时间是已知的
7.2 调度指标
为了衡量不同调度策略的优劣,我们需要定义一个指标,它将在接下来的讨论中发挥重要的作用。现在,我们把周转时间作为我们的指标,它的定义如下:
7.3 先进先出(FIFO)
理想状态下
我们先在工作负载的假设下,举一个简单的例子。
假设有三个任务A、B、C,他们在同时到达系统,到达时间设为0(T到达时间=0)
因为FIFO需要有工作的先来后到,我们假设到达顺序是A->B->C。
再假设A、B、C都运行相同的时间10s。
由以上假设我们得出,A在10s时完成,B在20s时完成,C在30s时完成,周转时间分别为10s,20s,30s。
则这三个任务的平均周转时间为
非理想状态下
现在,我们放宽一下假设1
- 每一个工作运行相同的时间
假设有三个任务A、B、C,到达时间和顺序不变。
A的运行时间为100s,B和C的运行时间为10s。
此时,只有A运行100s完成任务之后,才能运行B和C。
所以A的完成时间变为100s,B的完成时间变为100s+10s=110s,C的完成时间变为110s+10s=120s。
这时,这三个任务的平均周转时间为
分析
这样看起来,在理想状态下,FIFO策略还算合理,平均周转时间还在我们可以接受的范围内。
但是在非理想状态下,这样的平均周转时间相较于A的周转时间而言,是可以接受的,但相对于B和C的周转时间而言,却是难以忍受的。
这种问题被称为护航效应(convoy effert),一些耗时较少的潜在资源消费者被安排在重量级的资源消费者之后。
在现实生活中我们也会遇到这样的情况,比如在超市购物排队结账时,你