下面我们来介绍优先级反置
优先级反置呢指的是说
我们在操作系统当中
出现高优先级的进程
由于等待低优先级进程所占用的资源
而导致高优先级进程
长期等待的现象
这是一个例子
进程T1它的优先级是40
然后它占用的资源L1
这时候另外一个进程T2
它的优先级是50
那它的运行过程当中
要申请资源L1
由于T1已经占用资源L1
所以这时候它处于等待的状态
那么按照正常情况下呢
这时候T1就应该
进入运行状态
然后等到它释放资源
然后高优先级的这个进程
再获取这个资源
但是在这个过程当中
如果有另外一个进程T3
它的优先级是46
在高优先级的进程进入组合状态之后
低优先级进程还没有得到CPU使用权
投入运行状态之前
那T3进入运行状态
那么这时候呢T1就没有办法继续执行
那它所占用资源呢
也就没有办法释放
那这样的话
T2这个高优先级的进程呢
就会一直等待下去
这种情况呢
就是我们这里说的优先级反置
优先级反置导致
这个进程长期进入等待状态
在什么时候会出现这种情况呢
只要你是用的是基于优先级的
并且是抢占的调度算法
那么都会存在这种情况
好那这种情况怎么处理呢
我们在这儿介绍两种基本的做法
一种呢称之为优先级进程
优先级进程是指
占用资源的低优先级进程
继承申请资源的高优先级进程的优先级
这种做法我们可以通过
这样一个图式来展示
在这里呢有三个进程
T1 T2 T3
它们这3条线呢代表不同的优先级
底下T3优先级比较低
那首先呢是T3进入执行状态
那到T2时刻 它占用资源
然后在临界区进行执行
在临界区执行的过程当中呢
这时候 有一个
优先级比它高的进程T1
进入执行状态
那么它这时候呢被抢先
好 T1开始执行
在T1执行过程当中它申请资源S
好 那这时候 T1的申请
导致T3的优先级提升
那提升上来之后
那么这时候呢它继续往下执行
它执行到释放资源S
那 释放资源S之后
那这时候T1就可以获取这个资源
然后继续它的临界区执行
等到它释放资源之后
那它再继续执行
在这个过程当中
如果说有T2出现
那么它必须等到T1结束之后
它才能占用CPU来继续执行
在这个过程当中
由于T3被T1强占
所以这时候 会有高优先级
等低优先级的这种情况
T3申请到资源
而高优先级的T1
进入执行状态的时候
那么这时候T3被阻塞
它申请资源的时候呢
如果它申请的正好是
T3所占用的这个资源
那么T3的优先级
就会提到跟它一样的高度
好 那这时候呢它就可以进入执行状态
等到它释放资源
好 那么这时候它优先级又回来了
回来之后 那这时候呢
T1就可以获取到这个资源
因为它这时候进入执行状态
并且它的申请呢就能获得批准
好 然后一直到它释放
那它正常执行
那我们说 在这种情况下
优先级反置的现象呢就没有了
那在这儿呢 需要说明的是
这个占有资源的低优先级进程
只有在被阻塞的情况下
它才会提升优先级
如果不是这样的话
那么它的优先级是不会被提升的
另一种做法呢 叫优先级天花板协议
它的做法是什么呢
就是占有资源的进程
和所有可能申请该资源的进程相比较
那把它的优先级呢设置成
这些可能申请资源的进程里
优先级里最高一个
用这种办法的话
那它占用资源的时候
其它的任何进程都不会
阻止它使用这个资源了
那这种做法呢 不管是否发生等待
我的优先级都会提高
实际上在这种做法里
可能会有优先级滥用的情况
也就是大家会把
自己的优先级提的很高
实际上所有都提到最高优先级的话
提高优先级已经没有意义了
好 所以在这儿呢
由于高于系统当中
所有被锁定资源的优先级
好那这时候呢
它在执行临界区的时候
就不会被堵塞了
这是两种理论上的做法
在我们实际系统里头呢
通常情况下都跟这有很大的区别
详细的情况呢
希望大家去看实际系统当中的
相关的文档和代码
好 到现在为止呢
我们就讨论清楚了
操作系统当中的处理机调度的
基本原理和我们这些调度算法
以及于对实时调度和多处理机调度呢
有一个简要的介绍
最后说明了在调度算法当中
可能出现的优先级反置现象
好 今天的课呢就到这里 下课