一種實時多任務系統(tǒng)軟件設計方法
3 總體模型
綜上所述,一個完整的、嚴格按“前向分支”原則進行線程拆分和進程調度的多任務系統(tǒng)模型可以歸納為圖5所示的結構。該模型由三部分構成:主循環(huán)、分屬于不同進程的“前向分支”的連程以及一個基礎定時中斷程序。該模型結構最大的特點是:除了主循環(huán)中最后一個回跳以外,其它任何地方都不存在循環(huán)結構。換言之,系統(tǒng)中所有的循環(huán)“反向”轉跳,都被歸并成了主循環(huán)中的一個回跳。這樣的結構能使主循環(huán)在各進程間快速地切換,有利于提高CPU的利用率,改善系統(tǒng)的響應,使得各進程能夠得到及時、均勻、公平的服務。同時,基礎定時中斷程序也完全是“前向分支”結構,有利于減少對CPU的占用。
考慮到各進程對響應時間和服務頻度的不同要求,在該模型中設置了對各進程進行定時同步的功能。在基礎定時中斷服務程序中增加了同步定時器cTimerSyn_i和同步定時標志fTimerSyn_i。同步定時器和動作定時器構成了基礎定時中斷服務程序的主體。
基礎定時中斷的中斷間隔時間按所有定時任務的最大公約數(shù)來選取,所選取中斷間隔時間越大,對CPU的占用越少,越有利于系統(tǒng)效率的提高。
進程定時同步的本質是為了不同響應時間需求的任務安排不同的服務頻度。降低低優(yōu)先級任務的服務頻度相當于提高了高優(yōu)先級任務的服務頻度。在很多情況下,這樣的優(yōu)先級處理已令人滿意。有一類進程出于功能(而不一定是優(yōu)先級)的需要,也必須進行定時同步。
如前所述,嚴格按照“前向分支”原則拆分線程是,拆分數(shù)量不應上于時程中的循環(huán)返回節(jié)點數(shù)Nback和Nback+1。這是拆分線程時重要的參考依據(jù)。但是,在實際應用中,并不一定非要將線程中的循環(huán)徹底消除,應當根據(jù)具體情況和實際需求靈活掌握。
如果拆分粒度過細(即線程拆分數(shù)量過多),雖然對提高系統(tǒng)的響應速度有幫助,但由于進程切換過于頻繁,進程切換所需的額外開銷會導致系統(tǒng)效率下降(即有效的CPU機時占CPU總機時的比例下降)。粒度越細,這種情況也就越嚴重。另外,粒度越細,源程序和程序文檔的可讀性越差,這程序的調試和維護以及文檔的維護帶來困難。因此,在能夠保證系統(tǒng)的響應速度和調度的均勻性等前提之下,拆分粒度傾向于粗一些。在多數(shù)情況下,傾向于將次數(shù)不確定的等待循環(huán)、較為耗時的循環(huán)和較長的純延時拆分為線程。而那些循環(huán)數(shù)確定且不太耗時的循環(huán)則建議保留。在這種情況下,線程拆分數(shù)小于Nback或Nback+1。
實時系統(tǒng)要求系統(tǒng)能夠對輸入做出快速的反應和處理。但是,“實時”只是一個相對的概念,響應時間快慢實際上是衡量一個系統(tǒng)是否“實時”的重要指標。由圖5可以看出,對于本文所介紹的模型來說,由于進程都是確定的,響應時間可以大致按以下方法估算:各地程中最耗時線程的運行時間之和就是最不利的響應時間,平均響應時間應等于各進程中線程平均運行時間之和的二分之一。根據(jù)以上估算,還可以大致推斷運行期間發(fā)生過幾次定時中斷。將基礎定時中斷所占用的CPU時間也估算進去,可以進一步提高響應時間估算的準確度。當然,響應時間也可以通過實驗來測定。如果響應時間不能滿足某一任務的要求,可以將長線程進一步拆分,或者應當考慮更換速度更高、能力更強的CPU。
子程序是程序設計中廣泛應用的一種程序結構。在本模型的基礎上,可以將子程序設計為子進程。子進程同樣可按“前幾分支”原則拆分為子線程,這樣,系統(tǒng)中仍然可以消除所有的局部循環(huán)。子線程的拆分方法與上述線程的拆分方法類似,但需注意調用時的爭用和重入問題。
以上介紹模型的調度算法簡單、實現(xiàn)方法規(guī)范、對CPU資源沒有特殊的要求。在實現(xiàn)應用中,該模型可以根據(jù)項目的具體情況靈活地變通和擴充。同時,該模型比較容易工程化實施,便于快速、低成本地構造系統(tǒng)程序的原型。但該模型沒有對進程設置嚴格意義上的優(yōu)先級,另外,源程序的可讀性也不太令人滿意。
與通用操作系統(tǒng)不同,該模型適用于靜態(tài)內存分配和資源分配的確定性任務(多數(shù)的單片機應用項目和機電設備控制系統(tǒng)屬于這種情形)。顯然,該模型不適合那些在運行時動態(tài)加載、需要進行動態(tài)內存功能的資源分配的不確定性任務。
評論