專利名稱:一種嵌入式實(shí)時(shí)操作系統(tǒng)的混合調(diào)度方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)技術(shù)領(lǐng)域,更具體地說(shuō),涉及一種嵌入式
實(shí)時(shí)操作系統(tǒng)的混合調(diào)度方法。
背景技術(shù):
隨著計(jì)算機(jī)技術(shù)的迅猛發(fā)展和互聯(lián)網(wǎng)技術(shù)的廣泛應(yīng)用,嵌入式系統(tǒng)(Embedded System)發(fā)揮著越來(lái)越重要的作用,它被廣泛應(yīng)用于制造工業(yè)、過(guò)程控制、通信、儀器、儀表、 汽車、船舶、航空航天、軍事裝備、消費(fèi)類產(chǎn)品等方面。嵌入式系統(tǒng)被定義為,以應(yīng)用為中心, 以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟件硬件可裁減,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能,可靠性,成本,體積,功耗等 嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。 正因?yàn)榍度胧较到y(tǒng)的應(yīng)用領(lǐng)域日益擴(kuò)大,功能需求也逐漸增長(zhǎng),促使人們?cè)谇度?式系統(tǒng)中引入嵌入式操作系統(tǒng)。具有實(shí)時(shí)性的嵌入式操作系統(tǒng)就是嵌入式實(shí)時(shí)操作系統(tǒng) (Embedded Real Time Operating System, ERTOS)。其操作的正確性不僅依賴于邏輯設(shè)計(jì) 的正確程度,而且跟這些操作進(jìn)行的時(shí)間有關(guān)。也就是說(shuō),實(shí)時(shí)操作系統(tǒng)除了要滿足應(yīng)用的 功能需求以外,更重要的是還要滿足應(yīng)用提出的實(shí)時(shí)性要求。其首要任務(wù)是一定時(shí)間限制 下,調(diào)動(dòng)一切可利用的資源在完成實(shí)時(shí)控制任務(wù)。嵌入式實(shí)時(shí)操作系統(tǒng)由于受到應(yīng)用的需 要和硬件條件的限制,具有可固態(tài)化、體積小、高效、高可靠性、高實(shí)時(shí)性等特點(diǎn)。
嵌入式實(shí)時(shí)操作系統(tǒng)的實(shí)時(shí)性和多任務(wù)能力在很大程度上取決于它的任務(wù)調(diào)度 算法。從調(diào)度方式上來(lái)講,可分為可搶占式調(diào)度和不可搶占式(即合作式)調(diào)度。
在搶占式(Preemptive)調(diào)度中,目前正在運(yùn)行的任務(wù)可以被別的更緊迫和更重 要的任務(wù)中斷。同時(shí),被搶占的任務(wù)在未來(lái)可以恢復(fù)運(yùn)行,且不會(huì)影響到任務(wù)的整體時(shí)限約 束。搶占式調(diào)度的優(yōu)點(diǎn)是比較靈活,其任務(wù)級(jí)的響應(yīng)時(shí)間得以最優(yōu)化,資源的利用率比較 高,但由于經(jīng)常出現(xiàn)的上下文切換(ContextSwitch)使得其系統(tǒng)開(kāi)銷較大,可預(yù)測(cè)性比較 低。 圖1顯示了兩個(gè)不同優(yōu)先級(jí)任務(wù)和一個(gè)中斷服務(wù)程序(ISR, InterruptService
Routine)的搶占式調(diào)度的執(zhí)行情況。首先,當(dāng)?shù)蛢?yōu)先級(jí)的任務(wù)正在運(yùn)行時(shí),ISR搶占低優(yōu)先
級(jí)任務(wù)進(jìn)入運(yùn)行態(tài),它使一個(gè)更高優(yōu)先級(jí)的任務(wù)進(jìn)入就緒態(tài),所以在ISR執(zhí)行完成后,調(diào)度
器選擇該高優(yōu)先級(jí)任務(wù)進(jìn)入運(yùn)行,這樣就推遲了恢復(fù)執(zhí)行低優(yōu)先級(jí)任務(wù)的操作。 MicroC/0S II以及大多數(shù)商業(yè)實(shí)時(shí)內(nèi)核都采用搶占式調(diào)度,MicroC/OS II是當(dāng)前
得到廣泛應(yīng)用免費(fèi)且公開(kāi)源碼的嵌入式操作系統(tǒng),它是基于優(yōu)先級(jí)可搶占式多進(jìn)程系統(tǒng),
支持64個(gè)優(yōu)先級(jí),是一個(gè)非常典型的采用搶占式調(diào)度的嵌入式實(shí)時(shí)操作系統(tǒng)。 而非搶占式調(diào)度,即合作式(Cooperative)調(diào)度,不允許正在運(yùn)行的任務(wù)被別的
任務(wù)中斷,任務(wù)一旦占有了處理器便會(huì)一直運(yùn)行直至完成。比較適合于任務(wù)運(yùn)行時(shí)間都比
較短的系統(tǒng)。其優(yōu)點(diǎn)是省去了進(jìn)行上下文切換的開(kāi)銷,在任意時(shí)刻只有一個(gè)任務(wù)是活動(dòng)的,
而且該任務(wù)運(yùn)行直到完成,具有更好的可預(yù)測(cè)性,可靠性,更易于測(cè)試,但調(diào)度沒(méi)有搶占式
調(diào)度那樣靈活,對(duì)資源的利用率也相對(duì)較低。
圖2顯示了兩個(gè)不同優(yōu)先級(jí)任務(wù)和一個(gè)ISR的合作式調(diào)度的執(zhí)行情況。首先,當(dāng) 低優(yōu)先級(jí)任務(wù)正在運(yùn)行時(shí),ISR搶占低優(yōu)先級(jí)任務(wù)進(jìn)入運(yùn)行態(tài),它使一個(gè)更高優(yōu)先級(jí)的任務(wù) 進(jìn)入就緒態(tài),ISR執(zhí)行完成后恢復(fù)被搶占的低優(yōu)先級(jí)任務(wù),直到該任務(wù)執(zhí)行完畢后,調(diào)度器 才運(yùn)行處于就緒態(tài)的高優(yōu)先級(jí)任務(wù)。 Michael J. Pont提出一種時(shí)間觸發(fā)的合作式(TTC,Time-TriggeredCooperative) 調(diào)度器。該調(diào)度器中,一個(gè)時(shí)鐘節(jié)拍的時(shí)間間隔的數(shù)量級(jí)一般為毫秒(ms),嵌入式操作系 統(tǒng)的任務(wù)都可在一個(gè)時(shí)鐘節(jié)拍的時(shí)間間隔內(nèi)運(yùn)行完畢。它由CPU定時(shí)計(jì)數(shù)器產(chǎn)生,系統(tǒng)每 經(jīng)過(guò)一個(gè)時(shí)鐘節(jié)拍的時(shí)間間隔,就產(chǎn)生一次時(shí)間溢出中斷,中斷服務(wù)程序檢測(cè)此時(shí)是否有 任務(wù)處于就緒狀態(tài),若檢測(cè)到則調(diào)用該任務(wù)。該合作式調(diào)度器實(shí)現(xiàn)簡(jiǎn)單,更具可靠性和安全 性。但是這種調(diào)度方式對(duì)外部事件的實(shí)時(shí)響應(yīng)能力比較弱,而且調(diào)度方式?jīng)]有搶占式調(diào)度 那樣靈活,對(duì)資源的利用率也相對(duì)較低。 嵌入式系統(tǒng)中,存在兩種本質(zhì)上不同的任務(wù)觸發(fā)方式事件觸發(fā)和時(shí)間觸發(fā)。事件 觸發(fā)方式往往使用多級(jí)中斷實(shí)現(xiàn),其發(fā)生時(shí)間具有隨機(jī)性;而時(shí)間觸發(fā)方式則不同,它是通 過(guò)一個(gè)全局時(shí)鐘進(jìn)行驅(qū)動(dòng)的,由于它在時(shí)間上和功能上都是確定的,因此其可預(yù)測(cè)性比較 高。兩種不同的任務(wù)調(diào)度方式加上兩種不同的任務(wù)觸發(fā)方式,所以嵌入式系統(tǒng),存在4種類 型的任務(wù),分別是時(shí)間觸發(fā)的合作式任務(wù),時(shí)間觸發(fā)的搶占式任務(wù),事件觸發(fā)的的合作式 任務(wù)和事件觸發(fā)的的搶占式任務(wù)。 雖然Michael J. Pont提出的TTC調(diào)度器(時(shí)間觸發(fā)的合作式調(diào)度)可以有效地 減少嵌入式系統(tǒng)中的任務(wù)抖動(dòng)現(xiàn)象,可預(yù)測(cè)性高,實(shí)現(xiàn)簡(jiǎn)單,但是這種調(diào)度方式對(duì)外部事件 的實(shí)時(shí)響應(yīng)能力比較弱,而且調(diào)度方式?jīng)]有搶占式調(diào)度那樣靈活,對(duì)資源的利用率也相對(duì) 較低。 采用搶占式調(diào)度方式的MicroC/OS II的實(shí)時(shí)響應(yīng)能力比較理想,但不能在某個(gè)特 定時(shí)間內(nèi)準(zhǔn)確執(zhí)行特定的任務(wù),時(shí)間確定性較差,經(jīng)常出現(xiàn)的上下文切換使得系統(tǒng)開(kāi)銷較 大,而且可預(yù)測(cè)性比較低,基于事件觸發(fā)的搶占式調(diào)度器可靠性不如時(shí)間觸發(fā)的合作式調(diào)度。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問(wèn)題在于,針對(duì)現(xiàn)有技術(shù)的上述缺陷,提供一種擁有時(shí)間觸 發(fā)合作式調(diào)度系統(tǒng)的高可預(yù)測(cè)性和可靠性,也擁有事件觸發(fā)搶占式調(diào)度系統(tǒng)的高實(shí)時(shí)響應(yīng) 能力的嵌入式實(shí)時(shí)操作系統(tǒng)的混合調(diào)度方法。 為實(shí)現(xiàn)以上目的,本發(fā)明提供了一種嵌入式實(shí)時(shí)操作系統(tǒng)的混合調(diào)度方法,包括 任務(wù)調(diào)度前資源配置和任務(wù)調(diào)度,其中,所述任務(wù)調(diào)度包括以下步驟
通過(guò)事件觸發(fā)或時(shí)間觸發(fā)的方式使任務(wù)就緒; 根據(jù)就緒表和就緒組查找優(yōu)先級(jí)判定表,獲得當(dāng)前就緒的最高任務(wù)優(yōu)先級(jí);
根據(jù)所述當(dāng)前就緒的最高任務(wù)優(yōu)先級(jí),獲得所述就緒的最高優(yōu)先級(jí)任務(wù)的任務(wù)控 制塊結(jié)構(gòu)體,并判斷該任務(wù)的類別; 當(dāng)所述就緒的最高優(yōu)先級(jí)任務(wù)是合作式任務(wù)時(shí),執(zhí)行該合作式任務(wù),所述合作式 任務(wù)執(zhí)行完畢后,清除其在就緒表和就緒組中的位置,再根據(jù)就緒表和就緒組查找優(yōu)先級(jí) 判定表,獲得當(dāng)前就緒的最高任務(wù)優(yōu)先級(jí)。
5
本發(fā)明所述的混合調(diào)度方法,其中,所述任務(wù)調(diào)度前資源配置具體包括如下步 驟 創(chuàng)建任務(wù);建立任務(wù)控制塊結(jié)構(gòu)體;建立任務(wù)控制塊地址數(shù)組;建立并初始化就 緒表和就緒組;建立并初始化位掩碼表;建立并初始化優(yōu)先級(jí)判定表;建立并初始化中斷 優(yōu)先級(jí)表;安裝時(shí)鐘節(jié)拍中斷。 本發(fā)明所述的混合調(diào)度方法,其中,所述方法把中斷程序以任務(wù)對(duì)待,并與其他任 務(wù)一起分配優(yōu)先級(jí)。 本發(fā)明所述的混合調(diào)度方法,其中,所述使任務(wù)就緒具體包括 通過(guò)通信與同步機(jī)制或因中斷使事件觸發(fā)的任務(wù)就緒,或?qū)r(shí)間觸發(fā)的任務(wù)對(duì)應(yīng) 的任務(wù)控制塊中的延遲時(shí)間減1,當(dāng)延遲時(shí)間減為0時(shí),使所述時(shí)間觸發(fā)的任務(wù)就緒。
本發(fā)明所述的混合調(diào)度方法,其中,所述使任務(wù)就緒具體是指 將就緒表中對(duì)應(yīng)該任務(wù)優(yōu)先級(jí)的位置為1,而且在就緒組中對(duì)應(yīng)任務(wù)所在組的位 置為l。 本發(fā)明所述的混合調(diào)度方法,其中,所述方法還包括 執(zhí)行時(shí)鐘節(jié)拍中斷程序時(shí),檢查正在運(yùn)行的合作式任務(wù)是否被時(shí)鐘節(jié)拍中斷所中 斷,是則根據(jù)用戶需求選擇處理選項(xiàng),所述處理選項(xiàng)在創(chuàng)建任務(wù)時(shí)設(shè)置,其包括繼續(xù)執(zhí)行未 完成的任務(wù),放棄執(zhí)行未完成的任務(wù)或重新執(zhí)行未完成的任務(wù)。
本發(fā)明所述的混合調(diào)度方法,其中,所述方法還包括以下步驟 在所述合作式任務(wù)執(zhí)行完畢后,檢查在所述合作式任務(wù)執(zhí)行期間是否有中斷事件 觸發(fā)的任務(wù)請(qǐng)求執(zhí)行,在有中斷事件觸發(fā)的任務(wù)請(qǐng)求執(zhí)行時(shí),使所請(qǐng)求的事件觸發(fā)的任務(wù) 就緒。
本發(fā)明所述的混合調(diào)度方法,其中,所述檢查是否有中斷事件請(qǐng)求發(fā)生具體步驟是
軟件查找在合作式任務(wù)運(yùn)行過(guò)程中所發(fā)生的中斷,利用所得到的中斷源編號(hào),在 所述中斷優(yōu)先級(jí)表中查找所對(duì)應(yīng)的任務(wù)優(yōu)先級(jí),利用所得到的優(yōu)先級(jí)使對(duì)應(yīng)任務(wù)就緒。
本發(fā)明所述的混合調(diào)度方法,其中,所述方法還包括以下步驟 將所述檢查中斷事件的時(shí)間設(shè)置為固定時(shí)間,合作式任務(wù)執(zhí)行完畢后,比較固定 時(shí)間與時(shí)鐘節(jié)拍剩余間隔,若前者比較小,則執(zhí)行該檢查功能,否則放棄執(zhí)行檢查功能;
在執(zhí)行該檢查功能時(shí),如果所述檢查功能運(yùn)行時(shí)間超過(guò)所述固定時(shí)間,立即執(zhí)行 任務(wù)調(diào)度。 本發(fā)明所述的混合調(diào)度方法,其中,所述方法還包括以下步驟當(dāng)就緒的最高優(yōu)先 級(jí)任務(wù)是搶占式任務(wù)時(shí),運(yùn)行最高優(yōu)先級(jí)的搶占式任務(wù)。 本發(fā)明的有益效果是,通過(guò)把ISR以任務(wù)對(duì)待,并與其他任務(wù)一起分配優(yōu)先級(jí),同 時(shí)復(fù)合利用時(shí)間觸發(fā)與事件觸發(fā)架構(gòu)和采用搶占式與合作式任務(wù)混合調(diào)度的方式,得到一 種混合調(diào)度方法。該混合調(diào)度方法既擁有合作式調(diào)度系統(tǒng)的高可預(yù)測(cè)性和可靠性,也擁有 搶占式調(diào)度系統(tǒng)的高實(shí)時(shí)響應(yīng)能力的優(yōu)點(diǎn),通過(guò)控制兩種不同調(diào)度方式的任務(wù)數(shù)目,充分 利用系統(tǒng)資源,有效控制系統(tǒng)開(kāi)銷。
圖1是現(xiàn)有技術(shù)中搶占式調(diào)度的執(zhí)行情況示意 圖2是現(xiàn)有技術(shù)中合作式調(diào)度的執(zhí)行情況示意圖; 圖3是本發(fā)明實(shí)施例提供的TCB雙向鏈表與TCB地址的關(guān)系示意圖; 圖4是本發(fā)明實(shí)施例提供的就緒組與就緒表的關(guān)系示意圖; 圖5是本發(fā)明實(shí)施例提供的時(shí)鐘節(jié)拍中斷流程圖。
具體實(shí)施例方式
下面結(jié)合
,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)描述。 本發(fā)明實(shí)施例中將執(zhí)行所述混合調(diào)度方法的程序虛擬稱為一混合調(diào)度器。 本發(fā)明實(shí)施例主要包括兩大步驟,即任務(wù)調(diào)度的前期準(zhǔn)備和任務(wù)調(diào)度,下面分別
予以詳細(xì)描述。 任務(wù)調(diào)度的前期準(zhǔn)備。首先,創(chuàng)建任務(wù),為每個(gè)任務(wù)建立任務(wù)控制塊(TaskControl Block, TCB)結(jié)構(gòu)體,并將所有的TCB連接成TCB雙向鏈表,同時(shí),建立TCB地址數(shù)組 TCBPrioTbl[LowestPrio+l]。如圖3所示,圖中介紹了 TCB地址數(shù)組與TCB雙向鏈表之間 的關(guān)系。TCB地址數(shù)組是存放所有TCB地址的數(shù)組,數(shù)組的下標(biāo)對(duì)應(yīng)任務(wù)的優(yōu)先級(jí),數(shù)組的 大小取決于最低的任務(wù)優(yōu)先級(jí)LowestPrio,任務(wù)優(yōu)先級(jí)范圍一般為0 63,即64個(gè)任務(wù)。 所以TCB地址數(shù)組的大小是LowestPrio+l,它的每個(gè)元素均指向?qū)?yīng)TCB結(jié)構(gòu)體的入口地 址,也就是任務(wù)堆棧指針,以方便低級(jí)編程語(yǔ)言對(duì)TCB的操作。 每個(gè)TCB結(jié)構(gòu)體對(duì)應(yīng)一個(gè)任務(wù),當(dāng)一個(gè)任務(wù)創(chuàng)建后,該任務(wù)對(duì)應(yīng)TCB隨之確定。TCB 中的每個(gè)變量隨之確定,調(diào)度器對(duì)任務(wù)的操作只能通過(guò)對(duì)TCB的操作實(shí)現(xiàn)。任務(wù)的TCB結(jié) 構(gòu)體中包括延遲時(shí)間、執(zhí)行周期、任務(wù)類型和優(yōu)先級(jí),這些變量在任務(wù)調(diào)度過(guò)程中是必不可 少的。事件觸發(fā)任務(wù)的TCB結(jié)構(gòu)體中延遲時(shí)間和執(zhí)行周期一般為0 ;時(shí)間觸發(fā)任務(wù)的TCB結(jié) 構(gòu)體中的延遲時(shí)間表示該任務(wù)延遲多少個(gè)時(shí)鐘節(jié)拍后再執(zhí)行,執(zhí)行周期表示時(shí)間觸發(fā)的任 務(wù)每隔多少個(gè)時(shí)鐘節(jié)拍執(zhí)行一次。任務(wù)類型如背景技術(shù)中所述,一般分為4種類型的任務(wù), 它們分別是時(shí)間觸發(fā)的合作式任務(wù),時(shí)間觸發(fā)的搶占式任務(wù),事件觸發(fā)的的合作式任務(wù)和 事件觸發(fā)的的搶占式任務(wù)。任務(wù)的優(yōu)先級(jí)是一個(gè)8位的無(wú)符號(hào)變量,它是任務(wù)是否存在的 重要標(biāo)識(shí),每個(gè)任務(wù)對(duì)應(yīng)一個(gè)優(yōu)先級(jí),該值范圍一般是0 63,即總共有64個(gè)優(yōu)先級(jí)不同的 任務(wù)。 一般地,優(yōu)先級(jí)0是最高任務(wù)優(yōu)先級(jí),優(yōu)先級(jí)63是最低任務(wù)優(yōu)先級(jí),其他任務(wù)優(yōu)先級(jí) 高低以此類推。每個(gè)TCB結(jié)構(gòu)體用*Next和*Prev指針鏈接在一起,構(gòu)成一個(gè)雙向鏈表,以 提高查找效率。 然后,建立并初始化就緒表和就緒組,如它們可以分別表示為
就緒表墜igned char 0SRdyTbl [LowestPrio/8+l];
就緒組墜igned char 0SRdyGrp。 其中就緒表的大小由所有任務(wù)中最低的任務(wù)優(yōu)先級(jí)來(lái)決定,每個(gè)元素是一個(gè)8位 的變量,就緒表以8個(gè)優(yōu)先級(jí)為一組,即為就緒表的一個(gè)元素,其中一個(gè)優(yōu)先級(jí)對(duì)應(yīng)一個(gè)任 務(wù),如圖4所示。該就緒表的大小為64,有8個(gè)元素,即分為8組,每組就是一個(gè)8位變量。 方格中的數(shù)字表示對(duì)應(yīng)任務(wù)的優(yōu)先級(jí),按照從右向左的順序遞增排列。任務(wù)的優(yōu)先級(jí)是一 個(gè)8位的無(wú)符號(hào)變量,其低3位用于確定任務(wù)在就緒表中的水平位置,即X方向,其高3位 用于確定任務(wù)在就緒表中的垂直位置,即Y方向。例如,某任務(wù)的優(yōu)先級(jí)是35,那么它對(duì)應(yīng) 的二進(jìn)制值為100011,則其X坐標(biāo)為3, Y坐標(biāo)為4,所以對(duì)應(yīng)就緒表中從上往下數(shù)第5行,unsigned char const OSMapTbl[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,
優(yōu)先級(jí)判定表的大小是256,定義優(yōu)先級(jí)判定表為unsigned char const OSUnM即Tbl[] = {
從右左數(shù)第4行的位置,即第35方格,就對(duì)應(yīng)該任務(wù)。如果就緒表中的任意一位置l,則表示該位對(duì)應(yīng)的任務(wù)處于就緒態(tài),即該任務(wù)可以隨時(shí)被調(diào)度器所調(diào)用,直接執(zhí)行,如果該表任意一位置0,則表示該位對(duì)應(yīng)的任務(wù)并不處于就緒態(tài),而是處于掛起態(tài),則暫時(shí)不能被調(diào)度器所調(diào)用。 就緒組是一個(gè)8位的變量,方格中的數(shù)字表示對(duì)應(yīng)的就緒表中的每一組,如果就緒組中的任意一位置l,則表示就緒表中對(duì)應(yīng)的組,即Y方向上的組,有任務(wù)處于就緒態(tài);如果就緒組中任意一組置O,則表示就緒表中對(duì)應(yīng)組的任務(wù)處于掛起態(tài),暫不執(zhí)行。如圖2所示,若就緒組的第0位被置l,則表示就緒表的第0組中,優(yōu)先級(jí)為0至7的任意一個(gè)或多個(gè)任務(wù)處于就緒態(tài);如果就緒組的第2位被置O,則表示就緒表的第2組中,優(yōu)先級(jí)為10至23的任務(wù)都處于掛起態(tài)。 然后,建立并初始化位掩碼表和優(yōu)先級(jí)判定表。位掩碼表的大小是8個(gè),定義位掩
碼表為
0x80}
}。 建立并初始化中斷優(yōu)先級(jí)表ISR_IDPrio [],用來(lái)標(biāo)識(shí)各種中斷源對(duì)應(yīng)ISR的優(yōu)先
級(jí)高低,其下標(biāo)為中斷源號(hào),每一元素則是對(duì)應(yīng)中斷的ISR作為任務(wù)時(shí)的優(yōu)先級(jí)。 安裝時(shí)鐘節(jié)拍中斷,定義時(shí)鐘節(jié)拍中斷的執(zhí)行周期,中斷類型等,使系統(tǒng)每隔一段
時(shí)間產(chǎn)生一次中斷,這個(gè)時(shí)鐘節(jié)拍中斷相當(dāng)于一個(gè)全局時(shí)鐘,以中斷的形式產(chǎn)生,每隔一段
時(shí)間會(huì)自動(dòng)運(yùn)行相應(yīng)的時(shí)鐘節(jié)拍中斷程序,以便進(jìn)行任務(wù)調(diào)度。 以上介紹了任務(wù)調(diào)度的前期準(zhǔn)備的詳細(xì)情況,創(chuàng)建了任務(wù),任務(wù)控制塊鏈表,就緒
0,4,5,4,6,4,5,4,7,4,5,4,6,4,5,4,
,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,
,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,
,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,
,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0表,就緒組,掩碼表和優(yōu)先級(jí)判定表,并安裝了時(shí)鐘節(jié)拍中斷,下面將介紹任務(wù)調(diào)度的方法。
如前面所述,我們可以把嵌入式系統(tǒng)中的任務(wù)分為時(shí)間觸發(fā)的合作式任務(wù),時(shí)間觸發(fā)的搶占式任務(wù),事件觸發(fā)的的合作式任務(wù)和事件觸發(fā)的的搶占式任務(wù)。時(shí)間觸發(fā)的任務(wù)需要根據(jù)該任務(wù)的時(shí)間特性,如延遲時(shí)間和執(zhí)行周期,來(lái)進(jìn)行相應(yīng)處理。而事件觸發(fā)的任務(wù)主要是由嵌入式系統(tǒng)的中斷或者任務(wù)間通信機(jī)制,如任務(wù)等待或獲得一個(gè)信號(hào)量所觸發(fā),大部分由中斷事件的形式出現(xiàn),與任務(wù)的時(shí)間特性無(wú)關(guān),所以在任務(wù)調(diào)度過(guò)程中分開(kāi)處理。 任務(wù)創(chuàng)建后,任務(wù)控制塊TCB中任務(wù)的類型,優(yōu)先級(jí),還有延遲時(shí)間隨之確定。
任務(wù)調(diào)度主要是通過(guò)時(shí)鐘節(jié)拍中斷程序進(jìn)行,每次時(shí)鐘節(jié)拍中斷程序的運(yùn)行都是重新進(jìn)行任務(wù)調(diào)度的時(shí)機(jī),如圖5所示,圖中介紹了時(shí)鐘節(jié)拍中斷的流程圖,包括以下步驟 步驟S501,判斷是否是時(shí)間觸發(fā)的任務(wù),如果是則跳轉(zhuǎn)至步驟S502,否則跳轉(zhuǎn)至步驟S505。 步驟S502,自減時(shí)間觸發(fā)任務(wù)的延遲時(shí)間; 步驟S503,判斷自減后的時(shí)間觸發(fā)任務(wù)的延遲時(shí)間,如果為0,則執(zhí)行步驟S504,否則跳轉(zhuǎn)至步驟S505 ; 步驟S504,使時(shí)間觸發(fā)的任務(wù)就緒; 步驟S505,查就緒表獲得當(dāng)前就緒的最高任務(wù)優(yōu)先級(jí); 步驟S506,判斷就緒的最高優(yōu)先級(jí)任務(wù)是合作式任務(wù)還是搶占式任務(wù),如果是合作式任務(wù),則執(zhí)行步驟S507,否則執(zhí)行步驟S508 ; 步驟S507,運(yùn)行最高優(yōu)先級(jí)的合作式任務(wù),運(yùn)行完成后,使該任務(wù)處于掛起態(tài),然后執(zhí)行步驟S505 ; 步驟S508,運(yùn)行最高優(yōu)先級(jí)的搶占式任務(wù)。 下面詳細(xì)介紹該流程。進(jìn)入時(shí)鐘節(jié)拍中斷程序后,我們首先對(duì)時(shí)間觸發(fā)的任務(wù)進(jìn)行處理,將對(duì)應(yīng)的任務(wù)控制塊TCB中的延遲時(shí)間自減,即令延遲時(shí)間減1,當(dāng)延遲時(shí)間減為0時(shí),則使該任務(wù)就緒,即在就緒表OSRdyTbl[]中對(duì)應(yīng)該任務(wù)優(yōu)先級(jí)的位置置l,而且在就緒組OSRdyGrp中對(duì)應(yīng)任務(wù)所在組的位置置1。如果是事件觸發(fā)的任務(wù),則不作任何處理。
其中,在就緒表和就緒組中將對(duì)應(yīng)某任務(wù)的位置置1的方法是如圖4所示,在就緒表OSRdyTbl []中,因?yàn)樵撊蝿?wù)優(yōu)先級(jí)的低3位對(duì)應(yīng)OSRdyTbl []的X坐標(biāo),高3位對(duì)應(yīng)Y坐標(biāo),所以利用位掩碼表OSM即Tbl []查找X坐標(biāo)和Y坐標(biāo)對(duì)應(yīng)的位掩碼,以確定X、 Y坐標(biāo)在8位變量中是第幾個(gè)元素,最后將兩個(gè)位掩碼值分別賦給就緒組OSRdyGrp和就緒表OSRdyTbl []中該任務(wù)所在的組值。 例如,使優(yōu)先級(jí)為33的任務(wù)置為就緒態(tài)的詳細(xì)過(guò)程為33的二進(jìn)制值為100001,X表優(yōu)先級(jí)低3位為l,它對(duì)應(yīng)的位掩碼為OSM即Tbl[X], Y表優(yōu)先級(jí)高3位為4,它對(duì)應(yīng)的位掩碼為OSM即Tbl [Y],則對(duì)就緒組置位為OSRdyGrp = OSM即Tbl [Y],對(duì)就緒表置位為OSRdyTbl [OSM即Tbl [Y] ] = OSM即Tbl [X]。 檢查正在運(yùn)行的合作式任務(wù)是否被時(shí)鐘節(jié)拍中斷所中斷,是則根據(jù)用戶需求作出處理。因?yàn)槊總€(gè)時(shí)鐘節(jié)拍的時(shí)間間隔有限,合作式任務(wù)有可能會(huì)被時(shí)鐘節(jié)拍中斷所中斷,所以為了進(jìn)一步提高合作式調(diào)度的合理性,需要在時(shí)鐘節(jié)拍中斷程序開(kāi)始時(shí),檢查是否有正在運(yùn)行的合作式任務(wù)被時(shí)鐘節(jié)拍中斷所中斷,可以通過(guò)檢查一個(gè)標(biāo)志位是否為0的方法實(shí)現(xiàn)。例如當(dāng)標(biāo)志位為1時(shí)有合作式任務(wù)被中斷,則進(jìn)行相應(yīng)處理,當(dāng)標(biāo)志位為0時(shí)沒(méi)有合作式任務(wù)被中斷。用戶根據(jù)自己的實(shí)際需求,處理選項(xiàng)可以在創(chuàng)建任務(wù)時(shí)進(jìn)行選擇,決定具體采用哪種處理方法,例如繼續(xù)執(zhí)行未完成的任務(wù),放棄執(zhí)行未完成的任務(wù),重新執(zhí)行未完成的任務(wù)等。 —般地,創(chuàng)建任務(wù)時(shí)可以為合作式任務(wù)設(shè)置一個(gè)截止時(shí)間,一般來(lái)說(shuō),該截止時(shí)間等于其運(yùn)行周期,在時(shí)鐘節(jié)拍中斷程序開(kāi)始時(shí)進(jìn)行自減,當(dāng)截止時(shí)間為O時(shí),根據(jù)用戶需求作出處理,處理選項(xiàng)可以在創(chuàng)建任務(wù)時(shí)進(jìn)行選擇。 然后,根據(jù)就緒表和就緒組查找優(yōu)先級(jí)判定表,獲得當(dāng)前就緒的最高任務(wù)優(yōu)先級(jí)。當(dāng)有任務(wù)被置為就緒態(tài)時(shí),就緒表和就緒組對(duì)應(yīng)任務(wù)的位置就會(huì)置l,根據(jù)就緒組和就緒表找出最高的任務(wù)優(yōu)先級(jí)。詳細(xì)過(guò)程是先用就緒組OSRdyGrp查找優(yōu)先級(jí)判定表OSUnM即Tbl [],得出最高優(yōu)先級(jí)的高3位,即是最高優(yōu)先級(jí)任務(wù)在就緒表0SRdyTbl []中所屬組的位掩碼,再用該組查找優(yōu)先級(jí)判定表OSUnM即Tbl [],得出最高優(yōu)先級(jí)的低3位,最后,將前后3位結(jié)合起來(lái)就是當(dāng)前就緒的最高任務(wù)優(yōu)先級(jí)。例如,如果就緒組0SRdyGrp的值為01010100,即0x54,查找優(yōu)先級(jí)判定表OSUnMapTbl
的值為2,即最高任務(wù)優(yōu)先級(jí)的高3位是2,如果0SRdyTbl [2]的值是01100010,即0x62,查找優(yōu)先級(jí)判定表0SUnM即Tbl
]的值為1,則最高任務(wù)優(yōu)先級(jí)的二進(jìn)制值就是010001,即11。
再者,如果就緒的最高優(yōu)先級(jí)任務(wù)是合作式任務(wù),則直接運(yùn)行該合作式任務(wù)。詳細(xì)過(guò)程是根據(jù)最高任務(wù)優(yōu)先級(jí)查找任務(wù)控制塊TCB,并判斷TCB的任務(wù)類型是否是合作式任務(wù),是則直接運(yùn)行該任務(wù)直到結(jié)束,并不需要進(jìn)行上下文切換。該合作式任務(wù)執(zhí)行完畢后,清除其在就緒表和就緒組的位置,清除該任務(wù)的就緒態(tài),其方法與在就緒表和就緒組置1很相似,只是將該任務(wù)在就緒組和就緒表的位置為O,而不是置為l,詳細(xì)步驟不再細(xì)述。
—般地,當(dāng)一個(gè)合作式任務(wù)執(zhí)行完畢后,允許檢查在該合作式任務(wù)執(zhí)行期間是否有事件觸發(fā)的任務(wù)請(qǐng)求執(zhí)行,有則使其就緒。因?yàn)楹献魇饺蝿?wù)在執(zhí)行期間一般不允許中斷,若有中斷事件發(fā)生,不能即時(shí)作出響應(yīng),我們可以通過(guò)檢查在合作式任務(wù)執(zhí)行期間是否有中斷事件請(qǐng)求發(fā)生,在執(zhí)行合作式任務(wù)完畢后及時(shí)將發(fā)出請(qǐng)求的事件觸發(fā)任務(wù)置為就緒態(tài),盡量提高調(diào)度器對(duì)外部事件的實(shí)時(shí)響應(yīng)能力。 檢查是否有中斷事件請(qǐng)求發(fā)生的詳細(xì)過(guò)程是從硬件上查找中斷源,利用所得到的中斷源編號(hào),在中斷優(yōu)先級(jí)表IISR_IDPrio[]查找對(duì)應(yīng)的任務(wù)優(yōu)先級(jí),利用所得到的任務(wù)優(yōu)先級(jí),使該事件觸發(fā)任務(wù)就緒。另外,因?yàn)檫@個(gè)檢查功能需要一定的執(zhí)行時(shí)間,而且執(zhí)行時(shí)間具有不確定性,沒(méi)有中斷請(qǐng)求時(shí)的檢查時(shí)間比有很多中斷發(fā)出請(qǐng)求時(shí)少,這對(duì)后面的合作式任務(wù)的開(kāi)始執(zhí)行時(shí)間和截止執(zhí)行時(shí)間產(chǎn)生不確定性,因而發(fā)生任務(wù)抖動(dòng)現(xiàn)象。因此我們將檢查時(shí)間設(shè)置為一個(gè)固定時(shí)間ChklntrDuration,當(dāng)一個(gè)合作式任務(wù)執(zhí)行完畢后,則比較固定時(shí)間與時(shí)鐘節(jié)拍剩余間隔(時(shí)鐘節(jié)拍時(shí)間間隔與ChklntrDuration之差),若前者比較小,則執(zhí)行該檢查功能,否則放棄檢查。當(dāng)執(zhí)行該檢查功能時(shí),如果其運(yùn)行時(shí)間超過(guò)ChklntrDuration時(shí),無(wú)論調(diào)度器是否正在檢查,立即放棄執(zhí)行,進(jìn)入任務(wù)調(diào)度,
接著,重新跳轉(zhuǎn)至查找當(dāng)前就緒的最高任務(wù)優(yōu)先級(jí)的步驟,找出當(dāng)前最高優(yōu)先級(jí)的任務(wù),若該任務(wù)是合作式任務(wù),執(zhí)行之,檢查后跳轉(zhuǎn)至查找最高任務(wù)優(yōu)先級(jí)步驟,若該任務(wù)是搶占式任務(wù),則進(jìn)行上下文切換,即將當(dāng)前處理器的所有寄存器保存在對(duì)應(yīng)堆棧,并將
10保存在該搶占式任務(wù)堆棧的內(nèi)容(存放該任務(wù)對(duì)應(yīng)所有寄存器的內(nèi)容)取出,執(zhí)行最高優(yōu)先級(jí)的搶占式任務(wù)。 本發(fā)明通過(guò)把ISR以任務(wù)對(duì)待,并與其他任務(wù)一起分配優(yōu)先級(jí),同時(shí)復(fù)合利用時(shí)間觸發(fā)與事件觸發(fā)架構(gòu)和采用搶占式與合作式任務(wù)混合調(diào)度的方式,綜合兩種調(diào)度方式的優(yōu)點(diǎn),克服各自缺點(diǎn),得到一種混合調(diào)度方法。該混合調(diào)度方法既擁有合作式調(diào)度系統(tǒng)的高可預(yù)測(cè)性和可靠性,也擁有搶占式調(diào)度系統(tǒng)的高實(shí)時(shí)響應(yīng)能力的優(yōu)點(diǎn),其通過(guò)合理調(diào)度四種不同任務(wù),達(dá)到了充分利用系統(tǒng)資源,有效控制系統(tǒng)開(kāi)銷的目的。 以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
一種嵌入式實(shí)時(shí)操作系統(tǒng)的混合調(diào)度方法,包括任務(wù)調(diào)度前資源配置和任務(wù)調(diào)度,其特征在于,所述任務(wù)調(diào)度包括以下步驟通過(guò)事件觸發(fā)或時(shí)間觸發(fā)的方式使任務(wù)就緒;根據(jù)就緒表和就緒組查找優(yōu)先級(jí)判定表,獲得當(dāng)前就緒的最高任務(wù)優(yōu)先級(jí);根據(jù)所述當(dāng)前就緒的最高任務(wù)優(yōu)先級(jí),獲得所述就緒的最高優(yōu)先級(jí)任務(wù)的任務(wù)控制塊結(jié)構(gòu)體,并判斷該任務(wù)的類別;當(dāng)所述就緒的最高優(yōu)先級(jí)任務(wù)是合作式任務(wù)時(shí),執(zhí)行該合作式任務(wù),所述合作式任務(wù)執(zhí)行完畢后,清除其在就緒表和就緒組中的位置,再根據(jù)就緒表和就緒組查找優(yōu)先級(jí)判定表,獲得當(dāng)前就緒的最高任務(wù)優(yōu)先級(jí)。
2. 如權(quán)利要求1所述的混合調(diào)度方法,其特征在于,所述任務(wù)調(diào)度前資源配置具體包 括如下步驟創(chuàng)建任務(wù);建立任務(wù)控制塊結(jié)構(gòu)體;建立任務(wù)控制塊地址數(shù)組;建立并初始化就緒表 和就緒組;建立并初始化位掩碼表;建立并初始化優(yōu)先級(jí)判定表;建立并初始化中斷優(yōu)先 級(jí)表;安裝時(shí)鐘節(jié)拍中斷。
3. 如權(quán)利要求2所述的混合調(diào)度方法,其特征在于,所述方法把中斷程序以任務(wù)對(duì)待, 并與其他任務(wù)一起分配優(yōu)先級(jí)。
4. 如權(quán)利要求1、2或3所述的混合調(diào)度方法,其特征在于,所述使任務(wù)就緒具體包括 因通信與同步機(jī)制或中斷使事件觸發(fā)的任務(wù)就緒,或?qū)r(shí)間觸發(fā)的任務(wù)對(duì)應(yīng)的任務(wù)控制塊中的延遲時(shí)間減1,當(dāng)延遲時(shí)間減為0時(shí),使所述時(shí)間觸發(fā)的任務(wù)就緒。
5. 如權(quán)利要求4所述的混合調(diào)度方法,其特征在于,所述使任務(wù)就緒具體是指 將就緒表中對(duì)應(yīng)該任務(wù)優(yōu)先級(jí)的位置為l,而且在就緒組中對(duì)應(yīng)任務(wù)所在組的位置為1。
6. 如權(quán)利要求1所述的混合調(diào)度方法,其特征在于,所述方法還包括 執(zhí)行時(shí)鐘節(jié)拍中斷程序時(shí),檢查正在運(yùn)行的合作式任務(wù)是否被時(shí)鐘節(jié)拍中斷所中斷,是則根據(jù)用戶需求選擇處理選項(xiàng),所述處理選項(xiàng)在創(chuàng)建任務(wù)時(shí)設(shè)置,其包括繼續(xù)執(zhí)行未完 成的任務(wù),放棄執(zhí)行未完成的任務(wù)或重新執(zhí)行未完成的任務(wù)。
7. 如權(quán)利要求1所述的混合調(diào)度方法,其特征在于,還包括以下步驟 在所述合作式任務(wù)執(zhí)行完畢后,檢查在所述合作式任務(wù)執(zhí)行期間是否有中斷事件觸發(fā)的任務(wù)請(qǐng)求執(zhí)行,在有中斷事件觸發(fā)的任務(wù)請(qǐng)求執(zhí)行時(shí),使所請(qǐng)求的事件觸發(fā)的任務(wù)就緒。
8. 如權(quán)利要求7所述的混合調(diào)度方法,其特征在于,所述檢查是否有中斷事件請(qǐng)求發(fā) 生具體步驟是軟件查找在合作式任務(wù)運(yùn)行過(guò)程中所發(fā)生的中斷,利用所得到的中斷源編號(hào),在所述 中斷優(yōu)先級(jí)表中查找所對(duì)應(yīng)的任務(wù)優(yōu)先級(jí),利用所得到的優(yōu)先級(jí)使對(duì)應(yīng)任務(wù)就緒。
9. 如權(quán)利要求7所述的混合調(diào)度方法,其特征在于,還包括以下步驟 將所述檢查中斷事件的時(shí)間設(shè)置為固定時(shí)間,合作式任務(wù)執(zhí)行完畢后,比較固定時(shí)間與時(shí)鐘節(jié)拍剩余間隔,若前者比較小,則執(zhí)行該檢查功能,否則放棄執(zhí)行檢查功能;在執(zhí)行該檢查功能時(shí),如果所述檢查功能運(yùn)行時(shí)間超過(guò)所述固定時(shí)間,立即執(zhí)行任務(wù) 調(diào)度。
10. 如權(quán)利要求1或9所述的混合調(diào)度方法,其特征在于,還包括以下步驟當(dāng)就緒的最高優(yōu)先級(jí)任務(wù)是搶占式任務(wù)時(shí),運(yùn)行最高優(yōu)先級(jí)的搶占式任務(wù)。
全文摘要
本發(fā)明涉及一種嵌入式實(shí)時(shí)操作系統(tǒng)的混合調(diào)度方法,包括任務(wù)調(diào)度前資源配置和任務(wù)調(diào)度,所述任務(wù)調(diào)度包括通過(guò)事件觸發(fā)或時(shí)間觸發(fā)的方式使任務(wù)就緒;根據(jù)就緒表和就緒組查找優(yōu)先級(jí)判定表,獲得當(dāng)前就緒的最高任務(wù)優(yōu)先級(jí);當(dāng)就緒的最高優(yōu)先級(jí)任務(wù)是合作式任務(wù)時(shí),直接運(yùn)行該合作式任務(wù),該合作式任務(wù)執(zhí)行完后,清除其在就緒表和就緒組中的位置,并再執(zhí)行前一步驟。本發(fā)明通過(guò)把ISR以任務(wù)對(duì)待,并與其他任務(wù)一起分配優(yōu)先級(jí),同時(shí)復(fù)合利用時(shí)間觸發(fā)與事件觸發(fā)架構(gòu)和采用搶占式與合作式任務(wù)混合調(diào)度的方式,得到一種高可預(yù)測(cè)性和可靠性,同時(shí)具有高實(shí)時(shí)響應(yīng)能力的調(diào)度方法,該調(diào)度方法可以充分利用系統(tǒng)資源,有效控制系統(tǒng)開(kāi)銷。
文檔編號(hào)G06F9/46GK101751289SQ200810241349
公開(kāi)日2010年6月23日 申請(qǐng)日期2008年12月19日 優(yōu)先權(quán)日2008年12月19日
發(fā)明者黃強(qiáng) 申請(qǐng)人:黃強(qiáng)