【发布时间】:2014-02-19 03:11:55
【问题描述】:
我刚刚遇到了优先级继承,它是操作系统中优先级反转问题的解决方案。除此以外,任何人都可以提出任何其他解决方案吗?
谢谢
【问题讨论】:
我刚刚遇到了优先级继承,它是操作系统中优先级反转问题的解决方案。除此以外,任何人都可以提出任何其他解决方案吗?
谢谢
【问题讨论】:
替代品
prio 上限提升与prio 继承有何不同?
优先级继承:当较高优先级的任务开始等待由较低优先级任务捕获的互斥体时,较低优先级任务的优先级会暂时提升到较高优先级任务的优先级。这使得较低优先级的任务即使在被中等优先级任务抢占时也能继续运行。
缺点:
一个。如果低优先级的prio继承是基于多个随机事件序列,则中优先级任务对提升的低优先级任务的等待时间不容易确定。
b.如果提升的任务等待另一个任务持有的另一个互斥锁,那么这个任务的优先级也必须提升。这称为优先级传播。系统行为变得难以确定。
c。同样,如果一个更高优先级的任务现在开始等待这个提升的低优先级任务,提升的低优先级任务必须再次提升并再次传播,使得系统行为更加难以确定。
优先级上限提升:在创建时为每个互斥锁指定一个优先级上限。这等于可以采用互斥锁的最高优先级任务的优先级。当低优先级任务采用此互斥锁时,它的优先级立即提升到上限。因此,只要拥有互斥锁,中间优先任务就不能抢占该任务。
缺点:
一个。如果低优先级任务经常使用互斥锁,而高优先级任务很少使用,则不必要地禁止中等优先级任务抢占低优先级任务。
【讨论】:
我知道这是一个老问题,但我自己一直在研究这个话题,需要一个地方来发表我的结论。这是您在评论中询问的随机提升背后的想法:
当高优先级线程阻塞资源时,随机选择一个低优先级的就绪线程。在假定足以释放资源的一定时间内将该线程的优先级提升到阻塞线程的优先级。然后降低优先级并选择另一个线程。重复此操作,直到资源被释放。
我不知道该算法的任何形式分析,但很明显,@ShreyasS 涵盖的优先级继承和优先级上限在减少优先级反转时间方面更有效。我不知道它们的效率有多高。当然,这取决于应用程序,因此无论如何都需要进行测试。
但是,优先级继承和上限的一个很大的缺点是它们只能处理具有所有者概念的资源(例如互斥锁)。换句话说,如果有机会,调度程序知道哪个线程可以释放资源。另一方面,优先级提升更通用,即使在非拥有资源(例如信号量)上也能解决优先级倒置问题。
从概念上讲,如果您愿意投入时间,可以将所有三种算法结合起来。这里有一些快速的想法。拥有的资源通常可以使用继承,只有在专门为其配置时才可以使用上限。非拥有资源可以使用优先级提升。但即使在这种情况下,可提升线程的集合也可能受到限制,例如仅限于拥有资源句柄的进程中的那些。如果跟踪资源声明和释放之间的时间,提升持续时间也可以是自适应的。
【讨论】: