5.1 基本概念
5.1.1 CPU-I/O突发循环 Burst Cycle
I/O Bound: I/O密集型
CPU Bound: CPU密集型
5.1.2 CPU 调度器 Scheduler
长、中、短期调度
CPU调度(短期调度):保存处理机的现场(程序计数器、多个寄存器内容送入PCB)、按照某种算法选取进程、把处理器分配给进程
非抢占方式 Non-preemptive
5.1.3 抢占方式 Preemptive
允许调度起中止运行中的进程然后根据优先权重新分配处理器资源给进程
5.1.4 分发器 Dispatcher
切换上下文、切换到用户模式、到合适的位置重启程序
5.3 调度算法
(5.2)评价标准:CPU利用率、吞吐量(单位时间内完成的进程数)、周转时间(从进程提交到完成的时间,包括就绪、执行和等待)、等待时间(就绪队列中耗费时间的总和)、响应时间(进程提交请求到产生首次响应的时间)
5.3.1 First-Come, First-Served Scheduling 先来先服务
算法容易实现;
效率不高、只考虑作业等待时间、没考虑作业服务要求的时间
5.3.2 Shortest-Job-First Scheduling 短作业优先
短作业优先可分为抢占模式与非抢占模式
- 非抢占模式:等待时间的计算注意考虑对应到达时间
- 抢占模式(SRTF):新进程到达后根据所有已到达进程的剩余突发时间抢占,等待时间要算入进程被打断后等待的时间
优点:等待时间最优;
缺点:忽视了作业等待时间、会出现饥饿现象
如何预测未知进程行为:1.询问客户 2.预测下一个burst time
5.3.3 Priority Scheduling 优先权
也可分为抢占与非抢占模式。默认认为数值越小优先权越高。
SJF是一种以下一个进程时间为优先权参考的PS
静态优先级:内存外存
动态优先级:根据进程占用CPU时间、根据进程就绪等待时间
响应比=(等待时间+服务时间)/服务时间
5.3.4 Round-Robin Scheduling 轮转
每个进程每轮只分配到固定的一个时间片,若一轮没执行完,则排到就绪队列末尾等待下一轮
时间片的选取很大程度影响了调度性能:
- 当时间片过大:RR调度就和FCFS表现一致
- 当时间片过小:上下文频繁切换、负载严重,吞吐量过大
时间片一般选取10~100毫秒
5.3.5 Multi-level Queue Scheduling 多级队列
每个队列有自己的调度算法,各个队列之间根据优先权调度
队列间调度:
固定的优先权:
时间片:每个队列能获得一定长度的CPU时间,这段时间用该队列的调度算法分配给它的进程。
5.3.6 Multi-level Feedback-Queue Scheduling 多级反馈队列
在多级队列上改进,进程可在多个队列中移动。
优点:高优先级作业得到响应,短作业迅速完成
5.4 多处理器调度
5.4.1
Symmetric Multiprocessing (SMP)
Asymmetric Multiprocessing
5.4.3 负载平衡
总体上两种方法:
pull:空闲CPU从其他忙的CPU队列中拉一个进程到当前CPU队列
push:忙的CPU队列将一个进程推送到空闲的CPU队列中
实时调度
硬实时系统
5.5 线程调度
Local Scheduling
Global Scheduling
5.5.1 调度范围
PCS
SCS
5.5.2 Pthread调度