网站大量收购独家精品文档,联系QQ:2885784924

631优先级倒置.PDF

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
631优先级倒置

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)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档