前兩天Marvell面試,被問到優(yōu)先級(jí)反轉(zhuǎn)是什么東東,無奈只能表示不會(huì),還好面試官非常地NICE,很耐心地告訴我這是什么,還聊起NASA的火星探測器就因?yàn)閮?yōu)先級(jí)反轉(zhuǎn)的原因出現(xiàn)過BUG, 我就一直點(diǎn)頭,還說回來會(huì)GOOGLE學(xué)習(xí)下
Priority Inversion 優(yōu)先級(jí)反轉(zhuǎn)是嵌入式實(shí)時(shí)系統(tǒng)里面的一個(gè)經(jīng)典的問題。簡單描述一下這個(gè)問題:有三個(gè)優(yōu)先級(jí)不同的task,A,B,C; A的優(yōu)先級(jí)最高,B次之,C最低。其中A和C有共享的臨界區(qū)。如果C已進(jìn)入臨界區(qū),那么A在進(jìn)入進(jìn)入臨界區(qū)之前,就會(huì)被阻塞。task B有可能打斷C而進(jìn)入運(yùn)行狀態(tài),這樣C什么時(shí)候從臨界區(qū)退出,就是一個(gè)未知的時(shí)間。A只有C從臨界區(qū)退出后才能被調(diào)度,A被阻塞的時(shí)間也是未知的。這樣,低優(yōu)先級(jí)的B先于高優(yōu)先級(jí)的A被調(diào)度,優(yōu)先級(jí)發(fā)生了逆轉(zhuǎn)。
這個(gè)問題在一般的操作系統(tǒng)里面不是一個(gè)嚴(yán)重的問題,最多A被多阻塞了一段時(shí)間。但是,在實(shí)時(shí)系統(tǒng)里面,如果一個(gè)任務(wù)在規(guī)定的時(shí)間里面沒有被調(diào)度運(yùn)行,系統(tǒng)就相當(dāng)于失敗了,可能引發(fā)系統(tǒng)崩潰。
解決這個(gè)問題有兩種手段:
1:Priority inheritance(優(yōu)先級(jí)繼承),如果一個(gè)高優(yōu)先級(jí)的task被阻塞,與它共享臨界區(qū)的低優(yōu)先級(jí)的task在進(jìn)入臨界區(qū)后,優(yōu)先級(jí)就會(huì)繼承高優(yōu)先級(jí)task的優(yōu)先級(jí),保證它不會(huì)被其他優(yōu)先級(jí)次高的任務(wù)打斷。從臨界區(qū)退出后,C的優(yōu)先級(jí)恢復(fù)正常。
2:A priority ceiling(最高優(yōu)先級(jí)),給臨界區(qū)分配最高優(yōu)先級(jí),如果一個(gè)task進(jìn)入臨界區(qū),就把臨界區(qū)的優(yōu)先級(jí)賦給它,已保證它不會(huì)被打斷。從臨界區(qū)退出后,task的優(yōu)先級(jí)恢復(fù)正常。
實(shí)時(shí)操作系統(tǒng)的一個(gè)特點(diǎn)就是,一個(gè)實(shí)時(shí)任務(wù),會(huì)在規(guī)定的時(shí)間內(nèi)得到響應(yīng),并且在規(guī)定的時(shí)間內(nèi)完成任務(wù)。所以,一切不可預(yù)知的動(dòng)作都是有害的。
有興趣可以看看下面兩個(gè)鏈接:
http://en.wikipedia.org/wiki/Priority_inversion
http://www.embedded.com/story/OEG20020321S0023
來源:
http://www.kernelchina.org/node/210