繁体   English   中英

我不明白优先级反转如何发生

[英]I cannot understand how priority inversion can occur

HPT->最高优先级任务。
MPT->中优先级任务
LPT->低优先级任务

朋友你好,我从许多网站(例如http://www.embeddedheaven.com/priority-inversion-2.htm )上阅读了优先级倒置。 但是我想知道,为什么HPT不能抢占LPT? 如果您将阅读第3.3节“无界倒置”,则说明LPT是否已获取资源,如果HPT已准备好但由于LPT而被阻塞,则同时显示。 但是,如果MPT准备就绪,则它将抢占LPT并自行执行。 然后LPT必须等到MPT完成。 一旦MPT完成,则LPT恢复。 一旦LPT完成,则HPT开始。 所以我的问题是,为什么HPT不能抢占LPT或MPT?

Wikipedia的解释也许比您提供的链接更容易理解: https : //en.wikipedia.org/wiki/Priority_inversion

要用稍微不同的词回答您的问题,大致按时间顺序是

  1. LPT收购R
  2. MPT变为可运行,因此抢占了LPT
  3. HPT可运行,因此抢占了MPT
  4. HPT尝试获取R和块
  5. 调度程序选择可运行的最高优先级任务,即MPT。
  6. MPT不受限制地运行(可能“永远”运行),从而阻止LPT运行并释放R,从而阻止HPT运行。

如果优先级较低的任务拥有一些独占资源,则抢占(以便任务获得CPU时间)是不够的。 然后,较高优先级的任务将仅尝试获取资源(例如,通过锁定互斥锁),该资源将阻塞该资源,直到对资源进行较低优先级的任务为止。

因此,较高优先级的任务最终被阻塞(未运行),而较低优先级的任务开始运行。

优先级倒置是指拥有共享资源的先发高管无限期推迟的一种形式。

当高优先级任务请求访问当前分配给低优先级任务的共享资源时,就会发生优先级倒置。 必须阻止高优先级任务,直到低优先级任务释放资源。

当低优先级任务被一个或多个中优先级任务阻止执行时,此问题变得复杂。 因为低优先级任务没有执行,所以它无法完成与资源的交互并释放该资源。 因此,通过低优先级任务有效地防止了高优先级任务执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM