处理机调度:多道程序环境下,动态的吧处理机分配给就绪队列中的一个进程使之执行
提高处理机的利用率、改善系统性能,很大程度上取决于处理机调度的性能。
处理机调度便成为OS设计的中心问题之一。分配的任务由处理机调度程序完成
三级调度:高级调度、中级调度、低级调度
1、高级调度( 作业调度 或 长程调度 )
在每次执行作业调度时,都须作出两个决定:
- 接纳多少作业——取决于多道程序度。应根据系统的规模和运行速度等情况综合考虑
- 接纳哪些作业——取决于采用的调度算法。如先来先服务,短作业优先等
系统运行并不一定存在高级调度
- 批处理系统:作业进入系统后先驻留外存,故需要有作业调度。
- 分时系统:为及时响应,作业由终端直接送入内存,故不需作业调度。
- 实时系统中,通常也不需作业调度
2、低级调度( 进程调度 或 微观调度 )
进程调度方式:
- 非抢占方式(Non-preemptive Mode)
- 一旦处理机分配给某进程,该进程一直执行。决不允许其他进程抢占已分配运行进程的处理机。 - 抢占方式(Preemptive Mode)
- 允许调度程序根据某种原则,暂停某个正在执行的进程,将处理机重新分配给另一进程
进程调度方法 | 调度的时机 | 特点 |
---|---|---|
非抢占方式 | 程序完成;发生某事件阻塞; | 实现简单、系统开销小; 功能也简单,适用于大多数批处理OS,但在要求较严格的实时系统,不宜采用该方式 |
抢占方式 | 程序完成;发生某事件阻塞;新进程就绪; | 抢占的原则有很多种:优先权高的可以抢占优先级低的进程的处理机。短作业(进程)可以抢占长作业(进程)的处理机。各进程按时间片运行,一个时间片用完时重新进行调度 |
中级调度( 交换调度 )
引入目的:提高内存利用率和系统吞吐量,根据条件将一些进程调出或调入内存
三中调度的频率和复杂度
- 进程调度:运行频率最高,算法不能太复杂,以免占用太多的CPU时间。分时系统通常10~100ms便进行一次。
- 作业调度:一个作业运行完毕退出系统时即触发重新调度一个新作业入内存,周期较长,大约几分钟一次。因而也允许作业调度算法花费较多的时间。
- 中级调度:运行频率基本上介于上述两种调度之间。
三级调度比较:
调度类型 | 运行频率 | 运行时间 | 算法复杂度 |
---|---|---|---|
进程调度 | 高 | 短 | 低 |
中程调度 | 中等 | 较短 | 中等 |
作业调度 | 低 | 长 | 高 |
为此,应使那些暂时不能运行的进程不再占用宝贵的内存资源,而将它们调至外存上去等待,把此时的进程状态称为就绪驻外存状态或挂起状态。当这些进程重又具备运行条件、且内存又稍有空闲时,由中级调度来决定把外存上的那些又具备运行条件的就绪进程,重新调入内存,并修改其状态为就绪状态,挂在就绪队列上等待进程调度
调度队列模型
- 仅有进程调度的调度队列模型
- 具有高级和低级调度的调度队列模型
- 同时具有三级调度的调度队列模型
- 引入中级调度后,进程的状态变化:
- 就绪状态:分为内存就绪和外存就绪。
- 阻塞状态:分为内存阻塞和外存阻塞。
中级调度使进程在上述状态间变化,并使数据在内外存间互换
- 引入中级调度后,进程的状态变化:
调度算法准则
1)面向用户准则
- 周转时间短
- 响应时间快
- 均衡性
- 截止时间的保证
- 优先权准则
2)面向系统准则 - 系统吞吐量高(批处理系统的重要指标)
- 单位时间内所完成的作业数,跟作业本身(与作业平均长度密切相关)和调度算法都有关系 - 处理机利用率好(主要针对大中型主机)
- 各类资源的平衡利用(主要针对大中型主机)
批处理系统 | 平均周转时间短、系统吞吐量高、处理机利用率好 |
时分系统 | 响应时间快、均衡 |
实时系统 | 截止时间的保证、可预测性 |
调度算法:
1、先来先服务调度算法 FCFS
一种最简单的调度算法,按先后顺序进行调度。既可用于作业调度,也可用于进程调度。
- 按照作业提交,或进程变为就绪状态的先后次序分派CPU;
- 新作业只有当当前作业或进程执行完或阻塞才获得CPU运行
- 被唤醒的作业或进程不立即恢复执行,通常等到当前作业或进程出让CPU。 (所以,默认即是非抢占方式)
不利于短作业
** 关于应用: 有利于CPU繁忙型的作业,而不利于I/O繁忙的作业(进程)
2、短作业(进程)优先调度算法 SJF/SPF
-
优点:通过上表可见采用SJF/SPF算法,平均周转时间、平均带权周转时间都有明显改善。SJF/SPF调度算法能有效的降低作业的平均等待时间,提高系统吞吐量
-
方式:分抢占和非抢占两种方式,上例为简单的非抢占式。
-
SJF/SPF的不足:
- 1. 对短作业有利,但同时造成了对长作业的不利。
- 2.由于作业(进程)的长短含主观因素,不一定能真正做到短作业优先。
- 3.未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)的及时处理
3、高优先权优先调度算法 HPF
分两种方式:
- 非抢占式优先权算法
- 抢占式优先权算法 关键点:新作业产生时
** 静态优先权:**创建进程时确定,整个运行期间保持不变。一般利用某一范围的一个整数来表示,又称为优先数。
** 动态优先权:**创建进程时赋予的优先权可随进程的推进或随其等待时间的增加而改变。
4、基于时间片的轮转调度算法 RR
(1)时间片轮转算法
- 将系统中所有的就绪进程按照FCFS原则,排成一个队列。
- 每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。
- 在一个时间片结束时,发生时钟中断。
- 调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前就绪的队首进程。
(2)多级反馈队列算法 FB
- 设置多个就绪队列,各队列有不同的优先级,优先级从第一个队列依次降低。
- 赋予各队列进程执行时间片大小不同, 优先权越高,时间片越短。
各算法比较
算法名称 | 特点 | 方式 |
---|---|---|
FCFS | 最简单、不利于短作业 | 非抢占 |
SJF/SPF | 照顾平均周转时间、不利于长作业 | 非抢占 / 抢占 |
HPF/HRRN | 优先权考虑全面 | 非抢占 / 抢占 |
RR | 及时响应、简单 | 时间片抢占 |
FB | 最综合的一种算法 | 时间片抢占 / 立即抢占 |
比较项目 \ 算法 | FCFS(先来先服务) | RR(轮转法) | SJF(短作业优先) | SRTF(最短剩余时间优先) | HRRF(高响应比优先) | MFQ(多级反馈队列) |
---|---|---|---|---|---|---|
选择依据 | max[w] | 常量 | min[s] | min[s-e] | max((w+s)/s) | 见4.5.7节 |
调度方式 | 非抢占式 | 抢占式(按时间片) | 非抢占式 | 抢占式(进程到达时) | 非抢占式 | 抢占式(时间片) |
吞吐量 | 不突出 | 如果时间片太小可变低 | 高 | 高 | 高 | 不突出 |
响应时间 | 可能很高 | 对于短进程提供良好的响应时间 | 对于短进程提供良好的响应时间 | 提供良好的响应时间 | 提供良好的响应时间 | 不突出 |
开销 | 最小 | 低 | 可能高 | 可能高 | 可能高 | 可能高 |
对进程的作用 | 不利于短进程和I/O繁忙进程 | 公平对待 | 不利于长进程 | 不利于长进程 | 较好的均衡 | 偏爱I/O繁忙性进程 |
“饥饿”问题 | 无 | 无 | 可能 | 可能 | 无 | 可能 |
处理及调度与死锁
什么是实时系统?
- 指系统能够在限定的响应时间内提供所需水平的服务。
- 指计算的正确性不仅取决于程序的逻辑正确性,也取决于结果产生的时间,如果系统的时间约束条件得不到满足,将会发生系统出错。
实时任务:具有明确时间约束的计算任务,有软/硬,随机/周期性之分。
最低松弛度优先 LLF
松弛度= 截止完成时间 – 还需执行时间 - 当前时间
进程切换发生的时机
- 进程执行完
- 进程I/O阻塞
- 新进程出现时可能的抢占
- 某进程松弛度为0时发生抢占
多道程序系统借助并发执行改善资源利用率,提高系统吞吐量,但可能发生一种危险——死锁
死锁:指多个进程在运行过程中,因争夺资源而造成的一种僵局。当进程处于这种状态时,若无外力作用,它们都将无法再向前推进
- 死锁(Deadlock): 指进程之间无休止地互相等待!
- 饥饿(Starvation):指一个进程无休止地等待!
产生死锁的原因:
- 竞争资源:系统中供多个进程共享的资源如打印机、公用队列等的数目不满足需要时,会引起资源竞争而产生死锁。
- 可剥夺和非剥夺兴资源
- 可剥夺性资源:分配给进程后可以被高优先级的进程剥夺。如CPU和主存。
- 不可剥夺性资源:分配给进程后只能在进程用完后释放。如磁带机、打印机等。 - 永久性和临时性资源
- 永久性:打印机。可顺序重复使用
- 临时性:进程产生被其他进程短暂使用的资源,如数据资源:“生产者/消费者”算法中的信号量。。它可能引起死锁。
- 可剥夺和非剥夺兴资源
- 进程间推进顺序非法:进程在运行过程中,请求和释放资源的顺序不当,同样会导致死锁。
- 推进顺序合法
- 推进顺序非法
-
产生死锁的四个条件( 缺一不可 ):① 互斥条件 ② 请求和保持条件 ③ 不剥夺条件 ④ 环路等待条件
处理死锁:事先预防 ① 预防死锁 ② 避免死锁 事后处理 ③ 检测死锁 ④ 解除死锁
只要使系统始终处于安全状态,便可避免发生死锁。不是所有的不安全状态都是死锁状态。