1.基本概念
- 在多道程序系统中,一个作业被提交后,必须经过处理机调度后,方能获得处理及而执行
- 调度对象:进程
- 分类:
-
高级调度:(作业调度或长程调度)——把外存上处于后被队列中的哪些作业调入内存,创建进程,分配资源,插入就绪队列,等待低级调度
需决定:
1. 接纳多少个作业
2. 接纳哪些作业(FIFO,短作业优先,优先权等等) -
低级调度:(进程调度或短程调度)决定就绪队列中的哪个进程应获得处理机
功能:
1. 保存上下文到PCB
2. 按某种算法选取进程
3. 又分派程序把处理器分配给进程,恢复进程处理机现场两种方式:
1. 非抢占式:
————引起调度的原因:执行完毕——I/O请求——某种源语操作
2. 抢占式
————抢占的原则:优先权原则——短作业原则——时间片原则 -
中级调度——>目的是提高内存利用率和系统吞吐量(就绪状态<----->挂起状态)
- 挂起状态:使那些暂时不能运行的进程不再占用内存资源,而将它们调至外存上去等待。
-
调度算法
-
先来先服务:
- 有利于长作业,不利于短作业
-
短进程/作业优先:
- 对长作业不利
- 不能保证紧迫性作业(进程)会被及时处理
- 估计不一定准确
-
时间片轮转
- 短时间片有利于短作业,使其较快完成,但会频繁发生中断、进程上下文切换,增加系统开销;
- 长时间片未有效利用系统资源,退化为FCFS,无法满足交互式用户需求。
-
基于优先级的调度算法
- 非抢占式优先权算法
- 抢占式优先权调度算法:能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中。
- 优先权的类型
- 静态优先权:创建进程时确立,在整个运行期间保持不变
- 动态优先权:可随着进程的推进或随其等待时间的增加而改变,以便获得更好的调度性能
- 决定优先权的原则:
- 进程类型:系统进程的优先权高于一般用户进程的优先权。
- 进程对资源的需求:对执行时间和内存要求少的进程应赋予较高的优先权。
- 用户要求:按照各进程的执行流程和进程的紧迫程度来指定进程的优先权。
-
剩余时间最短者优先:必须记录各进程过去的服务时间,才能求出剩余的时间
-
高响应比优先调度算法:
即等待得越久,优先权越高,- 如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而该算法有利于短作业
- 实现的是先来先服务
- 对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高, 从而也可获得处理机。
优点:该算法既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。
缺点:利用该算法时,每次调度之前,都须先做响应比的计算,会增加系统开销。
-
多级反馈队列调度法:
- 设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低
- 当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。若在第一队列中的一个时间片中没有完成则插入第二队列,依次。。
- 先调度第一队列,然后依次
实时系统与实时任务调度
实时调度算法的分类
- 最早截止时间优先算法(EDF):有最早截止时间的任务排在队列的最前面
- 最低松弛度优先算法(LLF):松弛度值最小的任务排在队列最前面
- 当有任务执行时,只有等待任务的松弛度值为0才会发生任务的调度,其他情况不发生调度。
- 任务执行结束后或无任务执行时,再比较等待任务的松弛度值,较小的先执行。
实时任务分类
周期性来划分
1. (周期性)实时任务。
2. (非周期性)实时任务
截止时间的要求来划分
1. 硬实时任务:广泛采用抢占式调度机制
2. 软实时任务
进程死锁
产生死锁的原因和必要条件
死锁:多个进程因竞争资源而造成的一种僵局,若无外力作用,他们都无法向前推进
原因:
- 竞争资源——竞争非剥夺性资源和临时性资源
- 进程间推进顺序非法。
死锁发生的四个必要条件
- 互斥:进程对所分配到的资源进行排它性使用
- 请求和保持:进程已经保持了至少一个资源,但又提出了新的资源请求
- 不剥夺:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
- 环路等待:发生死锁时,必然存在一个进程——资源的环形链
解决死锁的方法
-
预防死锁:是通过设置某些限 制条件,去破坏产生死锁的四个必要条件中的一个或几个条件,来预防发生死锁
- 摒弃请求和保持——必须一次性地申请其在整个运行过程所需的全部资源
—— 优点:简单、易于实现且很安全。
—— 缺点:资源被严重浪费 - 摒弃不剥夺——当一个已经保持了某些资源的进程,再提出新的资源请求而不能立即得到满足时,必须释放它已经保持了的所有资源。待以后需要时再重新申请
—— 缺点:实现起来比较复杂且要付出很大代价 - 摒弃环路等待——系统将所有资源按类型进行线性排队,并赋予不同的序号。 所有进程对资源的请求必须严格按照资源序号递增的次序提出
——缺点:序号必须相对稳定,资源浪费
- 摒弃请求和保持——必须一次性地申请其在整个运行过程所需的全部资源
-
避免死锁:资源分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。
- 安全状态 :系统能按某种进程顺序,如<P1,P2,…,Pn>,依次为n个进程分配其所需资源,直至其最大需求,使每个进程都可顺利地完成,eg: 2.银行家算法(Dijkstra)
- 可利用资源向量Available
- 最大需求矩阵Max
- 分配矩阵Allocation
- 需求矩阵Need
其中的系统安全性检查的算法如下
- 安全状态 :系统能按某种进程顺序,如<P1,P2,…,Pn>,依次为n个进程分配其所需资源,直至其最大需求,使每个进程都可顺利地完成,eg: 2.银行家算法(Dijkstra)
-
检测死锁:通过系统所设置的检测机构,及时地检测出死锁的发生
-
解除死锁:当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。常用的实施方法是撤消或挂起一些进程。
- 剥夺资源。从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态。
- 撤消进程。最简单的撤消进程的方法,是使全部死锁进程都夭折掉;或者按照某种顺序逐个地撤消进程,直至有足够的资源可用,使死锁状态消除为止。(常用)
- 哲学家就餐问题 :另一种有效的方法是,增加一位服务员,让他安排其中的四位哲学家先入座,四位哲学家竞争五只筷子,必然有一位哲学家能同时获得两只筷子,当他进餐完毕,再安排剩下的那位哲学家入座,参与五只筷子的竞争。这样,五位哲学家都能顺利进餐。