A Za, A Za, Fighting...

坚信:勤能补拙

2011知识点 - 优先级反转

前两天Marvell面试,被问到优先级反转是什么东东,无奈只能表示不会,还好面试官非常地NICE,很耐心地告诉我这是什么,还聊起NASA的火星探测器就因为优先级反转的原因出现过BUG, 我就一直点头,还说回来会GOOGLE学习下

Priority Inversion 优先级反转是嵌入式实时系统里面的一个经典的问题。简单描述一下这个问题:有三个优先级不同的task,A,B,C; A的优先级最高,B次之,C最低。其中A和C有共享的临界区。如果C已进入临界区,那么A在进入进入临界区之前,就会被阻塞。task B有可能打断C而进入运行状态,这样C什么时候从临界区退出,就是一个未知的时间。A只有C从临界区退出后才能被调度,A被阻塞的时间也是未知的。这样,低优先级的B先于高优先级的A被调度,优先级发生了逆转。
这个问题在一般的操作系统里面不是一个严重的问题,最多A被多阻塞了一段时间。但是,在实时系统里面,如果一个任务在规定的时间里面没有被调度运行,系统就相当于失败了,可能引发系统崩溃。
解决这个问题有两种手段:
1:Priority inheritance(优先级继承),如果一个高优先级的task被阻塞,与它共享临界区的低优先级的task在进入临界区后,优先级就会继承高优先级task的优先级,保证它不会被其他优先级次高的任务打断。从临界区退出后,C的优先级恢复正常。
2:A priority ceiling(最高优先级),给临界区分配最高优先级,如果一个task进入临界区,就把临界区的优先级赋给它,已保证它不会被打断。从临界区退出后,task的优先级恢复正常。

实时操作系统的一个特点就是,一个实时任务,会在规定的时间内得到响应,并且在规定的时间内完成任务。所以,一切不可预知的动作都是有害的。

有兴趣可以看看下面两个链接:
http://en.wikipedia.org/wiki/Priority_inversion
http://www.embedded.com/story/OEG20020321S0023




来源: http://www.kernelchina.org/node/210

posted on 2011-09-25 00:33 simplyzhao 阅读(926) 评论(3)  编辑 收藏 引用 所属分类: R_找工复习2011

评论

# re: 2011知识点 - 优先级反转 2011-09-27 20:49 williamwue

写得很好,学习了。  回复  更多评论   

# re: 2011知识点 - 优先级反转 2011-09-28 20:15 simplyzhao

@williamwue
见笑了,不是我写的,原作者的功劳...
  回复  更多评论   

# re: 2011知识点 - 优先级反转 2011-10-04 21:46 williamwue

@simplyzhao
呵呵,我最近也在找工作,国庆后去Marvell面试,不知道博主有没有时间交流下。
我的邮箱就是我的用户名@gmail。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

<2011年9月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜