进程调度:介绍
目录
1. 工作负载假设
完全可操作的调度准则(a fully-operational scheduling discipline):
对操作系统中运行的进程(有时也叫工作任务)做出如下的假设:
- 每一个进程运行相同的时间。
- 所有的进程同时到达。
- 一旦开始,每个进程保持运行直到完成。
- 所有的进程只是用 CPU(即它们不执行 IO 操作)。
- 每个工作的运行时间是已知的。
2. 调度指标
周转时间(turnaround time): 任务的周转时间定义为任务完成时间减去任务到达系统的时间。
T周转时间 = T完成时间 − T到达时间
3. 先进先出(FIFO)
先进先出(First In First Out 或 FIFO)调度:
- 优点:很简单,易于实现。
- 缺点:平均周转时间长。
护航效应(convoy effect):一些耗时较少的潜在资源消费 者被排在重量级的资源消费者之后。
4. 最短任务优先(SJF)
最短任务优先(Shortest Job First,SJF): 先运行最短的任务,然后是次短的任务,如此下去。 如果所有工作同时到达,可以证明 SJF 确实是一个最优(optimal)调度算法。
5. 最短完成时间优先(STCF)
最短完成时间优先(Shortest Time-to-Completion First,STCF) 或
抢占式最短作业优先(Preemptive Shortest Job First ,PSJF) 调度程序: 每当新工作进入系统时,它就会确定剩余工作和新工作中,谁的剩余时间最少,然后调度该工作。 STCF 可证明是最优的。
6. 新度量指标:响应时间
响应时间(response time): 响应时间定义为从任务到达系统到首次运行的时间。
T响应时间 = T首次运行 − T到达时间
STCF 和相关方法虽然有很好的周转时间,但对于响应时间和交互性是相当糟糕的。
7. 轮转
轮转(Round-Robin,RR) 调度:
RR 在一个时间片(time slice,有时称为调度量子,scheduling quantum)内运行一个工作,然后切换到运行队列中的下一个任务,而不是运行一个任务直到结束。它反复执行,直到所有任务完成。
时间片越短,RR 在响应时间上表现越好。但时间片太短,突然上下文切换的成本将影响整体性能。
PR的周转时间指标最差。更一般地说,任何公平(fair)的政策(如 RR),即在小规模的时间内将 CPU 均匀分配到活动进程之间,在周转时间这类指标上表现不佳。
两种调度程序,第一种类型(SJF、STCF)优化周转时间,但对响应时间不利。第二种类型(RR)优化响应时间,但对周转时间不利。
8. 结合I/O
调度程序结合 I/O:
将每个 CPU 突发作为一项工作,调度程序确保“交互”的进程经常运行。当这些交互式作业正在执行 I/O 时,其他 CPU 密集型作业将运行,从而更好地利用处理器。
9. 无法预知
调度程序不知道每个工作的长度。