專利名稱:一種基于模型的實(shí)時(shí)系統(tǒng)的可調(diào)度性分析方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式實(shí)時(shí)系統(tǒng)的模擬仿真技術(shù),更具體的說(shuō),是涉及一種基于模型的實(shí)時(shí)系統(tǒng)的可調(diào)度性分析方法。
背景技術(shù):
第一方面實(shí)時(shí)系統(tǒng)和可調(diào)度性時(shí)間分析。
嵌入式實(shí)時(shí)系統(tǒng),也叫實(shí)時(shí)內(nèi)核,是在各類嵌入式芯片的應(yīng)用程序上實(shí)現(xiàn)多任務(wù)的機(jī)制。它的核心功能,是實(shí)現(xiàn)多任務(wù)調(diào)度,以及任務(wù)間的通訊等。
在特定的操作系統(tǒng)中采用某一特定的調(diào)度方法的情況下,如果所有的任務(wù)都能夠在特定的約束內(nèi)實(shí)現(xiàn),那么這種調(diào)度就是可行的。驗(yàn)證調(diào)度可行有兩種基本的方法一、對(duì)進(jìn)程集在約束內(nèi)進(jìn)行嚴(yán)密的可行性實(shí)驗(yàn);二、推導(dǎo)出最壞情況響應(yīng)時(shí)間,并與截止期進(jìn)行比較。
第二方面目前存在的可調(diào)度性時(shí)間分析方法。
可調(diào)度性分析決定是否所有的任務(wù)可以調(diào)度運(yùn)行,并且滿足它們使用調(diào)度算法建立的死線,同時(shí)仍要獲得優(yōu)化的處理器利用率。注意,可調(diào)度性分析只觀察系統(tǒng)如何滿足時(shí)序要求,而不是滿足功能要求。
對(duì)于實(shí)時(shí)系統(tǒng),普遍使用的分析方法是速率單調(diào)分析RMA(Rate MonotonicAnalysis)。此模型是基于稱為速率單調(diào)調(diào)度RMS(Rate Monotic Scheduling)的調(diào)度機(jī)制開發(fā)的。它是可搶占的調(diào)度算法,采用單調(diào)優(yōu)先權(quán)分配作為任務(wù)的優(yōu)先權(quán)分配策略。速率單調(diào)優(yōu)先權(quán)分配(rate monotonic priority assignment)是一種方法,分配給任務(wù)的優(yōu)先權(quán)是此任務(wù)執(zhí)行速率的單調(diào)函數(shù);換句話說(shuō),每次執(zhí)行之間的周期越短,分給此任務(wù)的優(yōu)先權(quán)越高。
有一組與基本RMA相關(guān)的假設(shè)。這些假設(shè)是所有的任務(wù)是周期性的,任務(wù)相互獨(dú)立并且任務(wù)之間不發(fā)生交互,任務(wù)的死線是其下一個(gè)周期的開始,每個(gè)任務(wù)具有不隨時(shí)間變化的定常時(shí)間,所有的任務(wù)具有同等關(guān)鍵性級(jí)別,限制非周期任務(wù)初始化和失敗恢復(fù)工作,并且這些非周期任務(wù)不具有硬死線。
雖然RMA分析方法已經(jīng)得到了很好的應(yīng)用,但是RMA分析方法的假設(shè)條件比較嚴(yán)格,一般的任務(wù)集不一定能夠滿足,導(dǎo)致了對(duì)分析的結(jié)果有誤差。而且,它所得到的結(jié)果是一個(gè)籠統(tǒng)的、模糊的結(jié)果,不能以很友好的方式提供給用戶。
發(fā)明內(nèi)容
本發(fā)明的主要目的在于克服現(xiàn)有技術(shù)中的不足,提供了一種基于模型的實(shí)時(shí)系統(tǒng)的可調(diào)度性分析方法。
為了解決上述技術(shù)問(wèn)題,本發(fā)明是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的。
一種基于模型的實(shí)時(shí)系統(tǒng)的可調(diào)度性分析方法,包括以下步驟(1)建立系統(tǒng)模型通過(guò)建模工具建立系統(tǒng)模型,系統(tǒng)模型包含三個(gè)方面任務(wù)、定時(shí)器、任務(wù)和任務(wù)/任務(wù)和定時(shí)器之間的通訊;(2)以系統(tǒng)模型作為輸入,進(jìn)行任務(wù)分割進(jìn)行任務(wù)分割通過(guò)任務(wù)分割算法實(shí)現(xiàn),所述的任務(wù)分割算法如下把任務(wù)分割成n個(gè),其中n=任務(wù)的入度+任務(wù)的出度-1-入邊中激活任務(wù)的邊的條數(shù);未經(jīng)過(guò)分割的任務(wù)稱為父任務(wù),父任務(wù)分割后得到的任務(wù)稱為子任務(wù);一個(gè)父任務(wù)的所有子任務(wù)稱為這個(gè)父任務(wù)的子任務(wù)集;根據(jù)系統(tǒng)模型的具體情況,對(duì)父任務(wù)和子任務(wù)進(jìn)行手動(dòng)加邊形成時(shí)序圖;(3)設(shè)計(jì)模擬用數(shù)據(jù)結(jié)構(gòu)根據(jù)時(shí)序圖中的任務(wù)和各任務(wù)之間的相互關(guān)系設(shè)計(jì)模擬用數(shù)據(jù)結(jié)構(gòu),把時(shí)序圖中的信息組織成有向圖;模擬用數(shù)據(jù)結(jié)構(gòu)分為三部分任務(wù)節(jié)點(diǎn)、子任務(wù)集和有向圖;(4)對(duì)有向圖執(zhí)行算法進(jìn)行仿真,得到結(jié)果執(zhí)行序列在執(zhí)行仿真算法以前,要設(shè)置就緒隊(duì)列;在一般情況和最差情況下設(shè)置就緒隊(duì)列的算法為在一般情況下,將自啟動(dòng)的任務(wù)放入就緒隊(duì)列;在最差情況下,將入讀為零的任務(wù)放入就緒隊(duì)列;對(duì)就緒隊(duì)列設(shè)置完畢后,對(duì)有向圖執(zhí)行算法進(jìn)行仿真;(5)輸出模擬結(jié)果
結(jié)果以在界面上畫圖的形式來(lái)展現(xiàn)給用戶,在輸出模擬結(jié)果的界面中,提供了最差和一般兩種情況下的三大結(jié)果每個(gè)時(shí)刻執(zhí)行的任務(wù)信息、每個(gè)任務(wù)的執(zhí)行時(shí)間及CPU的空閑時(shí)間和系統(tǒng)是否可調(diào)度的信息及輸出不可調(diào)度的原因。
作為一種改進(jìn),所述的任務(wù)和任務(wù)/任務(wù)和定時(shí)器之間的通訊,包括一個(gè)任務(wù)對(duì)另一個(gè)任務(wù)發(fā)送事件的通訊、一個(gè)任務(wù)激活另一個(gè)任務(wù)的通訊和任務(wù)對(duì)定時(shí)器的控制關(guān)系。
作為一種改進(jìn),所述的對(duì)有向圖執(zhí)行算法仿真包括以下步驟(1)設(shè)定模擬時(shí)間長(zhǎng)度,生成時(shí)間序列,把在開始狀態(tài)就緒的任務(wù)加入到就緒隊(duì)列中,令當(dāng)前執(zhí)行時(shí)間為0;(2)判斷模擬時(shí)間是否到,如果模擬時(shí)間到,則結(jié)束;(3)在就緒隊(duì)列中找到優(yōu)先級(jí)最高的任務(wù),為當(dāng)前執(zhí)行任務(wù)集;如果就緒隊(duì)列為空,則返回-1;(4)如果(3)的返回值為-1,則將-1賦給時(shí)間序列中當(dāng)前執(zhí)行時(shí)間列;否則,對(duì)當(dāng)前執(zhí)行任務(wù)集進(jìn)行處理,處理完以后恢復(fù)對(duì)任務(wù)處理時(shí)刪除的邊;當(dāng)前執(zhí)行時(shí)間加1;轉(zhuǎn)至(2)執(zhí)行。
作為一種改進(jìn),上述算法中所涉及的對(duì)當(dāng)前執(zhí)行任務(wù)集進(jìn)行處理的算法如下(1)判斷當(dāng)前執(zhí)行任務(wù)集是否是可搶占的任務(wù)集,如果不可搶占跳到步驟(7)執(zhí)行;(2)得到當(dāng)前任務(wù)集的目前執(zhí)行子任務(wù),為當(dāng)前執(zhí)行子任務(wù),把它的執(zhí)行時(shí)間加1,并且判斷它是否執(zhí)行完成,如果沒(méi)有則跳到步驟(6)執(zhí)行;(3)把當(dāng)前執(zhí)行任務(wù)集的目前執(zhí)行子任務(wù)標(biāo)記加1,如果下一個(gè)子任務(wù)等待或者當(dāng)前執(zhí)行子任務(wù)為當(dāng)前執(zhí)行任務(wù)集的最后一個(gè)子任務(wù),當(dāng)前執(zhí)行任務(wù)集任務(wù)集等待;(4)如果當(dāng)前執(zhí)行子任務(wù)激活時(shí)鐘,把時(shí)鐘激活,且把這條激活邊刪去;(5)判斷當(dāng)前執(zhí)行子任務(wù)有沒(méi)有控制其他子任務(wù)的邊,若有,對(duì)這些邊進(jìn)行逐條地處理如是設(shè)置事件邊,將邊刪除,判斷此時(shí)被控子任務(wù)所在的任務(wù)集是否就緒;如果是激活任務(wù)邊,且被激活子任務(wù)所在的任務(wù)集等待且它的當(dāng)前執(zhí)行子任務(wù)為第一個(gè)子任務(wù),把這個(gè)任務(wù)集置為就緒;
(6)將當(dāng)前執(zhí)行任務(wù)的序號(hào)賦給執(zhí)行序列的當(dāng)前執(zhí)行時(shí)間列,跳至步驟(14);(7)判斷本次執(zhí)行當(dāng)前任務(wù)集的子任務(wù)是否執(zhí)行完,如果執(zhí)行完,則跳至步驟(13);(8)如果當(dāng)前執(zhí)行子任務(wù)等待,跳至步驟(13);(9)判斷當(dāng)前執(zhí)行子任務(wù)是否執(zhí)行完,如果執(zhí)行完,則跳至步驟(11);如果沒(méi)有,將當(dāng)前執(zhí)行任務(wù)的序號(hào)賦給執(zhí)行序列的當(dāng)前執(zhí)行時(shí)間列;(10)把當(dāng)前執(zhí)行時(shí)間中能夠激活的任務(wù)激活,當(dāng)前執(zhí)行時(shí)間加1,跳到步驟(9);(11)如果當(dāng)前執(zhí)行子任務(wù)激活時(shí)鐘,把時(shí)鐘激活,且把相應(yīng)的激活變刪除;(12)判斷當(dāng)前執(zhí)行子任務(wù)有沒(méi)有控制其他子任務(wù)的邊,若有,對(duì)這些邊進(jìn)行逐條地處理如是設(shè)置事件邊,將邊刪除,判斷此時(shí)被控子任務(wù)所在的任務(wù)集是否就緒;如果是激活任務(wù)邊,且被激活子任務(wù)所在的任務(wù)集等待且它的當(dāng)前執(zhí)行子任務(wù)為第一個(gè)子任務(wù),把這個(gè)任務(wù)集置為就緒;跳回到步驟(7);(13)把當(dāng)前執(zhí)行任務(wù)集從就緒隊(duì)列中刪除,如果run的子任務(wù)執(zhí)行完,執(zhí)行子任務(wù)標(biāo)記置0,當(dāng)前執(zhí)行時(shí)間-1;(14)結(jié)束。
作為一種改進(jìn),判斷邊是任務(wù)激活邊還是設(shè)置時(shí)間邊的依據(jù)如下如果該邊的源節(jié)點(diǎn)是任務(wù)集的第一個(gè)子任務(wù),那么該邊是任務(wù)激活邊;反之是設(shè)置時(shí)間邊。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是(1)本發(fā)明對(duì)任務(wù)的執(zhí)行順序進(jìn)行詳細(xì)的模擬,具有很好的預(yù)測(cè)性,可靠性,易用性。
(2)本發(fā)明是基于模型的,也就是在模型建立好以后,代碼生成以前的階段,來(lái)模擬任務(wù)集的執(zhí)行順序,這樣就使得用戶可以更好的把握建模的過(guò)程,消除了因建模的出問(wèn)題而影響全局的情況,大大節(jié)省了軟件開發(fā)的時(shí)間。
(3)本發(fā)明是通過(guò)模擬仿真來(lái)對(duì)任務(wù)集的可調(diào)度性進(jìn)行分析的,他消除了以往的可調(diào)度性分析只給一個(gè)比較籠統(tǒng),比較模糊的結(jié)果的不良方面。
(4)本發(fā)明把仿真模擬得到的任務(wù)執(zhí)行序列交給用戶,使得可調(diào)度行分析更具可行性,更加可視化。
(5)本發(fā)明輸出內(nèi)容詳盡,界面友好。
圖1是本發(fā)明算法的總體結(jié)構(gòu)圖。
圖2是本發(fā)明可搶占的多個(gè)任務(wù)控制一個(gè)任務(wù)示意圖。
圖3是對(duì)圖2分割后的結(jié)果示意圖。
圖4是本發(fā)明用戶對(duì)圖3加邊處理后的結(jié)果示意圖。
圖5是本發(fā)明任務(wù)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)示意圖。
圖6是本發(fā)明子任務(wù)集的數(shù)據(jù)結(jié)構(gòu)示意圖。
圖7是本發(fā)明有向圖的數(shù)據(jù)結(jié)構(gòu)示意圖。
圖8本發(fā)明有向圖遍歷的基本算法示意圖。
圖9是本發(fā)明對(duì)任務(wù)的處理示意圖。
圖10本發(fā)明的運(yùn)行結(jié)果示意圖。
圖11是本發(fā)明模型圖。
圖12是本發(fā)明模型中個(gè)任務(wù)和定時(shí)器的狀態(tài)示意圖。
圖13是本發(fā)明時(shí)序圖。
具體實(shí)施例方式
結(jié)合附圖,下面對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明。
本發(fā)明解決了在實(shí)時(shí)多任務(wù)操作系統(tǒng)建模中對(duì)多個(gè)任務(wù)的可調(diào)度性進(jìn)行分析的問(wèn)題,提供了一種基于模型的實(shí)時(shí)系統(tǒng)的可調(diào)度性分析方法,從而增加了所開發(fā)系統(tǒng)的可靠性,節(jié)省了用戶的軟件開發(fā)周期,大大提高了用戶的開發(fā)效率。
本發(fā)明的主要原理和特征如下一、本發(fā)明是基于模型的可調(diào)度性時(shí)間分析。也就是說(shuō)本發(fā)明是在用戶通過(guò)一定的工具進(jìn)行建模以后,利用本發(fā)明以及實(shí)現(xiàn)本發(fā)明的系統(tǒng)了解其所建的任務(wù)集的執(zhí)行順序或者進(jìn)行可調(diào)度行時(shí)間分析。這樣用戶就可以更加直觀的了解任務(wù)的執(zhí)行情況,提高設(shè)計(jì)和開發(fā)的效率。
本發(fā)明是利用模擬仿真的原理,有較大的算法難度、邏輯難度和實(shí)現(xiàn)難度,但是本發(fā)明能給出詳盡的任務(wù)執(zhí)行順序的信息。相比之下,一般的可調(diào)度分析只能夠給出一個(gè)較為籠統(tǒng),較為模糊的信息。從這個(gè)層面上講,本發(fā)明進(jìn)一步減少了用戶開發(fā)的難度,增加了用戶所開發(fā)系統(tǒng)的可靠性。
二、本發(fā)明的主要技術(shù)實(shí)現(xiàn)步驟如下1、建立系統(tǒng)模型。
本發(fā)明的第一步就是要在用戶使用的某一個(gè)特定的建模工具上建立模型。模型可以包含三個(gè)方面特性A)、任務(wù);B)、定時(shí)器;C)、任務(wù)和任務(wù)/任務(wù)和定時(shí)器之間的通訊。其中,任務(wù)和任務(wù)/任務(wù)和定時(shí)器之間的通訊主要包括一個(gè)任務(wù)對(duì)另一個(gè)任務(wù)發(fā)送事件的通訊(通過(guò)兩個(gè)APIsetEvent()和waitEvent()實(shí)現(xiàn))、一個(gè)任務(wù)激活另一個(gè)任務(wù)的通訊(通過(guò)APIactiveTask()來(lái)實(shí)現(xiàn))和任務(wù)對(duì)定時(shí)器的控制關(guān)系(通過(guò)APIsetAlarm()來(lái)實(shí)現(xiàn))。如圖11是一個(gè)建好的模型。
2、以系統(tǒng)模型作為輸入,進(jìn)行任務(wù)分割。
由于存在任務(wù)和任務(wù)/任務(wù)和定時(shí)器之間的通訊,如果某個(gè)任務(wù)是可搶占的,那么在執(zhí)行完任意一個(gè)API的時(shí)候,這個(gè)任務(wù)都有被搶占的可能性。所以在執(zhí)行完任意一個(gè)API以后,任務(wù)都應(yīng)該被暫停執(zhí)行,由系統(tǒng)去觀察有沒(méi)有比它的優(yōu)先級(jí)更高的任務(wù)在就緒隊(duì)列,如果有的話就要搶占本任務(wù)的執(zhí)行權(quán)力,把執(zhí)行的權(quán)力交給優(yōu)先級(jí)最高的就緒任務(wù)。正是這種情況給任務(wù)集的執(zhí)行順序的模擬仿真增添了不少技術(shù)難度,而本發(fā)明通過(guò)任務(wù)分割的辦法很好的解決了這個(gè)問(wèn)題。
進(jìn)行任務(wù)分割通過(guò)任務(wù)分割算法實(shí)現(xiàn),所述任務(wù)分割算法如下不管任務(wù)是否可以搶占,把任務(wù)分割成為n個(gè)。其中n=任務(wù)的入度+任務(wù)的出度-1-入邊中激活任務(wù)邊的條數(shù)。
如圖2所示,這是一個(gè)簡(jiǎn)單的模型。從模型中我們可以看到任務(wù)1和任務(wù)3以及任務(wù)2和任務(wù)3之間分別存在以事件設(shè)置和事件等待實(shí)現(xiàn)的事件控制關(guān)系。假設(shè)任務(wù)1是可搶占的,任務(wù)2是不可搶占的。那么根據(jù)任務(wù)分割算法,圖2經(jīng)過(guò)分割以后可以生成如圖3所示的模型圖。在這里我們把未經(jīng)過(guò)分割的任務(wù)稱為父任務(wù);父任務(wù)分割后得到的任務(wù)稱為子任務(wù);一個(gè)父任務(wù)的所有子任務(wù)稱為這個(gè)父任務(wù)的子任務(wù)集。
圖3中的信息是我們可以確定的信息,其中包括任務(wù)2、任務(wù)1和任務(wù)3分別被分割成2、2、3個(gè)子任務(wù),以及各子任務(wù)集內(nèi)的控制關(guān)系。這種控制關(guān)系是一種順序的控制關(guān)系。但是,到目前為止,我們還不能確定這些子任務(wù)集之間的控制關(guān)系,即是由于父任務(wù)之間存在的通訊關(guān)系而在這些子任務(wù)集之間存在的先后執(zhí)行的關(guān)系,如任務(wù)21后可以執(zhí)行任務(wù)3的那個(gè)子任務(wù)?任務(wù)11后可以執(zhí)行任務(wù)3的那個(gè)子任務(wù)?那么這些先后執(zhí)行的關(guān)系就須要用戶根據(jù)所建立模型的具體情況來(lái)手動(dòng)加邊。加邊后的情況如圖4所示,圖中虛線部分表示用戶加的邊。
經(jīng)過(guò)用戶加邊以及形成的圖,每一條邊都表示一種先后執(zhí)行的關(guān)系,箭頭的源節(jié)點(diǎn)(子任務(wù))運(yùn)行完以后就可以執(zhí)行箭頭的目標(biāo)節(jié)點(diǎn)(子任務(wù))。這樣的圖我們稱為時(shí)序圖(sequence圖)。
雖然時(shí)序圖中所有的邊都表示子任務(wù)之間的先后執(zhí)行的關(guān)系,但是根據(jù)他們的先后控制的方式我們可以把他們分成兩類與邊和或邊?;蜻吺侵冈谥赶蛲粋€(gè)子任務(wù)的所有功能相同的邊中,只要有一條邊得以實(shí)現(xiàn)就可以執(zhí)行下一個(gè)任務(wù);所有的子任務(wù)集之間的通訊都是或邊。與邊是指進(jìn)入同一個(gè)子任務(wù)的所有邊都完成以后才能執(zhí)行下一個(gè)任務(wù);所有子任務(wù)集內(nèi)部的表示順序關(guān)系的邊都是與邊。
3、設(shè)計(jì)模擬用數(shù)據(jù)結(jié)構(gòu)。
本發(fā)明的中心思想就是要將時(shí)序圖中的任務(wù)和各任務(wù)之間的相互關(guān)系用有向圖的形式表現(xiàn)出來(lái),而后再對(duì)這一張有向圖進(jìn)行遍歷。那么我們現(xiàn)在的工作就是要設(shè)計(jì)好數(shù)據(jù)結(jié)構(gòu),把時(shí)序圖中的信息合理的組織起來(lái)。以方便此后對(duì)關(guān)系圖進(jìn)行遍歷。
在本發(fā)明中,我們?cè)O(shè)計(jì)的模擬用數(shù)據(jù)結(jié)構(gòu)從總體上分為三大部分任務(wù)節(jié)點(diǎn)、子任務(wù)集和有向圖。
(1)子任務(wù)節(jié)點(diǎn)類,如圖5,其中Name類String的實(shí)例,表示本子任務(wù)的名字;Lenint型實(shí)例變量,表示本子任務(wù)一次執(zhí)行的執(zhí)行時(shí)間;nowRunTimeint型實(shí)例變量,表示目前本子任務(wù)本次已執(zhí)行的時(shí)間;fatherTask類String的實(shí)例,表示本子任務(wù)的父節(jié)點(diǎn)的名字。
(2)子任務(wù)集類,如圖6,其中Cycleint型實(shí)例變量,表示本任務(wù)集的定時(shí)器,即定時(shí)器第一次啟動(dòng)后每隔多少時(shí)間任務(wù)啟動(dòng)一次;alarmStartTimeint型實(shí)例變量,記錄時(shí)鐘被激活的時(shí)間;alarmTimeint型實(shí)例變量,表示子任務(wù)集定時(shí)器激活以后第一次啟動(dòng)的時(shí)間;proprityint型實(shí)例變量,表示子任務(wù)集的優(yōu)先級(jí);SnatchOrNot布爾型實(shí)例變量,表示子任務(wù)集是否可搶占;autoStart布爾型實(shí)例變量,表示子任務(wù)集是否可以自啟動(dòng);alarmAutoStart布爾型實(shí)例變量,表示子任務(wù)集的時(shí)鐘是否可以自啟動(dòng);lengthint型的實(shí)例變量,表示子任務(wù)集的長(zhǎng)度;nowRunTaskIndexint型實(shí)例變量,表示子任務(wù)集當(dāng)前執(zhí)行的子任務(wù)的下標(biāo);subTaskList類Vector的實(shí)例,表示子任務(wù)集包括的子任務(wù)序列;fatherName類String的實(shí)例,表示父節(jié)點(diǎn)的名字;在前面我們已經(jīng)描述過(guò),子任務(wù)表示一個(gè)任務(wù)在分割以后所有子任務(wù)的集合,那么我們可以把所有的子任務(wù)的共同屬性集合到子任務(wù)集數(shù)據(jù)結(jié)構(gòu)中。這樣即節(jié)約內(nèi)存空間又方便遍歷。
alarmStartTimeint型的變量,用于記錄子任務(wù)集的定時(shí)器的激活時(shí)間。
(3)有向圖類,如圖7,其中nodeNumint型實(shí)例變量,記錄時(shí)序圖中的子任務(wù)數(shù)目;sNodeNumint型實(shí)例變量,記錄靜態(tài)圖中父任務(wù)的數(shù)目;nodeList[]SNode類型的數(shù)組,數(shù)組長(zhǎng)度為nodeNum,用于存儲(chǔ)所有子節(jié)點(diǎn)的序列;subTaskSetList[]NodeList類型的數(shù)組,數(shù)組長(zhǎng)度為sNodeNum,用于存貯所有任務(wù)集;graph[nodeNum][nodeNum]int型的二維數(shù)組,數(shù)組的行數(shù)和列數(shù)都是nodeNum,graph是鄰接矩陣,用于存儲(chǔ)時(shí)序圖中各各子節(jié)點(diǎn)之間的所有的或邊,在這里我們并不需要存儲(chǔ)與邊,因?yàn)槲覀兡茉谧尤蝿?wù)集類中表示與邊的情況。
readyList[]int類型的數(shù)組,數(shù)組長(zhǎng)度為sNodeNum+1,表示就緒隊(duì)列,在相應(yīng)的某一位上的值為0,表示沒(méi)有就緒,1表示就緒,ReadList[sNodeNum]的數(shù)字表示當(dāng)前有多少個(gè)就緒任務(wù);
timeList[]int類型的數(shù)組,表示時(shí)間序列,用于記錄每個(gè)毫秒的任務(wù)執(zhí)行情況;alarmGraph[nodeNum][]int型的二維數(shù)組,數(shù)組的行數(shù)和列數(shù)分別是nodeNum和sNodeNum、alarmGraph是鄰接矩陣,用以表示任務(wù)和定時(shí)器的從屬關(guān)系的情況。
4、對(duì)有向圖執(zhí)行算法進(jìn)行仿真,得到結(jié)果執(zhí)行序列。
在執(zhí)行仿真算法以前,要設(shè)置就緒隊(duì)列。在一般情況和最差情況下設(shè)置就緒隊(duì)列的算法為在一般情況下,將自啟動(dòng)的任務(wù)放入就緒隊(duì)列;在最差情況下,將入讀為零的任務(wù)放入就緒隊(duì)列。
對(duì)有向圖執(zhí)行算法進(jìn)行仿真具體描述如下第一步,設(shè)定合適的模擬時(shí)間長(zhǎng)度runTime,生成時(shí)間序列timeList;把在開始狀態(tài)就緒的任務(wù)加入到就緒對(duì)了中去;令當(dāng)前時(shí)間i=0。
第二步,判斷模擬時(shí)間是否到,如果模擬時(shí)間到,則結(jié)束。
第三步,在就緒隊(duì)列中找到優(yōu)先級(jí)最高的任務(wù)集的序號(hào)run,如果就緒隊(duì)列為空,則返回-1。
第四步,如果run為-1,則timeList[i]=-1;否則,對(duì)當(dāng)前執(zhí)行任務(wù)集run進(jìn)行處理(具體處理算法如圖9),處理完以后恢復(fù)對(duì)任務(wù)處理時(shí)刪除的邊;模擬時(shí)間i++;轉(zhuǎn)至第二步執(zhí)行。
其中,考慮是否是就緒任務(wù)的準(zhǔn)則就是任務(wù)集的第nowRunTaskIndex(初始化為零)個(gè)子任務(wù)的在graph圖中的入度是否為零。同時(shí),考慮到模擬仿真序列的完整性,本發(fā)明把模擬的總時(shí)間考慮得盡量合理?,F(xiàn)在的公式是所有任務(wù)的定時(shí)器的最小公倍數(shù)×任務(wù)的個(gè)數(shù)。算法的流程如圖8所示。
圖8對(duì)算法總體上進(jìn)行了描述,但是對(duì)如何對(duì)當(dāng)前任務(wù)進(jìn)行處理還沒(méi)有詳細(xì)的說(shuō)明,下面是處理當(dāng)前任務(wù)的算法第一步,判斷當(dāng)前執(zhí)行任務(wù)集run是否是可搶占的任務(wù)集,如果不可搶占跳到第七步執(zhí)行。
第二步,得到當(dāng)前任務(wù)集(即第run個(gè)任務(wù))的目前執(zhí)行子任務(wù)(第nowRunTaskIndex個(gè)子任務(wù))nowNode,把它的執(zhí)行時(shí)間加1,并且判斷它是否執(zhí)行完成,如果沒(méi)有則跳到第六步執(zhí)行。
第三步,把當(dāng)前執(zhí)行任務(wù)集的目前執(zhí)行子任務(wù)標(biāo)記(nowRunTaskIndex)加1,如果下一個(gè)子任務(wù)等待或者當(dāng)前子任務(wù)為run任務(wù)集的最后一個(gè)子任務(wù),run任務(wù)集等待。
第四步,如果當(dāng)前執(zhí)行子任務(wù)激活時(shí)鐘,把時(shí)鐘激活,且把taskGraph中相應(yīng)位置零。
第五步,判斷當(dāng)前執(zhí)行子任務(wù)有沒(méi)有控制其他子任務(wù)的邊。如果有,對(duì)這些邊進(jìn)行逐條地處理如是setEvent邊,將邊刪除,判斷此時(shí)被控子任務(wù)所在的任務(wù)集是否就緒;如果是activeTask邊,且被激活子任務(wù)所在的任務(wù)集等待且它的當(dāng)前執(zhí)行子任務(wù)為第一個(gè)子任務(wù),把這個(gè)任務(wù)集置為就緒①。
第六步,記錄任務(wù)執(zhí)行情況的時(shí)間序列timeList[i]=run。跳至第十三步。
第七步,判斷本次執(zhí)行當(dāng)前(run)任務(wù)集的子任務(wù)是否執(zhí)行完,如果執(zhí)行完,則跳至第十二步。
第八步,得到當(dāng)前執(zhí)行子任務(wù)nowNode,如果nowNode等待,跳至第十二步。
第九步,判斷nowNode是否執(zhí)行完,如果執(zhí)行完,則跳至第十一步;如果沒(méi)有令timeList[i]=run。
第十步,把i毫秒能夠激活的任務(wù)激活,i++;跳到第九步。
第十一步,如果當(dāng)前執(zhí)行子任務(wù)激活時(shí)鐘,把時(shí)鐘激活,且把taskGraph中相應(yīng)位置零。
第十二步,判斷當(dāng)前執(zhí)行子任務(wù)有沒(méi)有控制其他子任務(wù)的邊。如果有,對(duì)這些邊進(jìn)行逐條地處理如是setEvent邊,將邊刪除,判斷此時(shí)被控子任務(wù)所在的任務(wù)集是否就緒;如果是activeTask邊,且被激活子任務(wù)所在的任務(wù)集等待且它的當(dāng)前執(zhí)行子任務(wù)為第一個(gè)子任務(wù),把這個(gè)任務(wù)集置為就緒①。跳回到第七步。
第十三步,把run從就緒隊(duì)列中刪除,如果run的子任務(wù)執(zhí)行完,執(zhí)行子任務(wù)標(biāo)記置0,i--。
其中在算法第五步和第十二步的①標(biāo)志處,對(duì)一條邊是setEvent()還是activeTask()邊的判斷依據(jù)如下如果某條邊的source節(jié)點(diǎn)是任務(wù)集的第一個(gè)子任務(wù),即子任務(wù)名的最后一個(gè)字符為“1”,那么這條邊是activeTask()邊;反之是setEvent()邊。
5、輸出模擬結(jié)果。
在本發(fā)明中,把結(jié)果以在新建的界面上畫圖的形式來(lái)展現(xiàn)給用戶。在輸出模擬結(jié)果的界面中,提供給用戶提供了最差和一般兩種情況下的三大結(jié)果(1)每個(gè)時(shí)刻執(zhí)行的任務(wù)信息;(2)每個(gè)任務(wù)的執(zhí)行時(shí)間和CPU的空閑時(shí)間;(3)系統(tǒng)是否可調(diào)度的信息并且輸出不可調(diào)度的原因。其中每個(gè)任務(wù)都有一條執(zhí)行序列的顯示圖,白色表示沒(méi)有執(zhí)行,黑色表示在當(dāng)前時(shí)候執(zhí)行,其中還有可以放大和縮小的選擇框和按鈕,以方便用戶使用本發(fā)明。
具體實(shí)施例如圖11所示。圖中有兩個(gè)定時(shí)器和四個(gè)任務(wù),他們的屬性分別見圖12。另外Task1以setavtive()的方式控制Task2,Task2以setavtive()的方式控制Task3,Task3以setavtive()的方式控制Task4。Task3以setAlarm()控制alarm2,alarm1是自啟動(dòng)的。
其次,在轉(zhuǎn)化成時(shí)序圖的過(guò)程中。根據(jù)任務(wù)分割的算法,我們把Task1、Task2、Task3和Task4分別分割成2、3、3、2個(gè)子任務(wù),他們的分割的情況和設(shè)置執(zhí)行時(shí)間如表
另外,再更加模型的具體情況。加上T11到T21、T21到T31、T32到T41、T31到alarm1的邊,就形成了如圖13的時(shí)序圖。
最后,用算法來(lái)遍歷時(shí)序圖。生成的結(jié)果如圖10所示。
最后,還需要注意的是,以上列舉的僅是本發(fā)明的一個(gè)具體實(shí)施例。顯然,本發(fā)明不限于以上實(shí)施例,還可以有許多變形。本領(lǐng)域的普通技術(shù)人員能從本發(fā)明公開的內(nèi)容直接導(dǎo)出或聯(lián)想到的所有變形,均應(yīng)認(rèn)為是本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種基于模型的實(shí)時(shí)系統(tǒng)的可調(diào)度性分析方法,其特征在于,包括以下步驟(1)建立系統(tǒng)模型通過(guò)建模工具建立系統(tǒng)模型,系統(tǒng)模型包含三個(gè)方面任務(wù)、定時(shí)器、任務(wù)和任務(wù)/任務(wù)和定時(shí)器之間的通訊;(2)以系統(tǒng)模型作為輸入,進(jìn)行任務(wù)分割進(jìn)行任務(wù)分割通過(guò)任務(wù)分割算法實(shí)現(xiàn),所述的任務(wù)分割算法如下把任務(wù)分割成n個(gè),其中n=任務(wù)的入度+任務(wù)的出度-1-入邊中激活任務(wù)的邊的條數(shù);未經(jīng)過(guò)分割的任務(wù)稱為父任務(wù),父任務(wù)分割后得到的任務(wù)稱為子任務(wù);一個(gè)父任務(wù)的所有子任務(wù)稱為這個(gè)父任務(wù)的子任務(wù)集;根據(jù)系統(tǒng)模型的具體情況,對(duì)父任務(wù)和子任務(wù)進(jìn)行手動(dòng)加邊形成時(shí)序圖;(3)設(shè)計(jì)模擬用數(shù)據(jù)結(jié)構(gòu)根據(jù)時(shí)序圖中的任務(wù)和各任務(wù)之間的相互關(guān)系設(shè)計(jì)模擬用數(shù)據(jù)結(jié)構(gòu),把時(shí)序圖中的信息組織成有向圖;模擬用數(shù)據(jù)結(jié)構(gòu)分為三部分任務(wù)節(jié)點(diǎn)、子任務(wù)集和有向圖;(4)對(duì)有向圖執(zhí)行算法進(jìn)行仿真,得到結(jié)果執(zhí)行序列在執(zhí)行仿真算法以前,要設(shè)置就緒隊(duì)列;在一般情況和最差情況下設(shè)置就緒隊(duì)列的算法為在一般情況下,將自啟動(dòng)的任務(wù)放入就緒隊(duì)列;在最差情況下,將入讀為零的任務(wù)放入就緒隊(duì)列;對(duì)就緒隊(duì)列設(shè)置完畢后,對(duì)有向圖執(zhí)行算法進(jìn)行仿真;(5)輸出模擬結(jié)果結(jié)果以在界面上畫圖的形式來(lái)展現(xiàn)給用戶,在輸出模擬結(jié)果的界面中,提供了最差和一般兩種情況下的三大結(jié)果每個(gè)時(shí)刻執(zhí)行的任務(wù)信息、每個(gè)任務(wù)的執(zhí)行時(shí)間及CPU的空閑時(shí)間和系統(tǒng)是否可調(diào)度的信息及輸出不可調(diào)度的原因。
2.根據(jù)權(quán)利要求1所述的一種基于模型的實(shí)時(shí)系統(tǒng)的可調(diào)度性分析方法,其特征在于,所述的任務(wù)和任務(wù)/任務(wù)和定時(shí)器之間的通訊,包括一個(gè)任務(wù)對(duì)另一個(gè)任務(wù)發(fā)送事件的通訊、一個(gè)任務(wù)激活另一個(gè)任務(wù)的通訊和任務(wù)對(duì)定時(shí)器的控制關(guān)系。
3.根據(jù)權(quán)利要求1所述的一種基于模型的實(shí)時(shí)系統(tǒng)的可調(diào)度性分析方法,其特征在于,所述的對(duì)有向圖執(zhí)行算法仿真包括以下步驟(1)設(shè)定模擬時(shí)間長(zhǎng)度,生成時(shí)間序列,把在開始狀態(tài)就緒的任務(wù)加入到就緒隊(duì)列中,令當(dāng)前執(zhí)行時(shí)間為0;(2)判斷模擬時(shí)間是否到,如果模擬時(shí)間到,則結(jié)束;(3)在就緒隊(duì)列中找到優(yōu)先級(jí)最高的任務(wù),為當(dāng)前執(zhí)行任務(wù)集;如果就緒隊(duì)列為空,則返回-1;(4)如果(3)的返回值為-1,則將-1賦給時(shí)間序列中當(dāng)前執(zhí)行時(shí)間列;否則,對(duì)當(dāng)前執(zhí)行任務(wù)集進(jìn)行處理,處理完以后恢復(fù)對(duì)任務(wù)處理時(shí)刪除的邊;當(dāng)前執(zhí)行時(shí)間加1;轉(zhuǎn)至(2)執(zhí)行。
4.根據(jù)權(quán)利要求3所述的一種基于模型的實(shí)時(shí)系統(tǒng)的可調(diào)度性分析方法,其特征在于,所述的對(duì)當(dāng)前執(zhí)行任務(wù)集進(jìn)行處理包括以下步驟(1)判斷當(dāng)前執(zhí)行任務(wù)集是否是可搶占的任務(wù)集,如果不可搶占跳到步驟(7)執(zhí)行;(2)得到當(dāng)前任務(wù)集的目前執(zhí)行子任務(wù),為當(dāng)前執(zhí)行子任務(wù),把它的執(zhí)行時(shí)間加1,并且判斷它是否執(zhí)行完成,如果沒(méi)有則跳到步驟(6)執(zhí)行;(3)把當(dāng)前執(zhí)行任務(wù)集的目前執(zhí)行子任務(wù)標(biāo)記加1,如果下一個(gè)子任務(wù)等待或者當(dāng)前執(zhí)行子任務(wù)為當(dāng)前執(zhí)行任務(wù)集的最后一個(gè)子任務(wù),當(dāng)前執(zhí)行任務(wù)集任務(wù)集等待;(4)如果當(dāng)前執(zhí)行子任務(wù)激活時(shí)鐘,把時(shí)鐘激活,且把這條激活邊刪去;(5)判斷當(dāng)前執(zhí)行子任務(wù)有沒(méi)有控制其他子任務(wù)的邊,若有,對(duì)這些邊進(jìn)行逐條地處理如是設(shè)置事件邊,將邊刪除,判斷此時(shí)被控子任務(wù)所在的任務(wù)集是否就緒;如果是激活任務(wù)邊,且被激活子任務(wù)所在的任務(wù)集等待且它的當(dāng)前執(zhí)行子任務(wù)為第一個(gè)子任務(wù),把這個(gè)任務(wù)集置為就緒;(6)將當(dāng)前執(zhí)行任務(wù)的序號(hào)賦給執(zhí)行序列的當(dāng)前執(zhí)行時(shí)間列,跳至步驟(14);(7)判斷本次執(zhí)行當(dāng)前任務(wù)集的子任務(wù)是否執(zhí)行完,如果執(zhí)行完,則跳至步驟(13);(8)如果當(dāng)前執(zhí)行子任務(wù)等待,跳至步驟(13);(9)判斷當(dāng)前執(zhí)行子任務(wù)是否執(zhí)行完,如果執(zhí)行完,則跳至步驟(11);如果沒(méi)有,將當(dāng)前執(zhí)行任務(wù)的序號(hào)賦給執(zhí)行序列的當(dāng)前執(zhí)行時(shí)間列;(10)把當(dāng)前執(zhí)行時(shí)間中能夠激活的任務(wù)激活,當(dāng)前執(zhí)行時(shí)間加1,跳到步驟(9);(11)如果當(dāng)前執(zhí)行子任務(wù)激活時(shí)鐘,把時(shí)鐘激活,且把相應(yīng)的激活變刪除;(12)判斷當(dāng)前執(zhí)行子任務(wù)有沒(méi)有控制其他子任務(wù)的邊,若有,對(duì)這些邊進(jìn)行逐條地處理如是設(shè)置事件邊,將邊刪除,判斷此時(shí)被控子任務(wù)所在的任務(wù)集是否就緒;如果是激活任務(wù)邊,且被激活子任務(wù)所在的任務(wù)集等待且它的當(dāng)前執(zhí)行子任務(wù)為第一個(gè)子任務(wù),把這個(gè)任務(wù)集置為就緒;跳回到步驟(7);(13)把當(dāng)前執(zhí)行任務(wù)集從就緒隊(duì)列中刪除,如果run的子任務(wù)執(zhí)行完,執(zhí)行子任務(wù)標(biāo)記置0,當(dāng)前執(zhí)行時(shí)間-1;(14)結(jié)束。
5.根據(jù)權(quán)利要求4所述的一種基于模型的實(shí)時(shí)系統(tǒng)的可調(diào)度性分析方法,其特征在于,判斷邊是任務(wù)激活邊還是設(shè)置時(shí)間邊的依據(jù)如下如果該邊的源節(jié)點(diǎn)是任務(wù)集的第一個(gè)子任務(wù),那么該邊是任務(wù)激活邊;反之是設(shè)置時(shí)間邊。
全文摘要
本發(fā)明涉及嵌入式實(shí)時(shí)系統(tǒng)的模擬仿真技術(shù),旨在提供一種基于模型的實(shí)時(shí)系統(tǒng)的可調(diào)度性分析方法。該方法包括以下步驟(1)建立系統(tǒng)模型;(2)以系統(tǒng)模型作為輸入,進(jìn)行任務(wù)分割;(3)設(shè)計(jì)模擬用數(shù)據(jù)結(jié)構(gòu);(4)對(duì)有向圖執(zhí)行算法進(jìn)行仿真,得到結(jié)果執(zhí)行序列;(5)輸出模擬結(jié)果。本發(fā)明對(duì)任務(wù)的執(zhí)行順序進(jìn)行詳細(xì)的模擬,具有很好的預(yù)測(cè)性,可靠性,易用性;節(jié)省了軟件開發(fā)的時(shí)間;消除了以往的可調(diào)度性分析只給一個(gè)比較籠統(tǒng),比較模糊的結(jié)果的不良方面;本發(fā)明使得可調(diào)度行分析更具可行性,更加可視化,輸出內(nèi)容詳盡,界面友好。
文檔編號(hào)G06F9/455GK101013384SQ20071006722
公開日2007年8月8日 申請(qǐng)日期2007年2月8日 優(yōu)先權(quán)日2007年2月8日
發(fā)明者楊國(guó)青, 李紅, 周炎淼, 吳朝暉, 趙民德 申請(qǐng)人:浙江大學(xué)