新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 一種實時多任務系統軟件設計方法

        一種實時多任務系統軟件設計方法

        作者: 時間:2016-09-12 來源:網絡 收藏

        3 總體模型

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

        考慮到各進程對響應時間和服務頻度的不同要求,在該模型中設置了對各進程進行定時同步的功能。在基礎定時中斷服務程序中增加了同步定時器cTimerSyn_i和同步定時標志fTimerSyn_i。同步定時器和動作定時器構成了基礎定時中斷服務程序的主體。

        基礎定時中斷的中斷間隔時間按所有定時任務的最大公約數來選取,所選取中斷間隔時間越大,對CPU的占用越少,越有利于系統效率的提高。

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

        如前所述,嚴格按照“前向分支”原則拆分線程是,拆分數量不應上于時程中的循環返回節點數Nback和Nback+1。這是拆分線程時重要的參考依據。但是,在實際應用中,并不一定非要將線程中的循環徹底消除,應當根據具體情況和實際需求靈活掌握。

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

        實時系統要求系統能夠對輸入做出快速的反應和處理。但是,“實時”只是一個相對的概念,響應時間快慢實際上是衡量一個系統是否“實時”的重要指標。由圖5可以看出,對于本文所介紹的模型來說,由于進程都是確定的,響應時間可以大致按以下方法估算:各地程中最耗時線程的運行時間之和就是最不利的響應時間,平均響應時間應等于各進程中線程平均運行時間之和的二分之一。根據以上估算,還可以大致推斷運行期間發生過幾次定時中斷。將基礎定時中斷所占用的CPU時間也估算進去,可以進一步提高響應時間估算的準確度。當然,響應時間也可以通過實驗來測定。如果響應時間不能滿足某一任務的要求,可以將長線程進一步拆分,或者應當考慮更換速度更高、能力更強的CPU。

        子程序是程序設計中廣泛應用的一種程序結構。在本模型的基礎上,可以將子程序設計為子進程。子進程同樣可按“前幾分支”原則拆分為子線程,這樣,系統中仍然可以消除所有的局部循環。子線程的拆分方法與上述線程的拆分方法類似,但需注意調用時的爭用和重入問題。

        以上介紹模型的調度算法簡單、實現方法規范、對CPU資源沒有特殊的要求。在實現應用中,該模型可以根據項目的具體情況靈活地變通和擴充。同時,該模型比較容易工程化實施,便于快速、低成本地構造系統程序的原型。但該模型沒有對進程設置嚴格意義上的優先級,另外,源程序的可讀性也不太令人滿意。

        與通用操作系統不同,該模型適用于靜態內存分配和資源分配的確定性任務(多數的單片機應用項目和機電設備控制系統屬于這種情形)。顯然,該模型不適合那些在運行時動態加載、需要進行動態內存功能的資源分配的不確定性任務。


        上一頁 1 2 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阿城市| 安康市| 汉阴县| 昆山市| 漯河市| 滁州市| 高平市| 马龙县| 兴海县| 夏邑县| 汉中市| 承德市| 翁源县| 绵竹市| 克拉玛依市| 和静县| 托克托县| 青田县| 湘阴县| 南靖县| 博客| 衡东县| 青州市| 巴彦淖尔市| 明溪县| 勃利县| 兴海县| 唐河县| 栾城县| 宜良县| 桐庐县| 拉萨市| 宁德市| 会泽县| 延边| 广饶县| 邓州市| 康定县| 化隆| 铁岭市| 建瓯市|