本發(fā)明涉及一種時間觸發(fā)操作系統(tǒng)架構(gòu),具體涉及一種時間/事件混合觸發(fā)的操作系統(tǒng)架構(gòu)。還涉及基于時間/事件混合觸發(fā)的操作系統(tǒng)架構(gòu)的任務(wù)調(diào)度方法。
背景技術(shù):
隨著嵌入式系統(tǒng)的發(fā)展,嵌入式應(yīng)用變得越來越復(fù)雜和多樣化。早期,研究人員提出了事件觸發(fā)機(jī)制來保證系統(tǒng)的靈活性和實時性,但可靠性和確定性卻不能很好的保證,文章“《Priority Assignment for Event-triggered Systems Using Mathematical Programming》,Design,Automation&Test in Europe Conference&Exhibition(DATE),2013:982-987”提出了一種解決事件觸發(fā)任務(wù)優(yōu)先級分配的方法,方法將優(yōu)先級求解問題轉(zhuǎn)化為有約束條件的二次元公式,簡化了系統(tǒng)事件觸發(fā)任務(wù)系統(tǒng)的優(yōu)先級分配為題,但所設(shè)計的方法無法保證系統(tǒng)的確定性。后來又提出時間觸發(fā)機(jī)制進(jìn)行改善,如“《時間觸發(fā)系統(tǒng)體系結(jié)構(gòu)研究》,計算機(jī)工程與設(shè)計,2014,06,1956-1961”提出了一種基于ARINC-659總線的時間觸發(fā)系統(tǒng)體系結(jié)構(gòu),并給出了可靠性模型,保證了系統(tǒng)的可靠性,但系統(tǒng)的靈活性和實時性相對較差。針對當(dāng)前部分嵌入式系統(tǒng)中事件觸發(fā)任務(wù)和時間觸發(fā)任務(wù)共存的情況,使用某種單一機(jī)制已不能滿足系統(tǒng)要求。
技術(shù)實現(xiàn)要素:
為了克服現(xiàn)有時間觸發(fā)系統(tǒng)體系結(jié)構(gòu)實時性差的不足,本發(fā)明提供一種時間/事件混合觸發(fā)的操作系統(tǒng)架構(gòu)及任務(wù)調(diào)度方法。本發(fā)明根據(jù)管理和調(diào)度任務(wù)的不同,時間/事件混合觸發(fā)的操作系統(tǒng)架構(gòu)將系統(tǒng)內(nèi)核任務(wù)模型分為時間觸發(fā)任務(wù)模塊和事件觸發(fā)任務(wù)模塊,并采用混合任務(wù)調(diào)度方法,其中時間觸發(fā)模塊占主體地位,主要保證系統(tǒng)的可靠性和確定性。事件觸發(fā)模塊在時間觸發(fā)模塊的空閑時間內(nèi)處理,提高了系統(tǒng)的靈活性。真正緊要的突發(fā)任務(wù)則可以使用時間觸發(fā)模塊的中斷來實現(xiàn),保證了系統(tǒng)的實時性,從整體上提高了系統(tǒng)的靈活性、可靠性和實時性性能。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:一種時間/事件混合觸發(fā)的操作系統(tǒng)架構(gòu),其特點是:包括硬件相關(guān)層、操作系統(tǒng)服務(wù)層和應(yīng)用層。所述硬件相關(guān)層包括CPU、時鐘和設(shè)備驅(qū)動。所述操作系統(tǒng)服務(wù)層包括時間觸發(fā)任務(wù)管理與調(diào)度模塊和事件觸發(fā)任務(wù)管理與調(diào)度模塊。所述的時間觸發(fā)任務(wù)管理與調(diào)度模塊包括同步與通信模塊、中斷管理模塊和錯誤處理子模塊;所述的事件觸發(fā)任務(wù)管理與調(diào)度模塊包括任務(wù)同步與通信模塊、資源管理模塊、內(nèi)存管理模塊、中斷管理模塊和報警模塊。應(yīng)用層位于整個系統(tǒng)架構(gòu)的最上層,包括操作系統(tǒng)配置模塊,系統(tǒng)服務(wù)API和用戶應(yīng)用程序。所述的時間觸發(fā)任務(wù)管理與調(diào)度模塊和事件觸發(fā)任務(wù)管理與調(diào)度模塊之間通過同步與通信機(jī)制進(jìn)行數(shù)據(jù)的交互,保證兩者之間的數(shù)據(jù)同步。兩模塊通過硬件訪問機(jī)制與硬件模塊進(jìn)行數(shù)據(jù)的交互,保證數(shù)據(jù)讀取和存取的準(zhǔn)確進(jìn)行。
一種基于上述時間/事件混合觸發(fā)的操作系統(tǒng)架構(gòu)的任務(wù)調(diào)度方法,其特點是包括以下步驟:
步驟一、初始化系統(tǒng)中時間觸發(fā)任務(wù)和事件觸發(fā)任務(wù)調(diào)度隊列,并建立不同運行模式下的靜態(tài)時間觸發(fā)任務(wù)調(diào)度表;
步驟二、啟動系統(tǒng)任務(wù)調(diào)度,檢查系統(tǒng)是否啟動事件觸發(fā)任務(wù)管理與調(diào)度模塊,如沒有啟動,則直接根據(jù)靜態(tài)調(diào)度表進(jìn)行時間觸發(fā)任務(wù)的調(diào)度,否則執(zhí)行步驟三;
步驟三、判斷當(dāng)前時間點是否存在需要激活的時間觸發(fā)任務(wù),如存在,則進(jìn)行時間觸發(fā)任務(wù)調(diào)度,否則執(zhí)行步驟四;
步驟四、判斷當(dāng)前任務(wù)是否執(zhí)行完畢,如沒有,則不進(jìn)行任務(wù)切換,繼續(xù)執(zhí)行;否則檢查在恢復(fù)鏈表中是否存在需要恢復(fù)執(zhí)行的時間觸發(fā)任務(wù),如若存在,則進(jìn)行時間觸發(fā)任務(wù)的恢復(fù)執(zhí)行;否則執(zhí)行系統(tǒng)空閑任務(wù),并在空閑任務(wù)中判斷事件觸發(fā)任務(wù)隊列是否為空,如若不為空,則進(jìn)行事件觸發(fā)任務(wù)調(diào)度,否則繼續(xù)運行空閑任務(wù)。
本發(fā)明的有益效果是:根據(jù)管理和調(diào)度任務(wù)的不同,時間/事件混合觸發(fā)的操作系統(tǒng)架構(gòu)將系統(tǒng)內(nèi)核任務(wù)模型分為時間觸發(fā)任務(wù)模塊和事件觸發(fā)任務(wù)模塊,并采用混合任務(wù)調(diào)度方法,其中時間觸發(fā)模塊占主體地位,主要保證系統(tǒng)的可靠性和確定性。事件觸發(fā)模塊在時間觸發(fā)模塊的空閑時間內(nèi)處理,提高了系統(tǒng)的靈活性。真正緊要的突發(fā)任務(wù)則可以使用時間觸發(fā)模塊的中斷來實現(xiàn),保證了系統(tǒng)的實時性,從整體上提高了系統(tǒng)的靈活性、可靠性和實時性性能。
本方法采用了時間觸發(fā)與事件觸發(fā)分模塊管理的方法進(jìn)行系統(tǒng)架構(gòu),解決了單一觸發(fā)方式不能保證系統(tǒng)可靠性與靈活性的問題,提高了系統(tǒng)的可靠性、靈活性。并在系統(tǒng)內(nèi)核中采用了新的混合任務(wù)調(diào)度算法,解決了傳統(tǒng)基于時鐘中斷任務(wù)切換方式導(dǎo)致的實時性和系統(tǒng)資源利用率低的問題,提高了系統(tǒng)的資源利用率和實時性。
本方法能夠進(jìn)一步規(guī)范基于事件/時間混合觸發(fā)的實時操作系統(tǒng)內(nèi)核設(shè)計方法和任務(wù)調(diào)度理論,促進(jìn)嵌入式實時操作系統(tǒng)軟件的設(shè)計技術(shù)進(jìn)步,能夠更好地完善操作系統(tǒng)理論。
目前基于時間/事件混合觸發(fā)機(jī)制的實時操作系統(tǒng)已經(jīng)被應(yīng)用于歐美的航天控制系統(tǒng)中,而國內(nèi)在這方面的研究尚有不足,因此本發(fā)明方法將一定程度上提升我國航空航天等國防關(guān)鍵領(lǐng)域的實力,提升我國在操作系統(tǒng)方面的國際競爭力,打破國外對于我國的技術(shù)封鎖。
本方法簡單易于實現(xiàn),可以實現(xiàn)快速的技術(shù)轉(zhuǎn)換并應(yīng)用于多種控制領(lǐng)域,具有較好的經(jīng)濟(jì)效應(yīng)。
以下結(jié)合附圖和實施例詳細(xì)說明本發(fā)明。
附圖說明
圖1是本發(fā)明時間/事件混合觸發(fā)的操作系統(tǒng)架構(gòu)框圖。
圖2是本發(fā)明基于時間/事件混合觸發(fā)的操作系統(tǒng)架構(gòu)的任務(wù)調(diào)度方法中時間觸發(fā)任務(wù)調(diào)度表;用于任務(wù)執(zhí)行過程中確定任務(wù)的調(diào)度次序。
圖3是本發(fā)明基于時間/事件混合觸發(fā)的操作系統(tǒng)架構(gòu)的任務(wù)調(diào)度方法的中斷級任務(wù)調(diào)度流程;用于說明中斷級任務(wù)調(diào)度的具體流程。
圖4是本發(fā)明基于時間/事件混合觸發(fā)的操作系統(tǒng)架構(gòu)的任務(wù)調(diào)度方法中的任務(wù)級任務(wù)調(diào)度流程;用于說明任務(wù)級任務(wù)調(diào)度的具體流程。
具體實施方式
以下實施例參照圖1-4。
本發(fā)明時間/事件混合觸發(fā)的操作系統(tǒng)架構(gòu)包括三個層次。
應(yīng)用層。應(yīng)用層位于整個系統(tǒng)架構(gòu)的最上層,包括操作系統(tǒng)配置模塊,系統(tǒng)服務(wù)API和由用戶編寫的各種實時應(yīng)用程序。在系統(tǒng)配置模塊中,用戶可以對混合操作系統(tǒng)所支持的任務(wù)的最大數(shù)量,任務(wù)類型等進(jìn)行靜態(tài)配置,使系統(tǒng)能夠根據(jù)實時系統(tǒng)應(yīng)用需求的不同,靈活配置系統(tǒng)資源。在系統(tǒng)啟動之后,系統(tǒng)內(nèi)核讀取配置模塊的配置文件進(jìn)行系統(tǒng)的配置和參數(shù)初始化,保證系統(tǒng)行為符合要求;操作系統(tǒng)API是用戶應(yīng)用程序獲取操作系統(tǒng)服務(wù)的接口;用戶應(yīng)用程序是由用戶編寫的用于實現(xiàn)不同功能的程序,可以使用操作系統(tǒng)提供的服務(wù)進(jìn)行任務(wù)的處理。
操作系統(tǒng)服務(wù)層。操作系統(tǒng)服務(wù)層是整個操作系統(tǒng)的核心部分。根據(jù)管理任務(wù)的類型,可分為相對獨立的兩大部分:一是時間觸發(fā)任務(wù)管理與調(diào)度發(fā)模塊;二是事件觸發(fā)任務(wù)調(diào)度與管理模塊。兩大模塊相對獨立,同時又具有緊密的聯(lián)系。
時間觸發(fā)任務(wù)管理與調(diào)度模塊主要包括:中斷管理模塊,錯誤處理模塊和同步與通信模塊。時間觸發(fā)任務(wù)管理與調(diào)度模塊用于實現(xiàn)時間觸發(fā)任務(wù)的創(chuàng)建與初始化,進(jìn)行任務(wù)調(diào)度等;中斷管理實現(xiàn)系統(tǒng)的開/關(guān)中斷功能,管理由外圍設(shè)備產(chǎn)生的各類中斷,并進(jìn)行中斷處理;錯誤處理模塊用于完成系統(tǒng)執(zhí)行過程中產(chǎn)生的各種類型錯誤的檢測和處理,包括超時錯誤,操作系統(tǒng)內(nèi)部錯誤,參數(shù)錯誤等;同步與通信模塊用于支持操作系統(tǒng)的分布式應(yīng)用。
事件觸發(fā)任務(wù)管理與調(diào)度模塊主要包括:任務(wù)間同步與通信模塊,資源管理,內(nèi)存管理,警報等模塊。事件觸發(fā)任務(wù)管理與調(diào)度模塊主要提供事件觸發(fā)任務(wù)的創(chuàng)建,初始化等服務(wù),并根據(jù)事件觸發(fā)任務(wù)的優(yōu)先級和任務(wù)狀態(tài)進(jìn)行任務(wù)的調(diào)度與切換。此外,還能與時間觸發(fā)任務(wù)管理模塊進(jìn)行交互;任務(wù)同步與通信模塊支持事件機(jī)制與消息機(jī)制,用于事件觸發(fā)任務(wù),包括信號量,互斥信號量等;在系統(tǒng)創(chuàng)建時,可根據(jù)任務(wù)類型選擇是否支持事件機(jī)制;資源管理模塊用于協(xié)調(diào)多個不同優(yōu)先級任務(wù)對于共享資源的互斥性訪問,且避免產(chǎn)生優(yōu)先級反轉(zhuǎn)問題;內(nèi)存管理模塊也是可配置的,可以滿足事件觸發(fā)任務(wù)對于內(nèi)存的動態(tài)申請;警報機(jī)制用于滿足操作系統(tǒng)處理與時間有關(guān)的重復(fù)事件的需要,在內(nèi)核中以定時器的方式實現(xiàn)。
硬件相關(guān)層。主要包括Xilinx ML507硬件平臺的設(shè)備驅(qū)動,處理器與時鐘等設(shè)備。系統(tǒng)的應(yīng)用程序?qū)?、操作系統(tǒng)服務(wù)層可以與硬件進(jìn)行信息的交互,包括讀取硬件中的信息和通過硬件設(shè)備進(jìn)行必要的信息處理。
為了保證系統(tǒng)內(nèi)核中任務(wù)調(diào)度的實時性和靈活性,整個內(nèi)核的任務(wù)管理和調(diào)度方法的原則為:
[1]時間觸發(fā)任務(wù)比事件觸發(fā)任務(wù)具有更高的優(yōu)先級;
[2]時間觸發(fā)任務(wù)在預(yù)先確定的時間點開始執(zhí)行,任務(wù)由調(diào)度表激活并采用本地時鐘作為基準(zhǔn)時間;
[3]時間觸發(fā)任務(wù)可以被其他新激活的時間觸發(fā)任務(wù)所搶占;
[4]時間觸發(fā)任務(wù)處于空閑時,事件觸發(fā)任務(wù)開始執(zhí)行,事件觸發(fā)任務(wù)采用基于優(yōu)先級的調(diào)度策略。
本發(fā)明在內(nèi)核中采用一種新的調(diào)度方法進(jìn)行任務(wù)管理,流程如下:
[1]參考圖2。確立時間任務(wù)調(diào)度表和事件任務(wù)調(diào)度隊列。調(diào)度表是用于時間觸發(fā)任務(wù)調(diào)度的數(shù)據(jù)結(jié)構(gòu),不同應(yīng)用模式對應(yīng)不同的調(diào)度表,每個調(diào)度表中包含具有相同周期且觸發(fā)時間各不相同的一系列時間觸發(fā)任務(wù)。時間觸發(fā)任務(wù)創(chuàng)建時,系統(tǒng)根據(jù)任務(wù)所屬的應(yīng)用模式將任務(wù)關(guān)聯(lián)到不同的調(diào)度表中,同一調(diào)度表中的時間觸發(fā)任務(wù)按照觸發(fā)時間從小到大鏈接為一個單向鏈表。
[2]根據(jù)系統(tǒng)所屬的應(yīng)用模式進(jìn)行時間觸發(fā)任務(wù)的調(diào)度,在沒有時間觸發(fā)任務(wù)的時候按照優(yōu)先級進(jìn)行事件觸發(fā)任務(wù)的調(diào)度。
[3]參考圖3。時間觸發(fā)在運行過程中會在每一次時鐘中斷中進(jìn)行任務(wù)調(diào)度。其具體過程如下所述:
(a)判斷時鐘節(jié)拍是否到達(dá)調(diào)度窗口的最大值,如果是則開始新的一輪調(diào)度,且時鐘節(jié)拍重置為0,并根據(jù)調(diào)度表重新進(jìn)行任務(wù)的調(diào)度;如若沒有達(dá)到最大值,則轉(zhuǎn)至b繼續(xù)運行。
(b)如若還沒到下一個時間觸發(fā)任務(wù)的觸發(fā)時間,當(dāng)前的時間觸發(fā)任務(wù)還未執(zhí)行完且執(zhí)行時間未達(dá)到當(dāng)前級別下的最壞執(zhí)行時間時,則當(dāng)前任務(wù)繼續(xù)執(zhí)行,不進(jìn)行任務(wù)切換;
(c)當(dāng)前的時間觸發(fā)任務(wù)是高級別安全關(guān)鍵任務(wù),執(zhí)行時間已達(dá)到當(dāng)前級別下的最壞執(zhí)行時間而還未執(zhí)行完時,則系統(tǒng)發(fā)生狀態(tài)切換,提高系統(tǒng)所處關(guān)鍵級別和調(diào)度表,根據(jù)調(diào)度表將下一個執(zhí)行的任務(wù)指針指向高級調(diào)度表中下一任務(wù),當(dāng)前任務(wù)繼續(xù)執(zhí)行,不進(jìn)行任務(wù)切換;
(d)如果下一個時間觸發(fā)任務(wù)觸發(fā),則搶占當(dāng)前的時間觸發(fā)任務(wù)并進(jìn)行任務(wù)切換;
(e)如果當(dāng)前時間觸發(fā)任務(wù)已執(zhí)行完且下一個任務(wù)還未到達(dá),則對時間觸發(fā)模塊來說,當(dāng)前處于空閑時間,將系統(tǒng)切換到事件觸發(fā)模塊,進(jìn)行事件觸發(fā)任務(wù)的調(diào)度和切換。
[4]參考圖4。在時間觸發(fā)任務(wù)運行完成而時鐘中斷沒有到來的情況下,調(diào)度方法會提前進(jìn)行任務(wù)級的任務(wù)切換,而不必等時鐘中斷到來。其具體執(zhí)行過程如下所述:
(a)如果恢復(fù)鏈表為空,說明當(dāng)前所有時間觸發(fā)任務(wù)均已執(zhí)行完畢,則將系統(tǒng)切換到事件觸發(fā)模塊,進(jìn)行事件觸發(fā)任務(wù)的調(diào)度和切換。
(b)若恢復(fù)鏈表不為空,當(dāng)前結(jié)束任務(wù)為恢復(fù)鏈表中最后一個任務(wù),則將當(dāng)前任務(wù)從恢復(fù)鏈表中刪除,啟動事件觸發(fā)任務(wù)調(diào)度和切換。
(c)若恢復(fù)鏈表不為空,當(dāng)前結(jié)束任務(wù)不是恢復(fù)鏈表中最后一個任務(wù),將當(dāng)前任務(wù)從恢復(fù)鏈表中刪除,然后恢復(fù)鏈表中下一個時間觸發(fā)任務(wù)的執(zhí)行,進(jìn)行時間觸發(fā)任務(wù)的任務(wù)切換。
(d)若恢復(fù)鏈表不為空,且當(dāng)前任務(wù)不在恢復(fù)鏈表中,則將恢復(fù)鏈表中的第一個任務(wù)恢復(fù)運行,進(jìn)行時間觸發(fā)任務(wù)切換。