处理器调度(CPU调度)
CPU调度:
按一定调度算法从就绪队列中选择一个进程,然后把CPU的使用权交给被选中的进程
CPU调度要解决的三个问题:
WHAT:按什么原则选择下一个要执行的进程 —— 调度算法
WHEN:何时进行选择 —— 调度时机
HOW:如何让被选中的进程上CPU执行 —— 调度过程(进程的上下文切换)
CPU调度的时机:
事件发生 -> 当前运行的进程暂停运行 -> 硬件机制响应后 -> 进入操作系统,处理相应的事件 ->结束处理后:某些进程的状态发生了变化,也可能又创建了一些新的进程 ->就绪队列改变了 ->需要进程根据预设的调度算法从就绪队列选一个进程
四个时机:
1. 进程正常终止或由于某种错误而终止
2. 新进程创建或一个等待进程变成就绪、
3. 当一个进程从运行态进入阻塞态
4. 当一个进程从运行态变为就绪态
进程调度程序从就绪队列选择了要运行的进程:
这个进程可以是刚刚被暂停执行的进程,也可能是另一个新的进程
如果是一个新的进程要进行进程切换
进程切换:是指一个进程让出处理器,由另一个进程占用处理器的过程。
进程切换主要包括两部分工作:
切换全局页目录以加载一个新的地址空间
切换内核栈和硬件上下文,其中硬件上下文包括了内核执行新进程需要的全部信息,如CPU相关寄存器
小例子:
进程 A下CPU,进程B上CPU
保存进程A的上下文环境(程序计数器,程序状态字,其他寄存器)
用新状态和其他相关信息更新进程A的PCB
把进程A移至合适的队列(就绪,阻塞..)
将进程B的状态设置为运行态
从进程B的PCB中恢复上下文(程序计数器,程序状态字,其他寄存器…)
上下文切换是有开销的:
直接开销:内核完成切换所用CPU时间
保存和恢复寄存器…
切换地址空间(相关指令比较昂贵)
间接开销:
高速缓存,缓冲区缓存,TLB失效
调度算法的衡量指标:
吞吐量:每单位时间完成的进程数目
周转时间:每个进程从提出请求到运行完成的时间
响应时间:从提出请求到第一次回应的时间
CPU利用率:CPU做有效工作的时间比例
等待时间:每个进程在就绪队列中等待的时间