文章目录
进程调度
调度简介
历史
早期批处理时代
没有调度
大型机的多道程序设计
多个用户同时使用计算机
多个程序同时运行
CPU资源至关重要
• 好的调度→提高性能、提高用户满意度
在操作系统中的地位:非常重要
PC机
单用户,程序少,CPU性能提升快,调度不算重要
网络服务器
进程线程多,变得重要
移动嵌入式系统
资源受限,进程多样化,非常重要
相关概念
进程行为
计算密集型和IO密集型,
调度时机
进程结束,阻塞,IO中断,时钟中断
调度算法
非抢占式:等
抢占式:可以被打断
调度算法目标:
all OS | 公平,平衡,策略强制执行 |
---|---|
批处理 | 吞吐量 周转时间(从提交到终止间的平均时间) |
交互式 | 响应时间,均衡性 |
实时 | 满足截止时间(避免数据丢失) 可预测性 (多媒体系统) |
进程切换
· 切换全局页目录以加载一个新的地址空间
· 切换内核栈和上下文
批系统中的调度
目的:吞吐量和周转时间
主要类型:
❑ 先来先服务( FCFS :First Come First Serve)
❑ 最短作业优先(SJF:Shortest Job First)
❑ 最短剩余时间优先(SRTN:Shortest
Remaining Time Nest)
❑ 最高响应比优先(HRRN:Highest Response
Ratio Next )
FCFS
方式:按照进程创建的次序运行,非抢占式
缺点:长进程后面的短进程需要等很长时间,不利用户体验
最短作业优先SJF
有最短的平均周转时间
最短剩余时间优先SRTN
当一个新就绪的进程比当前运行进程具有更短的完成时间时,系统抢占当前进程,选择新就绪的进程执行
优点 | 缺点 |
---|---|
最短平均周转时间 | 不公平,不精确,没有优先级 |
最高响应比优先(HRRN)
折衷权衡
过程:
先计算每个进程的响应比R,总是选择R最高的进程执行。
R
=
周
转
时
间
/
处
理
时
间
R=周转时间/处理时间
R=周转时间/处理时间
=
(
处
理
时
间
+
等
待
时
间
)
/
处
理
时
间
=(处理时间 + 等待时间)/ 处理时间
=(处理时间+等待时间)/处理时间
=
(
1
+
(
等
待
时
间
/
处
理
时
间
)
=(1 +(等待时间 / 处理时间)
=(1+(等待时间/处理时间)
交互式系统中的调度
目标:响应时间、均衡性
❑ 轮转调度(RR-Round Robin)
❑ 最高优先级调度(HPF—Highest Priority First)
❑ 多级反馈队列(Multiple feedback queue)
❑ 最短进程优先(Shortest Process Next)
轮转调度
古老,简单,公平,广泛
过程:
排队列
时间片
当前进程时间片用完,让出处理器,排入队尾。
优点 | 缺点 |
---|---|
公平,响应速度快 | 进程切换多,开销高 |
对于多种不同时间的进程,时间片流转是有利的,但是对于相同大小的进程,平均周转时间就变长了。
设计原则:
时间片应略大于一次典型的交互所需要的时间
最高优先级调度
进程控制块TCB中加入优先级属性,可以是静态不变的,也可以是动态调整的。
简单,不公平
静态调整:
重要性,系统进程、前台进程、I/O进程。
动态调整:
每个进程的优先级设置为1/f;
f = 历 史 占 用 C P U 时 间 / ( 历 史 I O 阻 塞 时 间 + 历 史 占 用 C P U 时 间 ) f=历史占用CPU时间/(历史IO阻塞时间+历史占用CPU时间) f=历史占用CPU时间/(历史IO阻塞时间+历史占用CPU时间)
如果存在时间片,那么f就是上一次进程时间片CPU运行时间;
I/O型进程优先级应该较高。
优先级调度+时间片轮转
过程:
- 把一组进程按照优先级分为若干类,
- 同一优先级 – 时间片
- 不同优先级 – 最高优先级调度
综合优先级调度+时间片轮转
维护n个就绪队列,每个队列对应一个优先级
调度时机:
新的进程创建,一个进程时间片用完,一个阻塞进程进入就绪态时,系统将根据优先级,把该进程放入到响应队列的队尾。
特点:
只有高优先级类的队列为空时,其他队列的进
程才有可能运行
队列存在多个进程,这些进程以时间片轮转的方式平等运行
高优先级进程会抢占当前进程
多级反馈队列调度
BSD 5.3(Unix的分支)使用的调度算法
结构
- 多个优先级就绪队列
- 不同优先级队列有不同的时间片长度,第一级最少,优先级降低,时间片增大
- 高队列为空时,调度第二级队列
- 各级队列按时间片流转
- 进程用完当前时间片,让出cpu,进入下一级就绪队列。
- 阻塞而放弃cpu,进入等待队列,等待的结果发生后,回到原先一级队列
用户 | 优点 |
---|---|
终端型用户 | 提交作业小,在第一队列完成就可以让用户满意 |
短进程用户 | 平均周转比较短 |
长进程用户 | 不会担心饥饿现象 |
漏洞:
要长时间运行,且持续交互的进程不友好,用户可以作弊:每隔几秒敲一下键盘就可以让自己的进程优先级永远最高。
最短进程优先
选时间最短的运行,但是运行前不能确定运行时间。
方法:
预测:根据过去行为预测
老化技术:
保证调度
❑对用户作出明确的性能保证并实现它
n个进程,则每个CPU处理能力的1/n
必须跟踪各个进程自创建以来已使用了多少CPU时间
彩票调度
方法:
❑给每个进程发彩票
❑优先级越高,发的彩票越多
❑每隔一段时间(一个时间片)抽奖,抽出来是谁就运行谁。
优点 | 不会出现某个进程一直等待,轻量高效 |
---|---|
缺点 | 不能很好的解决IO进程 |
公平分享调度
调度进程本身,不关心用户
❑ 进程多的用户有优势
实时系统中的调度
基本条件
必要信息:
- 就绪时间、开始截止时间、完成截止时间、处理时间
- 系统处理能力强
基于时钟中断的抢占式优先权调度算法
立即抢占式优先权调度算法
μC/OS-II中的调度
立即抢占式优先权调度算法+基于时钟中断的抢占式优先权调度算法
任务改变状态、新建任务 | 立即抢占式 |
定时阻塞 | 基于时钟 |
策略和机制
调度算法不知道用户的具体需求,很少能做出最优选择。
调度机制与调度策略分离
调度算法以某种形式参数化,而参数可以由用户进程填写。
线程调度
用户级线程:
- 内核不知道该线程存在,调度以进程为单位
- 线程之间协同运行,“主动”交出运行权
- 运行时系统:轮转和优先级调度,用户也可以自定义
内核级线程:以线程为单位