新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一種實(shí)時(shí)多任務(wù)系統(tǒng)軟件設(shè)計(jì)方法

一種實(shí)時(shí)多任務(wù)系統(tǒng)軟件設(shè)計(jì)方法

作者: 時(shí)間:2016-09-12 來(lái)源:網(wǎng)絡(luò) 收藏

3 總體模型

綜上所述,一個(gè)完整的、嚴(yán)格按“前向分支”原則進(jìn)行線程拆分和進(jìn)程調(diào)度的多任務(wù)系統(tǒng)模型可以歸納為圖5所示的結(jié)構(gòu)。該模型由三部分構(gòu)成:主循環(huán)、分屬于不同進(jìn)程的“前向分支”的連程以及一個(gè)基礎(chǔ)定時(shí)中斷程序。該模型結(jié)構(gòu)最大的特點(diǎn)是:除了主循環(huán)中最后一個(gè)回跳以外,其它任何地方都不存在循環(huán)結(jié)構(gòu)。換言之,系統(tǒng)中所有的循環(huán)“反向”轉(zhuǎn)跳,都被歸并成了主循環(huán)中的一個(gè)回跳。這樣的結(jié)構(gòu)能使主循環(huán)在各進(jìn)程間快速地切換,有利于提高CPU的利用率,改善系統(tǒng)的響應(yīng),使得各進(jìn)程能夠得到及時(shí)、均勻、公平的服務(wù)。同時(shí),基礎(chǔ)定時(shí)中斷程序也完全是“前向分支”結(jié)構(gòu),有利于減少對(duì)CPU的占用。

考慮到各進(jìn)程對(duì)響應(yīng)時(shí)間和服務(wù)頻度的不同要求,在該模型中設(shè)置了對(duì)各進(jìn)程進(jìn)行定時(shí)同步的功能。在基礎(chǔ)定時(shí)中斷服務(wù)程序中增加了同步定時(shí)器cTimerSyn_i和同步定時(shí)標(biāo)志fTimerSyn_i。同步定時(shí)器和動(dòng)作定時(shí)器構(gòu)成了基礎(chǔ)定時(shí)中斷服務(wù)程序的主體。

基礎(chǔ)定時(shí)中斷的中斷間隔時(shí)間按所有定時(shí)任務(wù)的最大公約數(shù)來(lái)選取,所選取中斷間隔時(shí)間越大,對(duì)CPU的占用越少,越有利于系統(tǒng)效率的提高。

進(jìn)程定時(shí)同步的本質(zhì)是為了不同響應(yīng)時(shí)間需求的任務(wù)安排不同的服務(wù)頻度。降低低優(yōu)先級(jí)任務(wù)的服務(wù)頻度相當(dāng)于提高了高優(yōu)先級(jí)任務(wù)的服務(wù)頻度。在很多情況下,這樣的優(yōu)先級(jí)處理已令人滿意。有一類進(jìn)程出于功能(而不一定是優(yōu)先級(jí))的需要,也必須進(jìn)行定時(shí)同步。

如前所述,嚴(yán)格按照“前向分支”原則拆分線程是,拆分?jǐn)?shù)量不應(yīng)上于時(shí)程中的循環(huán)返回節(jié)點(diǎn)數(shù)Nback和Nback+1。這是拆分線程時(shí)重要的參考依據(jù)。但是,在實(shí)際應(yīng)用中,并不一定非要將線程中的循環(huán)徹底消除,應(yīng)當(dāng)根據(jù)具體情況和實(shí)際需求靈活掌握。

如果拆分粒度過(guò)細(xì)(即線程拆分?jǐn)?shù)量過(guò)多),雖然對(duì)提高系統(tǒng)的響應(yīng)速度有幫助,但由于進(jìn)程切換過(guò)于頻繁,進(jìn)程切換所需的額外開(kāi)銷會(huì)導(dǎo)致系統(tǒng)效率下降(即有效的CPU機(jī)時(shí)占CPU總機(jī)時(shí)的比例下降)。粒度越細(xì),這種情況也就越嚴(yán)重。另外,粒度越細(xì),源程序和程序文檔的可讀性越差,這程序的調(diào)試和維護(hù)以及文檔的維護(hù)帶來(lái)困難。因此,在能夠保證系統(tǒng)的響應(yīng)速度和調(diào)度的均勻性等前提之下,拆分粒度傾向于粗一些。在多數(shù)情況下,傾向于將次數(shù)不確定的等待循環(huán)、較為耗時(shí)的循環(huán)和較長(zhǎng)的純延時(shí)拆分為線程。而那些循環(huán)數(shù)確定且不太耗時(shí)的循環(huán)則建議保留。在這種情況下,線程拆分?jǐn)?shù)小于Nback或Nback+1。

實(shí)時(shí)系統(tǒng)要求系統(tǒng)能夠?qū)斎胱龀隹焖俚姆磻?yīng)和處理。但是,“實(shí)時(shí)”只是一個(gè)相對(duì)的概念,響應(yīng)時(shí)間快慢實(shí)際上是衡量一個(gè)系統(tǒng)是否“實(shí)時(shí)”的重要指標(biāo)。由圖5可以看出,對(duì)于本文所介紹的模型來(lái)說(shuō),由于進(jìn)程都是確定的,響應(yīng)時(shí)間可以大致按以下方法估算:各地程中最耗時(shí)線程的運(yùn)行時(shí)間之和就是最不利的響應(yīng)時(shí)間,平均響應(yīng)時(shí)間應(yīng)等于各進(jìn)程中線程平均運(yùn)行時(shí)間之和的二分之一。根據(jù)以上估算,還可以大致推斷運(yùn)行期間發(fā)生過(guò)幾次定時(shí)中斷。將基礎(chǔ)定時(shí)中斷所占用的CPU時(shí)間也估算進(jìn)去,可以進(jìn)一步提高響應(yīng)時(shí)間估算的準(zhǔn)確度。當(dāng)然,響應(yīng)時(shí)間也可以通過(guò)實(shí)驗(yàn)來(lái)測(cè)定。如果響應(yīng)時(shí)間不能滿足某一任務(wù)的要求,可以將長(zhǎng)線程進(jìn)一步拆分,或者應(yīng)當(dāng)考慮更換速度更高、能力更強(qiáng)的CPU。

子程序是程序設(shè)計(jì)中廣泛應(yīng)用的一種程序結(jié)構(gòu)。在本模型的基礎(chǔ)上,可以將子程序設(shè)計(jì)為子進(jìn)程。子進(jìn)程同樣可按“前幾分支”原則拆分為子線程,這樣,系統(tǒng)中仍然可以消除所有的局部循環(huán)。子線程的拆分方法與上述線程的拆分方法類似,但需注意調(diào)用時(shí)的爭(zhēng)用和重入問(wèn)題。

以上介紹模型的調(diào)度算法簡(jiǎn)單、實(shí)現(xiàn)方法規(guī)范、對(duì)CPU資源沒(méi)有特殊的要求。在實(shí)現(xiàn)應(yīng)用中,該模型可以根據(jù)項(xiàng)目的具體情況靈活地變通和擴(kuò)充。同時(shí),該模型比較容易工程化實(shí)施,便于快速、低成本地構(gòu)造系統(tǒng)程序的原型。但該模型沒(méi)有對(duì)進(jìn)程設(shè)置嚴(yán)格意義上的優(yōu)先級(jí),另外,源程序的可讀性也不太令人滿意。

與通用操作系統(tǒng)不同,該模型適用于靜態(tài)內(nèi)存分配和資源分配的確定性任務(wù)(多數(shù)的單片機(jī)應(yīng)用項(xiàng)目和機(jī)電設(shè)備控制系統(tǒng)屬于這種情形)。顯然,該模型不適合那些在運(yùn)行時(shí)動(dòng)態(tài)加載、需要進(jìn)行動(dòng)態(tài)內(nèi)存功能的資源分配的不確定性任務(wù)。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉