1. 理想假设
- 每一个工作运行相同时间
- 所有工作同时到达
- 一旦开始,每个工作保持运行直到完成
- 所有的工作只是使用CPU(即执行IO)
- 每个工作的运行时间是已知的
2. 调度指标
T~周转时间~ = T~完成时间~ - T~到达时间~
周转时间对应性能指标,另外进程调度还需要考虑公平指标
3. 先进先出FIFO
有时也称为先到先服务(First Come First Served, FCFS),实现简单,但是平均周转时间比较长
4. 最短任务优先(SFJ)
Shortest Job First
如果假设所有任务是同时到达的,SFJ确实是一个最优解
但是如果任务是随机到达的,那么SFJ仍然会有护航问题,也就是耗时较短的任务被安排在耗时较长的任务后面,而使得平均周转时间比较长。
5. 最短完成时间优先(STCF)
Shortest Time-to-Completion First
实现方式:放宽假设条件:工作必须保持运行到完成,向SFJ添加抢占,每当新工作进入系统后,就会先确定剩余工作时间和新工作占用时间,然后选择一个占用时间最短的优先执行
6. 新度量指标:响应时间
T响应时间 = T首次运行 - T到达时间
如何构建对响应时间敏感的调度程序?
周转时间和响应时间两个指标是相互制衡的
7. 轮转
Round-Robin, RR,RR在一个时间片内运行一个工作,然后切换到运行队列中的下一个任务,而不是运行一个任务直到结束。
时间片的长度对RR至关重要:时间片越短,RR在响应时间上表现越好,时间片越长,突然的上下文切换成本将影响整体性能。
8. 结合IO
发起IO请求,阻塞等待时不会占用CPU,可以让CPU执行其他工作,从而提升性能
9. 无法预知完成时间
实际上调度程序无法知道每个工作的完成时间,那么如何建立这种没有完成时间的先验的SFJ和STCF呢?