專利名稱:一種微內(nèi)核嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)級(jí)資源管理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式實(shí)時(shí)操作系統(tǒng)技術(shù),主要是實(shí)現(xiàn)一種微內(nèi)核嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)級(jí)資源管理方法。
背景技術(shù):
資源管理是嵌入式實(shí)時(shí)操作系統(tǒng)的重要組成部分。任務(wù)級(jí)資源管理是用來協(xié)調(diào)多個(gè)優(yōu)先級(jí)不同任務(wù)對(duì)共享資源的訪問,比如,管理實(shí)體(調(diào)度器),程序序列,內(nèi)存,硬件,外設(shè)等。任務(wù)級(jí)資源管理必須要保證兩個(gè)任務(wù)不能在同一時(shí)刻占有相同的資源,不會(huì)發(fā)生優(yōu)先級(jí)反轉(zhuǎn)(Priority Inversion),使用資源時(shí)不會(huì)發(fā)生死鎖。
目前,市場上占有率比較高的商業(yè)實(shí)時(shí)操作系統(tǒng)有VxWorks、PSOS、QNX、LynxOS、VRTX,、Windows CE等。這些為數(shù)眾多的實(shí)時(shí)操作系統(tǒng)絕大多數(shù)都是多任務(wù)實(shí)時(shí)微內(nèi)核的結(jié)構(gòu),采用的是基于優(yōu)先級(jí)的可搶占式調(diào)度策略。系統(tǒng)為每一個(gè)任務(wù)分配一個(gè)優(yōu)先權(quán),調(diào)度程序保證當(dāng)前運(yùn)行的進(jìn)程是優(yōu)先權(quán)最高的進(jìn)程。大多數(shù)的實(shí)時(shí)操作系統(tǒng)采用了一種稱作信號(hào)量(semaphore)的機(jī)制來實(shí)現(xiàn)對(duì)共享資源的管理。但是,有時(shí)候會(huì)出現(xiàn)一種比較奇怪的現(xiàn)象由于多進(jìn)程共享資源,具有最高優(yōu)先權(quán)的進(jìn)程被低優(yōu)先級(jí)進(jìn)程阻塞,反而使具有中優(yōu)先級(jí)的進(jìn)程先于高優(yōu)先級(jí)的進(jìn)程執(zhí)行,導(dǎo)致系統(tǒng)的崩潰,這就是所謂的優(yōu)先級(jí)反轉(zhuǎn),具體示例如下假設(shè)在一個(gè)全搶占的實(shí)時(shí)嵌入式操作系統(tǒng)中有4個(gè)任務(wù)(T1,T2,T3,T4),T4優(yōu)先級(jí)較低,占有信號(hào)量S1。T1優(yōu)先級(jí)最高,搶占T4并請(qǐng)求相同的信號(hào)量。由于信號(hào)量S1已經(jīng)被占據(jù),T1進(jìn)入等待狀態(tài)。這時(shí),低優(yōu)先級(jí)的T4被一個(gè)優(yōu)先級(jí)在T1和T4之間的任務(wù)(T2或T3)中斷并搶占。T1只有在低優(yōu)先級(jí)任務(wù)完成后才能執(zhí)行,因?yàn)樾盘?hào)量S1那時(shí)才能被釋放。雖然T2和T3不使用信號(hào)量S1,他們的運(yùn)行時(shí)間延遲了T1。
另一個(gè)在任務(wù)級(jí)資源管理的同步機(jī)制中的普遍問題就是死鎖問題。在這種情況下,死鎖意味著任務(wù)由于相互鎖定資源而無限制的等待,從而任務(wù)也就無法運(yùn)行。
假設(shè)在系統(tǒng)中有兩個(gè)任務(wù)(T1,T2),高優(yōu)先級(jí)的任務(wù)T1占有信號(hào)量S1,由于等待一個(gè)事件而無法運(yùn)行。低優(yōu)先級(jí)的任務(wù)T2占有信號(hào)量S2,轉(zhuǎn)入運(yùn)行狀態(tài)。如果T1又進(jìn)入就緒狀態(tài)并且試圖占有信號(hào)量S2,它又會(huì)進(jìn)等待狀態(tài)。這時(shí),T2運(yùn)行,如果T2試圖占有信號(hào)量S1,這樣T1和T2互相等待對(duì)方占有的信號(hào)量,就導(dǎo)致了死鎖。
發(fā)明內(nèi)容
本發(fā)明要解決上述現(xiàn)有任務(wù)級(jí)資源管理存在的缺陷,提供一種微內(nèi)核嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)級(jí)資源管理方法。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案。這種微內(nèi)核嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)級(jí)資源管理方法,把微內(nèi)核嵌入式實(shí)時(shí)操作系統(tǒng)中的資源分為兩部分內(nèi)部資源和外部資源。這兩者的作用是一致的,根本區(qū)別就是內(nèi)部資源是不需要通過調(diào)用系統(tǒng)API來獲取和釋放的,對(duì)于用戶來說,內(nèi)部資源使用方便,開銷小。外部資源需要通過調(diào)用系統(tǒng)特定的應(yīng)用程序接口(API)來獲取和釋放,在功能較為復(fù)雜的任務(wù)中使用比較合適。一個(gè)任務(wù)最多只能占有一個(gè)內(nèi)部資源。當(dāng)任務(wù)進(jìn)入運(yùn)行狀態(tài)的時(shí)候,資源被自動(dòng)的獲?。划?dāng)任務(wù)自動(dòng)結(jié)束或主動(dòng)發(fā)生強(qiáng)制調(diào)度并退出運(yùn)行狀態(tài)時(shí),其內(nèi)部資源被自動(dòng)的釋放。一個(gè)任務(wù)可以占有多個(gè)外部資源,占有和釋放外部資源必須按照先進(jìn)后出(FILO)的順序進(jìn)行。
本發(fā)明用資源優(yōu)先級(jí)置頂方案解決優(yōu)先級(jí)反轉(zhuǎn)和死鎖的問題。在資源優(yōu)先級(jí)置頂方案中,系統(tǒng)給每一個(gè)資源(包括內(nèi)部和外部)分配一個(gè)優(yōu)先級(jí),該優(yōu)先級(jí)等于需要使用該資源的所有任務(wù)的最高優(yōu)先級(jí)。
本發(fā)明實(shí)現(xiàn)的具體步驟如下一、建立優(yōu)先級(jí)的就緒隊(duì)列;二、設(shè)計(jì)任務(wù)控制塊(TCB),增加外部資源的指針和內(nèi)部資源的優(yōu)先級(jí)以及內(nèi)部資源使用時(shí)所需保存的任務(wù)控制塊指針;三、建立任務(wù)控制塊數(shù)組以及用其優(yōu)先級(jí)索引的任務(wù)控制塊指針數(shù)組;四、設(shè)計(jì)外部資源的控制塊(RCB),包括優(yōu)先級(jí)、外部資源鏈表、所需保存的任務(wù)控制塊指針;五、設(shè)計(jì)內(nèi)部資源的獲取和釋放功能。如果任務(wù)T1試圖獲取內(nèi)部資源R1,則在T1運(yùn)行起來前將內(nèi)部資源R1的優(yōu)先級(jí)放入就緒隊(duì)列,接著將R1的優(yōu)先級(jí)對(duì)應(yīng)的TCB指針數(shù)組中的值保存在T1的TCB中,最后將R1的優(yōu)先級(jí)對(duì)應(yīng)的TCB指針數(shù)組中的值置為T1。當(dāng)任務(wù)T1釋放內(nèi)部資源R1時(shí),先將在T1的TCB中保存的TCB恢復(fù),然后重新設(shè)置就緒隊(duì)列;六、設(shè)計(jì)外部資源的應(yīng)用程序接口,主要實(shí)現(xiàn)獲取和釋放功能。當(dāng)任務(wù)T2獲取外部資源R2時(shí),將R2的優(yōu)先級(jí)放入就緒隊(duì)列,接著將R2的優(yōu)先級(jí)對(duì)應(yīng)的TCB指針數(shù)組中的值保存在R2的RCB中,然后將R2的優(yōu)先級(jí)對(duì)應(yīng)的TCB指針數(shù)組中的值置為T2,最后把其外部資源R2和T2原有的資源組成堆棧鏈表,并把堆棧鏈表頭保存在T2的TCB中。當(dāng)任務(wù)T2釋放資源R2時(shí),先將R2從其堆棧鏈表中刪除,并重置T2的TCB中的資源,接著將R2的RCB中保存的TCB恢復(fù),最后設(shè)置就緒隊(duì)列。
在本發(fā)明中,當(dāng)多任務(wù)(T1,T2,T3)試圖占有同一內(nèi)部資源R1時(shí),當(dāng)?shù)蛢?yōu)先級(jí)任務(wù)T1開始運(yùn)行后,將T1本身的優(yōu)先級(jí)置為資源R1的優(yōu)先級(jí)。其他想試圖占有資源R1的任務(wù)(T2、T3)因?yàn)閮?yōu)先級(jí)都低于或等于資源R1的優(yōu)先級(jí)(任務(wù)T1的運(yùn)行的優(yōu)先級(jí)),所以在任務(wù)T1釋放資源前其他任務(wù)無法搶占它,而只有當(dāng)任務(wù)T1自動(dòng)結(jié)束或主動(dòng)發(fā)生強(qiáng)制調(diào)度并退出運(yùn)行狀態(tài)時(shí)才釋放內(nèi)部資源R1,也就是只有任務(wù)T1主動(dòng)結(jié)束(即釋放內(nèi)部資源)后,其他想占有資源R1的任務(wù)T2和T3才有可能運(yùn)行從而獲得資源R1。
當(dāng)多任務(wù)(T1,T2,T3)試圖占有同一外部資源R2時(shí),低優(yōu)先級(jí)任務(wù)T1開始運(yùn)行后,當(dāng)T1調(diào)用相應(yīng)的應(yīng)用程序接口(API)來獲得資源R2后,任務(wù)T1的優(yōu)先級(jí)為R2的優(yōu)先級(jí)。當(dāng)任務(wù)T1占有資源后,其他想試圖占有相同資源R2的任務(wù)因?yàn)槠鋬?yōu)先級(jí)低于任務(wù)T1的運(yùn)行的優(yōu)先級(jí),并且T1不能因?yàn)榈却渌录l(fā)生而進(jìn)入等待狀態(tài),所以在任務(wù)T1主動(dòng)釋放資源前其他想占有資源R2的任務(wù)無法搶占它,這就避免了傳統(tǒng)任務(wù)級(jí)資源管理方法所引起的優(yōu)先級(jí)反轉(zhuǎn)和死鎖的發(fā)生。
本發(fā)明具有如下優(yōu)點(diǎn)1.本發(fā)明把資源分成內(nèi)部資源和外部資源,使對(duì)資源的使用和管理更加方便。如果某個(gè)任務(wù)只有在獲取資源后才有意義,就可以把該任務(wù)所要獲取的資源設(shè)置為內(nèi)部資源,當(dāng)該任務(wù)開始運(yùn)行就占有此資源,任務(wù)主動(dòng)結(jié)束就釋放該資源,任務(wù)本身就不需要再顯示調(diào)用應(yīng)用程序接口來獲取和釋放資源。
2.在本發(fā)明中,實(shí)現(xiàn)任務(wù)級(jí)資源管理的所需要的時(shí)間開銷和空間開銷很少。在使用內(nèi)部資源的時(shí)候基本上和無資源時(shí)任務(wù)執(zhí)行的開銷相接近,非常適合微內(nèi)核嵌入式實(shí)時(shí)操作系統(tǒng)。
3.本發(fā)明中的任務(wù)級(jí)資源管理可以和具體調(diào)度策略相結(jié)合,可以靈活運(yùn)用于各種調(diào)度場合,比如全搶占調(diào)度、混合搶占調(diào)度、非全搶占調(diào)度。
4.本發(fā)明有效的防止了任務(wù)級(jí)資源管理中存在的優(yōu)先級(jí)反轉(zhuǎn)和死鎖的發(fā)生。
圖1現(xiàn)有技術(shù)資源管理中的優(yōu)先級(jí)反轉(zhuǎn)的示例;圖2現(xiàn)有技術(shù)資源管理中的死鎖示例;圖3本發(fā)明任務(wù)狀態(tài)以及狀態(tài)之間的轉(zhuǎn)換關(guān)系;圖4本發(fā)明內(nèi)部資源的主動(dòng)獲取流程圖;圖5本發(fā)明任務(wù)級(jí)外部資源的獲取流程圖;圖6本發(fā)明內(nèi)部資源的主動(dòng)釋放流程圖;圖7本發(fā)明任務(wù)級(jí)外部資源的釋放流程圖;圖8本發(fā)明任務(wù)級(jí)外部資源管理的例子;圖9本發(fā)明內(nèi)部資源管理的例子;具體實(shí)施方式
下面結(jié)合附圖和實(shí)例對(duì)本發(fā)明作進(jìn)一步介紹圖3指出任務(wù)的狀態(tài)以及狀態(tài)之間的轉(zhuǎn)換關(guān)系。任務(wù)狀態(tài)分為就緒、運(yùn)行、掛起、等待四個(gè)狀態(tài)。任務(wù)在就緒時(shí),如果其優(yōu)先級(jí)最高,則進(jìn)入運(yùn)行狀態(tài)。任務(wù)運(yùn)行時(shí),有三種狀態(tài)轉(zhuǎn)移情況1.當(dāng)任務(wù)由于等待某事件發(fā)生時(shí),該任務(wù)就進(jìn)入等待狀態(tài)。在等待狀態(tài)的任務(wù)如果其等待的事件發(fā)生,則進(jìn)入就緒狀態(tài);2.當(dāng)任務(wù)被其他高優(yōu)先級(jí)的任務(wù)搶占時(shí),該任務(wù)就進(jìn)入就緒狀態(tài);3.當(dāng)任務(wù)自己主動(dòng)結(jié)束時(shí),該任務(wù)就進(jìn)入掛起狀態(tài)。掛起的任務(wù)可以通過被激活而進(jìn)入就緒狀態(tài)。
就緒狀態(tài)的任務(wù)的優(yōu)先級(jí)都反映在系統(tǒng)的優(yōu)先級(jí)就緒隊(duì)列中。優(yōu)先級(jí)就緒隊(duì)列使用長整型數(shù)來表示,如果第n位為1表示第n個(gè)優(yōu)先級(jí)對(duì)應(yīng)的任務(wù)為就緒狀態(tài),而為0表示其對(duì)應(yīng)的任務(wù)不是就緒狀態(tài)。
運(yùn)行于MPC555平臺(tái)上的微內(nèi)核嵌入式實(shí)時(shí)操作系統(tǒng)主要包括任務(wù)模塊、資源模塊、中斷模塊、事件模塊、定時(shí)器模塊。任務(wù)模塊是操作系統(tǒng)的核心模塊,任務(wù)級(jí)資源管理功能的實(shí)現(xiàn)也是以任務(wù)模塊為基礎(chǔ)的。通過在任務(wù)控制塊TCB數(shù)組和TCB指針數(shù)組中增加相應(yīng)的屬性、設(shè)計(jì)特定的數(shù)據(jù)結(jié)構(gòu)來滿足任務(wù)級(jí)資源管理的需要,其中TCB指針數(shù)組使用優(yōu)先級(jí)索引是資源優(yōu)先級(jí)置頂方案實(shí)現(xiàn)的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。
圖4指出了本發(fā)明的內(nèi)部資源的自動(dòng)獲取的流程圖,具體如下1.找到優(yōu)先級(jí)最高的的任務(wù)控制塊HighPrioTCB,并得到其想占有的內(nèi)部資源R的優(yōu)先級(jí)RPrio;2.找到優(yōu)先級(jí)RPrio對(duì)應(yīng)的TCB指針,并將其保存到HighPrioTCB中;3.將RPrio索引的TCB指針數(shù)組中的值置為HighPrioTCB;4.最后將RPrio放入就緒隊(duì)列中。
5.改變當(dāng)前運(yùn)行的優(yōu)先級(jí)值。
設(shè)置完內(nèi)部資源獲得后的優(yōu)先級(jí)變化后,就可以啟動(dòng)該任務(wù)。
圖5指出了當(dāng)任務(wù)運(yùn)行后,對(duì)外部資源獲取的流程圖,具體如下1.找到將要獲取的外部資源R的控制塊RCB,并得到R的優(yōu)先級(jí)RPrio;2.把優(yōu)先級(jí)RPrio對(duì)應(yīng)的TCB指針保存到RCB中;3.把RPrio索引的TCB指針數(shù)組中的值置為當(dāng)前運(yùn)行的任務(wù)指針;4.將RPrio放入就緒隊(duì)列中;5.將RCB放入當(dāng)前運(yùn)行的任務(wù)已占有的外部資源堆棧鏈表的表頭;6.改變當(dāng)前運(yùn)行的優(yōu)先級(jí)值。
圖6指出了本發(fā)明的內(nèi)部資源的自動(dòng)釋放的流程圖,具體如下1.得到當(dāng)前任務(wù)占有的內(nèi)部資源的優(yōu)先級(jí)RPrio;2.將RPrio索引的TCB指針數(shù)組的值設(shè)定為保存在當(dāng)前運(yùn)行任務(wù)的TCB中的值;3.判斷RPrio對(duì)應(yīng)的任務(wù)是否已經(jīng)在就緒狀態(tài),如果不在就緒狀態(tài),就把該優(yōu)先級(jí)RPrio從就緒隊(duì)列中取出;4.把當(dāng)前運(yùn)行的優(yōu)先級(jí)恢復(fù)為當(dāng)前任務(wù)的優(yōu)先級(jí)。
釋放完內(nèi)部資源后,任務(wù)就可以進(jìn)入等待或掛起狀態(tài)。
圖7指出了本發(fā)明的任務(wù)級(jí)外部資源的釋放流程圖,具體如下1.從當(dāng)前任務(wù)的TCB中得到外部資源堆棧鏈表的表頭RCB,并得到其優(yōu)先級(jí)RPrio;2.將RPrio索引的TCB指針數(shù)組的值設(shè)定為保存在RCB中的值;3.判斷RPrio對(duì)應(yīng)的任務(wù)是否已經(jīng)在就緒狀態(tài),如果不在就緒狀態(tài),就把該優(yōu)先級(jí)RPrio從就緒隊(duì)列中取出;4.從TCB的外部資源堆棧鏈表中把RCB刪除;5.判斷TCB的外部資源堆棧鏈表是否為空,如果為空,把當(dāng)前運(yùn)行的優(yōu)先級(jí)恢復(fù)為當(dāng)前任務(wù)的優(yōu)先級(jí),否則將當(dāng)前運(yùn)行的優(yōu)先級(jí)置為TCB中外部資源堆棧鏈表表頭的優(yōu)先級(jí)。
圖8闡明了本發(fā)明針對(duì)于外部資源的具體應(yīng)用。任務(wù)T0優(yōu)先級(jí)最高,任務(wù)T4優(yōu)先級(jí)最低。任務(wù)T1和任務(wù)T4要訪問相同的外部資源。T4先占有外部資源,形成置頂優(yōu)先級(jí),此時(shí)T1、T2、T3都無法搶占T4,只有T0可以搶占,當(dāng)T0運(yùn)行結(jié)束后,此時(shí)的T4還占有資源,故又輪到T4運(yùn)行,等T4釋放資源后,其優(yōu)先級(jí)恢復(fù),此時(shí)在就緒狀態(tài)中具有最高優(yōu)先級(jí)的T1運(yùn)行,T1占有資源后,形成置頂優(yōu)先級(jí),等T1自動(dòng)釋放資源并結(jié)束后,T2、T3才能依次運(yùn)行。這就避免了優(yōu)先級(jí)反轉(zhuǎn)的出現(xiàn)。又由于占有外部資源的任務(wù)不能進(jìn)入等待狀態(tài),所有也避免了死鎖的發(fā)生。
圖9闡明了本發(fā)明針對(duì)于內(nèi)部資源的具體應(yīng)用。任務(wù)T0優(yōu)先級(jí)最高,任務(wù)T4優(yōu)先級(jí)最低。任務(wù)T2和任務(wù)T4要訪問相同的內(nèi)部資源。T4先占有內(nèi)部資源,形成置頂優(yōu)先級(jí),此時(shí)在就緒狀態(tài)的T1、T2、T3都無法搶占T4。T4因?yàn)榈却录﨓1而進(jìn)入等待狀態(tài)后,T4恢復(fù)原來的優(yōu)先級(jí),接著T1運(yùn)行,當(dāng)T0激活后,就搶占了T1而運(yùn)行,并設(shè)置了事件E1,使T4又進(jìn)入就緒狀態(tài)。當(dāng)T0運(yùn)行結(jié)束后,此時(shí)的T1優(yōu)先級(jí)最高,故進(jìn)入運(yùn)行狀態(tài)。當(dāng)T1主動(dòng)結(jié)束后,T2運(yùn)行,因?yàn)門2占有內(nèi)部資源,所以馬上進(jìn)入置頂優(yōu)先級(jí),等T2主動(dòng)結(jié)束后,T3、T4才依次運(yùn)行,T4運(yùn)行時(shí)又主動(dòng)占有內(nèi)部資源,形成優(yōu)先級(jí)置頂。這就避免了優(yōu)先級(jí)反轉(zhuǎn)和死鎖的發(fā)生。
權(quán)利要求
1.一種微內(nèi)核嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)級(jí)資源管理方法,其特征是把微內(nèi)核嵌入式實(shí)時(shí)操作系統(tǒng)中的資源分為兩部分不需要通過調(diào)用系統(tǒng)API來獲取和釋放的內(nèi)部資源,通過調(diào)用應(yīng)用程序接口來獲取和釋放的外部資源;一個(gè)任務(wù)最多只能占有一個(gè)內(nèi)部資源,當(dāng)任務(wù)進(jìn)入運(yùn)行狀態(tài)的時(shí)候,資源被自動(dòng)的獲取,當(dāng)任務(wù)自動(dòng)結(jié)束或主動(dòng)發(fā)生強(qiáng)制調(diào)度并退出運(yùn)行狀態(tài)時(shí),其內(nèi)部資源被自動(dòng)的釋放;一個(gè)任務(wù)可以占有多個(gè)外部資源,占有和釋放外部資源必須按照先進(jìn)后出的順序進(jìn)行;系統(tǒng)給每一個(gè)內(nèi)部資源或外部資源分配一個(gè)優(yōu)先級(jí),該優(yōu)先級(jí)等于需要使用該資源的所有任務(wù)的最高優(yōu)先級(jí)。
2.根據(jù)權(quán)利要求1所述的微內(nèi)核嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)級(jí)資源管理方法,其特征在于具體步驟如下1)、建立優(yōu)先級(jí)的就緒隊(duì)列;2)、設(shè)計(jì)任務(wù)控制塊,增加外部資源的指針和內(nèi)部資源的優(yōu)先級(jí)以及內(nèi)部資源使用時(shí)所需保存的任務(wù)控制塊指針;3)、建立任務(wù)控制塊數(shù)組以及用其優(yōu)先級(jí)索引的任務(wù)控制塊指針數(shù)組;4)、設(shè)計(jì)外部資源的控制塊,包括優(yōu)先級(jí)、外部資源鏈表、所需保存的任務(wù)控制塊指針;5)、設(shè)計(jì)內(nèi)部資源的獲取和釋放功能如果任務(wù)T1試圖獲取內(nèi)部資源R1,則在T1運(yùn)行起來前將內(nèi)部資源R1的優(yōu)先級(jí)放入就緒隊(duì)列,接著將R1的優(yōu)先級(jí)對(duì)應(yīng)的任務(wù)控制塊指針數(shù)組中的值保存在T1的任務(wù)控制塊中,最后將R1的優(yōu)先級(jí)對(duì)應(yīng)的任務(wù)控制塊指針數(shù)組中的值置為T1;當(dāng)任務(wù)T1釋放內(nèi)部資源R1時(shí),先將在T1的任務(wù)控制塊中保存的任務(wù)控制塊恢復(fù),然后重新設(shè)置就緒隊(duì)列;6)、設(shè)計(jì)外部資源的獲取和釋放功能的應(yīng)用程序接口當(dāng)任務(wù)T2獲取外部資源R2時(shí),將R2的優(yōu)先級(jí)放入就緒隊(duì)列,接著將R2的優(yōu)先級(jí)對(duì)應(yīng)的任務(wù)控制塊指針數(shù)組中的值保存在R2的外部資源的控制塊中,然后將R2的優(yōu)先級(jí)對(duì)應(yīng)的任務(wù)控制塊指針數(shù)組中的值置為T2,最后把其外部資源R2和T2原有的資源組成堆棧鏈表,并把堆棧鏈表頭保存在T2的任務(wù)控制塊中;當(dāng)任務(wù)T2釋放資源R2時(shí),先將R2從其堆棧鏈表中刪除,并重置T2的任務(wù)控制塊中的資源,接著將R2的外部資源的控制塊中保存的任務(wù)控制塊恢復(fù),最后設(shè)置就緒隊(duì)列。
3.根據(jù)權(quán)利要求1或2所述的微內(nèi)核嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)級(jí)資源管理方法,其特征在于當(dāng)多任務(wù)T1,T2,T3試圖占有同一內(nèi)部資源R1時(shí),當(dāng)?shù)蛢?yōu)先級(jí)任務(wù)T1開始運(yùn)行后,將T1本身的優(yōu)先級(jí)置為資源R1的優(yōu)先級(jí),其他想試圖占有資源R1的任務(wù)T2、T3因?yàn)閮?yōu)先級(jí)都低于或等于資源R1的優(yōu)先級(jí),所以在任務(wù)T1釋放資源前其他任務(wù)無法搶占它,而只有當(dāng)任務(wù)T1自動(dòng)結(jié)束或主動(dòng)發(fā)生強(qiáng)制調(diào)度并退出運(yùn)行狀態(tài)時(shí)才釋放內(nèi)部資源R1,也就是只有任務(wù)T1主動(dòng)結(jié)束,即釋放內(nèi)部資源后,其他想占有資源R1的任務(wù)T2和T3才有可能運(yùn)行從而獲得資源R1。
4.根據(jù)權(quán)利要求1或2所述的微內(nèi)核嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)級(jí)資源管理方法,其特征在于當(dāng)多任務(wù)T1,T2,T3試圖占有同一外部資源R2時(shí),低優(yōu)先級(jí)任務(wù)T1開始運(yùn)行后,當(dāng)T1調(diào)用相應(yīng)的應(yīng)用程序接口來獲得資源R2后,任務(wù)T1的優(yōu)先級(jí)為R2的優(yōu)先級(jí);當(dāng)任務(wù)T1占有資源后,其他想試圖占有相同資源R2的任務(wù)因?yàn)槠鋬?yōu)先級(jí)低于任務(wù)T1的運(yùn)行的優(yōu)先級(jí),并且T1不能因?yàn)榈却渌录l(fā)生而進(jìn)入等待狀態(tài),所以在任務(wù)T1主動(dòng)釋放資源前其他想占有資源R2的任務(wù)無法搶占它。
全文摘要
本發(fā)明涉及一種微內(nèi)核嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)級(jí)資源管理方法,把資源分為兩部分內(nèi)部資源和外部資源,內(nèi)部資源是不需要通過調(diào)用系統(tǒng)API來獲取和釋放的;外部資源需要通過調(diào)用系統(tǒng)特定的應(yīng)用程序接口來獲取和釋放,在功能較為復(fù)雜的任務(wù)中使用比較合適。一個(gè)任務(wù)最多只能占有一個(gè)內(nèi)部資源。當(dāng)任務(wù)進(jìn)入運(yùn)行狀態(tài)的時(shí)候,資源被自動(dòng)的獲?。划?dāng)任務(wù)自動(dòng)結(jié)束或主動(dòng)發(fā)生強(qiáng)制調(diào)度并退出運(yùn)行狀態(tài)時(shí),其內(nèi)部資源被自動(dòng)的釋放。一個(gè)任務(wù)可以占有多個(gè)外部資源,占有和釋放外部資源必須按照先進(jìn)后出的順序進(jìn)行。本發(fā)明的優(yōu)點(diǎn)使對(duì)資源的使用和管理更加方便,實(shí)現(xiàn)任務(wù)級(jí)資源管理的所需要的時(shí)間開銷和空間開銷很少,資源管理可以和具體調(diào)度策略相結(jié)合。
文檔編號(hào)G06F9/50GK1702623SQ20051005008
公開日2005年11月30日 申請(qǐng)日期2005年6月13日 優(yōu)先權(quán)日2005年6月13日
發(fā)明者吳朝暉, 趙民德, 厲蔣, 李紅, 潘杭平, 孫潔 申請(qǐng)人:浙江大學(xué)