CPU调度概念
调度的三个层次
- 高级调度(作业调度 Long-term schedule):外存→内存,面向作业
- 从后备队列选择合适的作业调入内存
- 无→创建态→就绪态
- 发生频率最低
- 中级调度(内存调度 Middle-term schedule):外存→内存,面向进程
- 从挂起队列选择合适进程将其数据调回内存
- 挂起态→就绪态、阻塞挂起→阻塞态
- 发生频率中等
- 低级调度(进程调度 Short-term schedule):内存→CPU
- 从就绪队列选择一个进程为其分配处理机
- 就绪态→运行态
- 发生频率最高

计算密集型(compute-bound)
I/O密集型(I/O-bound)
进程调度
进程调度的时机:
- 当前进程主动放弃CPU
- 进程正常终止
- 运行过程中发生异常而终止
- 进程主动请求阻塞(等待I/O)
- 当前进程被动放弃CPU
进程调度的方式
- 非抢占式:只允许进程主动放弃CPU
- 抢占式:可以由操作系统剥夺当前进程CPU控制权
- 当一个进程在CPU执行时,有更重要、更紧迫的进程需要使用CPU,则立即暂停当前进程,将CPU分配给更紧迫的那个进程。
// 适用于分时操作系统、实时操作系统
- 当一个进程在CPU执行时,有更重要、更紧迫的进程需要使用CPU,则立即暂停当前进程,将CPU分配给更紧迫的那个进程。
进程的切换与过程
- 狭义进程调度:从就绪队列选中一个要运行的进程。
- 进程切换:指一个进程让出CPU,让给另一个进程的过程。
- 对原来运行进程数据保存
- 新进程数据恢复(程序计数器、程序状态字、数据寄存器等,存放在PCB)
- 广义进程调度:选择+进程切换
CPU调度算法评价指标
CPU利用率
$利用率=\frac{忙碌时间}{总时间}$
系统吞吐量
$系统吞吐量=\frac{总共完成了多少作业}{总共花费的时间}$
周转时间
作业被提交给系统开始,到作业完成为止的时间间隔。
包括四部分:
- 作业在外存后备队列等待作业调度时间
- 进程在就绪队列等待进程调度的时间
- 进程在CPU上执行时间
- 进程等待I/O操作完成时间
等待时间
进程/作业处于等待CPU状态时间之和
进程:进程建立后等待被服务的时间之和
作业:建立进程后的等待时间 + 作业在外存后备队列中等待的时间
响应时间
用户提交请求到首次产生响应所用的时间
调度算法
批处理系统 Batch System
先来先服务 FCFS,First Come First Serve
进程按照请求CPU顺序使用CPU
用于作业调度,考虑哪个作业先到达后备队列;用于进程调度,考虑哪个进程先到达就绪队列
非抢占式算法
优点:公平、算法实现简单
缺点:对长作业有利,对短作业不利
短作业优先(SJF,Shortest Job First)
追求最少的平均等待时间,最少的平均周转时间,最少的平均带权周转时间
最短的作业时间,优先被得到服务。按照到达的进程/作业,最短运行的先服务。
非抢占式
抢占式(最短剩余时间优先算法)
优点:最短平均等待时间、平均周转时间
缺点:不公平,对短作业有利,长作业不利,可能产生饥饿现象
最短剩余时间优先算法(SRTN,Shortest Remain Time Next)
得到平均等待时间、平均周转时间最少
就是抢占式的短作业优先
高响应比优先(HRRN,Highest Response Ratio Next)
$响应比=\frac{等待时间+要求服务时间}{要求服务时间}$
每次调度先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务
非抢占式算法
优点:综合考虑等待时间和运行时间
缺点:没有缺点
交互式系统 Interactive System
时间片轮转(Round-Robin)用于分时操作系统
算法思想:公平、轮流为各个进程服务
算法规则:按照各进程到达就绪队列顺序,轮流让进程执行一个时间片(如100ms),若进程未在时间片内执行完,就剥夺CPU,将进程重新放入就绪队列队尾
用于进程调度
抢占式算法,由时钟装置发出时钟中断来通知CPU
如果时间片太大,就会增大进程响应时间,退化为先来先服务调度算法
如果时间片太小,进程切换过于频繁,就会花费大量时间处理切换,导致实际执行时间比例减少。
优点:公平,响应快,适用于分时操作系统
缺点:高频率进程切换,有一定开销,不区分任务紧急程度
优先级调度算法(Priority Scheduling)
思想:场景需要根据任务紧急程度决定处理顺序
规则:每个作业/进程有各自的优先级,调度时选择优先级最高的。优先级一样,处理先到达的
既能作业调度,也能进程调度
抢占式、非抢占式都有
静态优先级:创建进程确定,之后一直不变
动态优先级:创建进程有一个初始值,之后动态调整
系统进程优先级高于用户进程
前台进程优先级高于后台进程
操作系统偏好I/O型进程(对整体利用率、吞吐量有提升)
动态调整:追求公平、提升资源利用率、频繁IO操作提升优先级
优点:优先级区分紧急程度、重要程度,适用于实时操作系统
缺点:如果源源不断高优先级,就会导致饥饿
多级反馈队列调度算法(Multi-level Feedback queue scheduling)
思想:前两种的折中
规则:
- 设置多级就绪队列,各级队列优先级从高到低,时间片从小到大
- 新进程到达进入一级队列,运行时间片用完(时间片没用完被抢占,就返回当前级队列)程序还未结束,放入下一级队列(当处于最后一级队列的时候,重新回到最后一级队列)
- 只有第k级队列为空,才会为k+1级队头分配时间片
抢占式算法
优点:公平,每个进程都能得到快速响应,短进程经历较少时间就能完成,不必实现估计进程的运行时间,可以灵活调整对各类进程的偏好程度(I/O密集型进程偏好,可以放入当前优先级队列)
可能会导致饥饿
彩票调度(Lottery Scheduling)
按比例分配给进程彩票,然后抽奖,抽中彩票的就给分配一个时间片。
More:
Guarantee Scheduling
Fair-Share Scheduling
RealTime System 实时系统
实时系统:时间起主导的系统,要求计算机必须在一个确定的时间范围内作出反应
Minimizing Latency
Priority-Based Scheduling
Rate-Monotonic Scheduling
Earliest-Deadline-First Scheduling
线程调度
二级调度
- 内核级线程:系统范围竞争,需要完整的机器指令
- 用户级线程:用户范围竞争,切换需要少量机器指令
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!