1. CPU调度的三个层次
-
高级调度(作业调度)
- 按一定规则从外存的作业后卑队列中挑选一个作业调入内存中,并创建进程。
- 每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才撤销PCB。
- 频率低
- 外存→内存(面向作业)
- 进程状态:无→创建态→就绪态
-
中级调度(内存调度)
- 按照某种策略决定将哪个处于挂起状态的进程重新调入内存。
- 频率中等,中级调度频率比高级调度要高。
- 外村→内存(面向进程)
- 进程状态:挂起态→就绪态
-
低级调度(进程调度)
- 按照某种策略从就绪队列中选取一个进程,将CPU分配给它。
- 操作系统最基本的一种调度,在一般的操作系统中,都必须配置进程调度。
- 频率高,一般几十毫秒一次。
- 内存→CPU
- 进程状态:就绪态→运行态
2. 进程调度的时机
-
当前运行的进程主动放弃CPU
- 进程正常终止
- 运行异常终止
- 进程主动请求阻塞(等待I/O)
-
当前运行的进程被动放弃CPU
- 时间片用完
- 更紧急的任务需要处理(I/O中断)
- 有更高优先级的进程
-
不能进行进程调度
- 在处理中断过程中
- 进程在操作系统内核程序临界区(PS:内核程序临界区是用来访问内核数据结构的,如进程就绪队列;临界资源访问是互斥的)中
- 原子操作过程中(原语)
3. 进程调度的方式
-
非剥夺调度方式,又称非抢占方式
- 只允许进程主动放弃CPU
-
剥夺调度方式,又抢占方式
- 可以剥夺进程的CPU
4. 进程切换的过程
- 对原来运行过程各种数据的保存
- 对新进程各种数据的恢复
5. 调度算法的评价指标
-
CPU利用率
- CPU“忙碌”的时间占总时间的比例
- 公式:忙碌时间/总时间
-
系统吞吐量
- 单位时间内完成作业的数量
- 公式:作业总量/花费总时间
-
周转时间
- 作业被提交给系统开始,到作业完成为止的这段时间间隔
- 公式:作业完成时间-作业提交时间
-
等待时间
- 进程/作业处于等待CPU状态时间之和
-
响应时间
- 用户从提交请求到首次产生响应所用的时间
6. 调度算法
-
先来先服务(FCFS)
-
算法思想:主要从“公平”的角度考虑
-
算法规则:按照作业/进程到达的先后顺序进行服务
-
用于作业/进程调度
- 作业调度:考虑哪个作业先到达后备队列
- 进程调度:考虑哪个进程先到达就绪队列
-
非抢占式的算法
-
优点:公平、算法实现简单
-
缺点:排在长作业后的短作业需要很长的等待时间,带权周转时间很大。对短作业不利,长作业有利。
-
不会导致饥饿(PS:某进程/作业长期得不到服务)
-
-
短作业优先服务(SJF)
-
算法思想:追求最少的平均等待时间、平均周转时间、平均带权周转时间
-
算法规则:服务需要花费时间最短的作业/进程优先得到服务
-
用于作业/进程调度
- 作业调度:每次调度选择当前已到达且运行最短的作业
- 进程调度:每次调度选择当前已到达且运行最短的进程
-
非抢占式的算法
-
抢占式算法
- 最短剩余时间优先算法(SRTN):当新进程的剩余时间小于当前运行进程的剩余时间,新进程就会抢占CPU
-
优点:“最短的”平均等待时间、平均周转时间
-
缺点:不公平。对短作业有利,对长作业不利。
-
可能会导致饥饿(PS:某进程/作业长期得不到服务)
-
-
高响应比优先
-
算法思想:要综合考虑作业/进程的等待时间和要求服务的时间
-
算法规则:每次调度计算响应比,选响应比最高的为其服务,响应比=(等待时间+要求服务时间)/ 要求服务时间
-
用于作业/进程调度
- 作业调度:每次作业调度计算响应比,选响应比最高的作业为其服务
- 进程调度:每次进程调度计算响应比,选响应比最高的进程为其服务
-
非抢占式的算法
-
优点
- 综合考虑了等待时间和运行时间
- 等待时间相同时,服务时间短优先(短作业优先服务)
- 服务时间相同时,等待时间短优先(先来先服务)
-
不会导致饥饿(PS:某进程/作业长期得不到服务)
-
-
时间片轮转(RR)
-
算法思想:公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应
-
算法规则:按照各进程的就绪队列,轮流让各个进程执行一个时间片;在时间片内未执行完,则会被剥夺CPU,将进程重新放入就绪队列队尾
-
用于作业/进程调度
- 进程调度:只有作业放入内存建立进程后,才能分配CPU
-
抢占式算法
- 由时钟装置发出时间中断通知CPU时间片已到,剥夺当前进程的CPU
-
优点:公平、响应快,适用于分时操作系统
-
缺点:由于高频率的进程切换,有一定开销;不区分任务的紧急程度
-
不会导致饥饿(PS:某进程/作业长期得不到服务)
-
时间片长短
- 时间片过长,算法会退化为先来先服务算法
- 时间片过短,导致进程调度、切换频繁,系统需要花大量时间处理进程切换
-
-
优先级调度算法
-
算法思想:根据就任务的紧急程度来决定处理顺序
-
算法规则:每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程
-
用于作业/进程调度
- 作业调度
- 进程调度
-
非抢占式算法
-
抢占式算法
-
优点:区分紧急、重要的程度,灵活调整作业/进程的偏好程度,适用于实时操作系统。
-
缺点:若有源源不断的高优先级进程到来,会导致饥饿
-
会导致饥饿(PS:某进程/作业长期得不到服务)
-
进程优先级
- 系统进程优先级高于用户进程
- 前台进程优先级高于后台进程
- 操作系统更偏好I/O型进程(I/O繁忙型进程)
-
-
多级反馈队列调度算法
-
算法思想:其他调度算法的折中权衡
-
算法规则
- 设置多级就绪队列,各级队列优先级从高到低,时间片从小到大
- 新进程到达时先进入第1级队列,按FCFS原则排队等待被分配时间片,若用完时间片进程还没结束,则进入下一等级队列队尾。若已经在最低级的队列,则重新放回该队列队尾
- 只有当第n级队列为空时,才会为第n+1队头的进程分配时间片
-
抢占式算法
- 抢占式的算法,在n级队列的进程运行过程中,如更高级的队列(<n)中进入了一个新进程,新进程会抢占CPU;原来正在执行的进程放回n级队列的队尾
-
优点:公平(FCFS优点)、响应快(RR优点)、短进程处理时间较快(SJF优点)
-
会导致饥饿(PS:某进程/作业长期得不到服务)
-
7. 总结
- 重点:进程调度的方式。
- 重点:进程切换的过程。
- 重点:进程调度算法的算法思想,结合日常开发的理解,学习其中的思想。
- 请各位大佬发现错误,能指导菜鸟小弟
- 菜鸟也想努力进大厂,加油