文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>优先级反转问题

优先级反转问题

时间:2006-03-20  来源:wz_uestc

   昨天上课,老师说起“优先级反转问题“,郁闷的是自己突然不能把这个问题想清楚了,模模糊糊的。于是回来查资料,把这个问题真正给弄明白了。特写下自己的一些体会!
   呵呵,先罗嗦一下,还是从头说起吧!
   当多个任务需要共享相同数据的时候,我们得提供保护机制,其中比较流行的方法是:(1)关中断,这也是最火暴最激烈的方法。关中断,也就禁止了任务的切换。此方法最大的优点——它是在数据由任务代码和中断程序共享的情况下,唯一可行的办法(因为中断程序不容许获取信号量);缺点也是那么的明显,它会影响系统中所有中断和其他任务的响应时间。(2)使用信号量,这应该是保护共享数据最理想的办法,因为它只影响需要获取同一个信号量的任务,中断程序和不需要这个信号量的任务响应时间不会改变。
   那么是不是信号量就没有缺点了呢?然而很多时候,恰恰事实相反——在一个系统中,也许信号量的使用越少,系统运行得越好。除非你正确的使用信号量,不然会带来大量的问题。
其中”优先级反转“就是持有信号量太长带来的一个问题!(累呀,说了半天,终于回到了主题)
   大多数的 RTOS都是使用的基于优先级的可抢占式调度策略,系统为每一个任务分配一个优先权,调度程序保证当前运行的进程是优先权最高的进程。但是,有时候会出现一种比较奇怪的现象:由于多进程共享资源,具有最高优先权的进程被低优先级进程阻塞(低优先级进程持有信号量),反而使具有中优先级的进程先于高优先级的进程执行。如果中优先级的进程久久得不到释放,那么高优先级的进程将持久等待甚至崩溃(超过其deadline)。这就是所谓的优先级反转(Priority Inversion)。
    一些RTOS使用”优先级继承“解决这个问题:即在低优先级进程持有信号量,并且高优先级进程在等待该信号量时,将低优先级进程提高到与高优先级进程相同。
    应该还有一些方法可以解决优先级反转问题,请各位网友补充!
   
相关阅读 更多 +
排行榜 更多 +
Event Horizon

Event Horizon

飞行射击 下载
Counter Terrorist Sniper Shoot

Counter Terrorist Sniper Shoot

飞行射击 下载
Special Agent

Special Agent

飞行射击 下载