Chinaunix

标题: 请问这种情况,算是“优先级反转”吗? [打印本页]

作者: lxyscls    时间: 2015-08-30 16:32
标题: 请问这种情况,算是“优先级反转”吗?
Job H M L,优先级依次降低,即便引入了“优先级继承”,也可能会出现"优先级反转"的情况

下面是关于“优先级继承”的描述
In real-time computing, priority inheritance is a method for eliminating priority inversion. Using this programming method, a process scheduling algorithm increases the priority of a process (A) to the maximum priority of any other process waiting for any resource on which A has a resource lock.


也就是说,“优先级继承”产生的条件是:Job H已经被Job L block,此时赋予Job L 'H'的优先级,Job M则不会抢占Job L。

那么问题来了:
假设Job L只是持有了共享资源,但是Job H暂未被调度,Job M抢占Job L;Job H调度,想要抢占Job M变得不可能,只能block。
请问这种情况算是“优先级反转”吗?
作者: serenemoon    时间: 2015-09-02 14:03
回复 1# lxyscls


    为什么Job H抢占Job M不成功? H要抢占M肯定可以成功的,只是成功之后再去获取资源的时候会发现资源已经被L占用了,
    此时应该会把L的优先级提升到跟H同级,然后H放弃CPU,之后就会轮到提升了优先级的L占有CPU,直到L占用的资源释放,再降低L的优先级,接着再轮到H占用CPU,用完了再给M用。

    感觉就是 H 因为手里有把柄被 L 抓着,所以做个人情把 L 的优先级给提升到与自己同优先级的高度(前提是OS给H这个权限),帮 L 摆脱 M 的打扰,安静的使用完资源,然后 L 再乖乖的恢复自己本来的优先级(至少风光了一把)。
    当然 H 如果在 L 有把柄期间并不求着 L 什么,L 还是要被 M 欺负的, 因为 L 打不过 M,除非是 H 帮它打。
作者: lxyscls    时间: 2015-09-02 14:36
本帖最后由 lxyscls 于 2015-09-02 14:39 编辑

回复 2# serenemoon


    有道理,H还是能抢占M的,这个时候“优先级继承”提升了L的优先级,那么H退出调度之后,就轮到L了,M抢不了L了

    或者说在H抢占M,发现资源不可用的时刻,算是“优先级反转”,但是“优先级继承”通过提升L优先级的方法,将这种情况压缩到了最短——H退出调度后,L上场了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2