文章目录
处理机调度的层次和调度算法的目标
调度层次
-
高级调度(作业调度)
- 用于决定把后备队列中的哪些作业调入内存,为他们分配必要的资源,并创建进程
-
低级调度
- 用来决定就绪队列中哪个进程应先获得处理机,并将处理机分配给选中的进程
-
中级调度
- 用于将外存中已经具备运行条件的进程换入内存,而将内存中处于阻塞状态的某些进程换出至外存
调度算法的若干准则
-
面向用户
- 周转时间短
- 响应时间快
- 截止时间的保证
- 优先权准则
-
面向系统
- 系统吞吐量高
- 处理机利用率好
- 各类资源的平衡利用
进程调度
任务
- 保存处理机的现成信息
- 按某种算法选取进程
- 把处理器分配给进程
机制
- 排队器
- 分派器
- 上下文切换
方式
- 非抢占方式
- 抢占方式
调度算法
CPU利用率 = 有效工作时间/(有效工作时间+空闲等待时间)
带权周转时间 = 作业的周转时间 / 系统为他提供服务的时间
先来先服务FCFS
- 非抢占式
- 不利于短作业和I/O型作业
短作业优先调度SJF
-
从后备队列中选择一个或若干个估计运行时间最短的作业,将他们调入内存运行
-
缺点
- 必须预知作业的运行时间
- 算法对长作业不利
- 未考虑作业的紧迫程度,因而不能保证紧迫性作业被及时处理
- 不一定能真正做到短作业优先调度
优先级调度算法PSA
-
调度算法类型
- 非抢占式
- 抢占式
-
优先权的类型
-
静态优先权
-
在创建进程时确定,在整个运行过程中保持不变
-
利用某一范围内的一个整数(0-255)
-
确定依据
- 进程类型,系统进程要高于一般用户进程
- 进程对资源的需求,对资源需求少的进程应该赋予高的优先级
- 用户要求,根据进程的紧迫程度和用户所付费用的多少,确定优先级
-
-
动态优先权
- 在进程创建之初,先赋予进程一个优先级
- 然后优先级会随进程的推进或等待时间的增加而改变
-
高响应比优先调度算法
- 优先权 = (等待时间+要求服务时间 )/ 要求服务时间
时间片轮转调度算法RR
-
系统将所有的就绪进程按FCFS策略排成一个就绪队列
-
给每一个进程一个时间片去运行
-
时间片大小
- 太小,频繁地执行进程调度和上下文切换
- 太大,使得每一个进程都能在一个时间片中完成,就退化为FCFS
-
时间片 q = 1 和q = 4
多级反馈队列调度算法
-
调度机制
- 设计多个就绪队列
- 每个队列采用FCFS算法
- 按队列优先级调度
-
性能
-
终端型用户
- 大多数作业第一队列所规定的时间片便可完成
-
短批处理作业用户
- 周转时间短
-
长批处理作业用户
- 不必担心作业长期得不到处理
-
实时调度
死锁概述
定义
- 多个进程在运行过程中因争夺资源而造成的一种僵局,若无外力作用,这些进程将无法再向前推进
产生死锁的原因
-
竞争资源
- 系统中供多个进程共享的资源数目不足以满足诸进程的需要,会引起资源的竞争
-
进程间推进顺序非法
- 仅存的请求和释放资源的顺序不当
资源问题
- 可重用性资源:数目是相对固定的,一个资源给一个进程
- 可消耗性资源:进程动态创建和消耗
- 可抢占式资源
- 不可抢占式资源
产生死锁的必要条件(任何一个不成立,死锁就不发生)
-
互斥条件
- 有一些资源只能互斥的使用
-
请求和保持条件
- 进程已经占有至少一个资源,此时又申请别的资源,但该请求的资源被别的进程所占用
- 此时请求进程被阻塞,只能等待,直到该请求的资源被释放
-
不可抢占式条件
- 进程已获得的资源在未使用完之前不能被抢占,只能在进程使用完时,由自己释放
-
循环等待条件
- 发送死锁时,必然存在一个循环等待链
- {P0,P1,P2,P3} 前一个在等待后一个进程所占用的资源
预防死锁
破坏“占有等待”条件
- 1、所有进程在开始运行之前,必须一次性的申请其在整个运行过程中所需要的全部资源
- 缺点 :开销太大,资源利用率降低
- 2、允许一个进程只获得运行初期所需的资源后,便可以开始运行,再逐步释放已经用完的资源,请求新的资源
破坏“不可抢占”条件
-
当一个已经保持了某些不可抢占资源的进程,提出新的资源请求后而不能得到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请
-
缺点
- 一个不可抢占资源被释放,会导致前端时间的工作失效,信息不连续
- 延长了周转时间,增加了系统开销,降低了系统吞吐量
破坏“循环等待”条件
- 对系统所有资源类型进行线性排序,并赋予不同的序号
避免死锁
系统安全状态
-
安全状态
-
允许进程动态的申请资源,但系统在进行资源分配之前,应先计算此次资源分配的安全性
-
若此次分配不会导致系统进入不安全状态,则可将资源分配给进程,否则令进程等待。
-
所谓安全状态
- 系统能按照某种进程推进顺序,为每个进程分配其所需要的资源
-
-
不安全状态
- 系统就可能会发生死锁
- 也就是,找不到一个合理的进程推进顺序
银行家算法
死锁的监测与解除
死锁的监测
-
保存有关资源的请求和分配信息
-
提供一种算法,利用这些信息检测系统是否已经进入了死锁状态
-
1、资源分配图
- P 进程结点 R 资源结点
- Pi ——>Rj 是资源请求边
- Rj——>Pi 是资源分配边
-
死锁定理
-
对资源分配图进行简化
- 找出一个既不阻塞又非独立的进程结点P,消去他的请求边和分配边
- 重复上一步
- 若能消去图中所有的边,是所有的进程结点都称为孤立结点,则称该图是可完全简化的,否则称不可完全简化的
-
死锁的解除
-
终止进程的方法
-
1、终止所有死锁的进程
- 付出的代价可能会很大
-
2、逐个终止进程
- 打破循环等待
-