CPU调度
定义:控制、协调进程对CPU的竞争,即按一定的调度算法从就绪队列中选择一个进程,把CPU使用权转交。若没有就绪进程,则安排一个空闲系统进程或者idle进程
系统场景:
N个就绪进程,等待CPU
多个CPU
决策(给哪个进程分配哪个CPU)
解决问题:
调度算法、调度时机、如何调度(切换)
进程切换工作内容:(对原来运行进程各种状态的保持和对新进程状态的恢复)
切换全局页目录以加载新的地址空间-->切换内核栈和硬件上下文
上下文切开销:
直接开销(内核完成切换所用的CPU时间,包括保持和恢复寄存器、切换地址空间)
间接开销(高速缓存、缓冲区缓存、TLB)
CPU调度算法
衡量指标:吞吐量、周转时间、响应时间、CPU利用率(越多越好)、等待时间
进程优先级枪占式与非抢占式IO密集型与CPU密集型时间片
时间片影响因素:进程切换开销、对响应时间的要求、就绪进程个数、CPU能力、进程的行为
批处理系统中调度算法(指标:吞吐量、周转时间、CPU利用率):
先来先服务、最短作业优先、最短剩余时间优先、最高响应比优先
交互式系统调度算法(指标:响应时间):
时间片轮转、最高优先级调度、多级反馈队列、最短进程优先
多级反馈调度算法:
综合调度算法
各种调度算法比较总结:
多处理器调度算法设计:
选择哪个进程执行、在哪个CPU执行、进程在多CPU之间迁移时开销(使进程尽可能在同一CPU上执行)、负载均衡
典型系统采用的调度算法
UNIX 动态优先算法
5.3BSD 多级反馈队列法
linux 抢占式调度
windows 基于优先级的抢占式多任务
solaris 综合调度算法
windows 线程调度:
调度单位是线程,采用动态优先级的抢占式调度,结合时间配额的调整
就绪线程按优先级进入相应队列
系统总是选择优先级最高额就绪线程运行
同一优先级的各线程按时间片轮转进行调度
多CPU系统中允许多个线程并行允许
线程调度的条件:
线程优先级改变、一个线程改变了它的亲和处理机集合(允许此进程允许的CPU)
windows使用32个优先级,分为三类:
实时优先级(16-32,不可变)、可变优先级(1-15,可变,基本优先级和当前优先级)系统线程(0,零页线程,用于对系统中空闲物理页面清零)
主动切换、抢占、时间片用完
线程优先级提升与时间配额调整(调大)
5种情况提升线程的当前优先级:
I/O操作完成
信号量或事件等待结束
前台进程汇总线程完成一个等待操作
由于窗口活动而唤醒窗口线程
线程处于就绪态超过了一定时间还没运行(饥饿)
windows中线程优先级提升只针对可变优先级: