- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
优先级倒置问题
6.3.1 优先级倒置 很多实时系统都实现了线程优先级机制, 每个线程被分配一个优先级, 优先级高的线程只要 具备了运行的条件, 或者说进入了就绪态, 就可以立即执行。 除了优先级最高的那个线程外, 其他线程在执行过程中随时都可能停下来, 让给优先级更高的线程先执行。 抢占式调度策略 能保证系统的实时性。 由于多个线程共享资源, 在采用基于优先级调度策略时会出现较低优先级的线程先于高优先 级线程执行的情况,即优先级倒置(priority inversion)问题。优先级倒置可能使实时性 要求高的线程错过临界期限(critical deadline),从而导致系统崩溃。 在采用基于优先级的调度策略, 一旦两个线程共享了资源, 那么其中之一通常具有较高的优 先级。高优先级的线程期望一旦准备就绪就能运行,但当高优先级线程就绪,而低优先级线 程正在使用共享资源时, 高优先级线程必须等待, 直到低优先级线程完成对共享资源的操作。 这时,我们称高优先级线程被挂起。当高优先级线程挂起时,中优先级的线程抢先了正在使 用共享资源的低优先级线程, 此时高优先级线程已准备就绪并等待运行, 但中优先级线程此 刻正在运行,这时就出现了优先级倒置问题。 下图以三个不同优先级的线程为例描述一个优先级倒置的示例。 高优先级线程 H 和低优先级 线程 L 要共享资源 R,为了保证数据的完整性,它们需要通过信号量 S 来保证对临界资源的 互斥访问。线程 M 的优先级介于 H 和 L 之间。 图 6.1 一个优先级倒置的示例 (1)低优先级线程 L 取得信号量 S 的所有权,即做了 P 操作,但还没有做 V 操作。 (2)线程 H 的优先级高于线程 L,操作系统内核通过调度程序,将线程 L 切换出去,将线 程 H 置为运行态。 (3)线程 H 执行到中途需要访问共享资源 R,必须先对信号量 S 做 P 操作。因为此信号量 目前还没有恢复,于是线程 H 阻塞在信号量 S 上。 (4)线程 L 重新被切换到运行态。(5)此时线程 M 进入到就绪态,因为线程 M 的优先级高于任务 L,于是内核进行线程切换, 将线程 M 置为运行态。 (6)线程 M 执行结束后,线程 L 恢复执行。 (7)线程 L 释放共享资源 R,即对信号量做 V 操作。线程 H 获得信号量 S 的所有权才得以 继续执行。 从上面的分析可以看到, 由于高优先级线程 H 要获取被低优先级线程 L 占有的临界资源而被 阻塞,具有中等优先级的线程 M 抢占线程 L 的 CPU,从而导致线程 M 先于线程 H 执行。这时 便产生了优先级倒置的情况。 要避免出现优先级倒置问题, 必须让低优先级线程尽快释放临界资源。目前解决优先级倒置 通常有两种方法,一种是优先级继承(priority inheritance) ,另一种是优先级顶置 (priority ceilings) 。 优先级继承 优先级继承技术强令低优先级的线程继承与之共享资源并被挂起的高优先级线程的优先级。 一旦高优先级线程开始挂起,即可实施优先级继承,直到资源释放。下图是一个优先级继承 的示例。 图 6.2 优先级倒置的产生 (1)低优先级线程 L 取得信号量 S 的所有权,即做了 P 操作,但还没有做 V 操作。 (2)线程 H 的优先级高于线程 L,操作系统内核通过调度程序,将线程 L 切换下去,将线 程 H 置为运行态。 (3)线程 H 执行到中途需要访问共享资源 R,必须先对信号量 S 做 P 操作。因为此信号量 目前还没有恢复,于是线程 H 阻塞在信号量 S 上。 (4)线程 L 重新被切换到运行态,并继承线程 H 的优先级。 (5)此时线程 M 进入到就绪态,因为线程 M 的优先级低于线程 L 此时的优先级,因此线程 L 继续执行。 (6)线程 L 释放共享资源 R,即对信号量做 V 操作。线程 L 恢复其原来的优先级。 (7)线程 H 的优先级最高,于是内核进行任务切换,将线程 H 置为运行态。 (8)线程 H 执行结束后,按优先级高低顺序依次调度线程 M 和线程 L。 在优先级继承方案中, 当高优先级线程在等待低优先级的线程占有的临界资源时, 让低优先 级线程继承高优先级线程的优先级, 即把低优先级线程的优先级提高到高优先级线程的优先 级。 当低优先级线程释放高优先级线程等待的临界资源时, 立即把其优先级降低到原来的优 先级。采用这种方法可以有效地解决优先权倒置的问题。这种方法的缺点是,动态改变线程 的优先级耗费了大量的时间。 优先级顶置 优先级顶置方案为每个临界资源都分配一个优先级。 假设线程 H 在所有要共享某资源的线程 中优先级最高,则将资源的优先级确定为线程 H 的优先级加 1。调度程序将该资源的优先级 赋给任何访问该资源的线
文档评论(0)