学习目标:
CPU调度的相关概念
设计调度算法时要考虑的几个要点
批处理系统的调度算法
交互式系统的调度算法
Windows操作系统的线程调度算法
其他
1.处理器调度的相关概念
CPU调度
——其任务式控制、协调进程对CPU的竞争
即按一定的调度算法从就绪队列中选择一个进程,把CPU的使用权交给被选中的进程
如果没有就绪进程,系统就会安排一个系统空闲进程或者idle进程
系统场景
N个进程就绪、等待上CPU运行
M个CPU,M=>1,不止一个CPU
需要决策:给哪一个进程分配哪一个CPU
CPU调度需要解决的三个问题
WHAT:按什么原则选择下一个要执行的进程——调度算法
WHEN:何时进行选择——调度时机
HOW:如何让被选中的进程上CPU——调度过程(进程上下文切换)
CPU调度的时机
就绪队列的改变引发了重新调度
什么时候重新调度?——内核对中断/异常(陷入)/系统调用处理之后返回到用户态时
进程调度的时机:
1.进程正常终止 或 由于某种错误而终止
2.新进程创建 或 一个进程由等待变成就绪
3.当一个进程从运行态进入 阻塞态
4.当一个进程从运行态变为就绪态
调度过程——进程切换
进程切换:是指一个进程让出处理器,由另一个进程占用处理器的过程
进程调度程序从就绪队列选择了要运行的进程:这个进程可以是刚刚被暂停执行的进程,也可能是另一个新的进程
进程切换主要包括两部分工作:
切换全局页目录以加载一个新的地址空间,因为新进程上CPU它要用自己的地址空间
切换内核栈和硬件上下文,其中硬件上下文包括了内核执行新进程需要的全部信息,如CPU相关寄存器
切换过程包括了对原来运行进程各种状态的保存和对新的进程各种状态的恢复
上下文切换具体步骤
场景:进程A下CPU,进程B上CPU
保存进程A的上下文环境(程序计数器‘、程序状态字、其他寄存器……)
用新状态和其他相关信息更新进程A的PCB
把进程A移至合适的队列(就绪、阻塞……)
将进程B的状态设置为运行态
从程序B的PCB中恢复上下文二(程序计数器‘、程序状态字、其他寄存器……)
上下文切换开销(COST)
什么是上下文切换的开销?
直接开销:内核完成切换所用的CPU时间
这些时间用于保存和恢复寄存器……
用于切换地址空间(相关指令比较昂贵)
间接开销:
高速缓存(Cache)、缓冲区缓存(Buffer Cache)和TLB(Translation Lookup Buffer)失效
CPU调度算法的设计
从用户的角度和系统的角度对调度算法的要求: