新聞中心

        EEPW首頁 > 嵌入式系統 > 學習方法與實踐 > 嵌入式實時操作系統PetOS設計與實現

        嵌入式實時操作系統PetOS設計與實現

        作者:張志義 謝凱年 時間:2008-03-28 來源:微計算機信息 收藏

                PetOS是一個自行設計的嵌入式實時操作系統。本文介紹了PetOS的技術背景,并詳細闡述PetOS系統中的任務調度機制、任務管理機制以及中斷管理機制的實現原理,指出PetOS在應用中的優缺點。 
               

        本文引用地址:http://www.104case.com/article/80854.htm

               1 引言

               在嵌入式領域中,嵌入式實時操作系統正得到越來越廣泛的應用。采用嵌入式實時操作系統(RTOS)可以更合理、更有效地利用CPU 的資源,簡化應用軟件的設計,縮短系統開發時間,更好地保證系統的實時性和可靠性。由于RTOS需占用一定的系統資源(尤其是RAM 資源),只有μC/OS II、PalOS等少數實時操作系統能在小RAM 系統上運行。相對于μC/OS II[2]等商業操作系統,PalOS[1]操作系統是完全免費的操作系統,具有源碼公開、內核簡單等的特點。但該系統不支持任務優先級、中斷等相對復雜的功能,不能很好的滿足嵌入式電子設備的需要。

               2 PetOS簡介

               PalOS是UCLA(加州大學洛山機分校)為傳感器網絡而設計微型操系統。系統輪詢每個任務的消息隊列,如果存在消息則調用任務相應的消息處理函數。但是這種簡單的輪詢機制和系統結構無法滿足更為復雜的應用需求。在任務管理、系統時鐘管理和中斷管理等功能上,PalOS的功能都有待加強。

               PetOS以PalOS為原型,改進了任務調度算法,引入優先級的概念。每個任務可根據重要程度的不同被賦予一定的優先級, CPU總是讓處于就緒態的、優先級最高的任務先運行,從而實現任務的優先級管理。PetOS還提供了嚴格優先級調度模式和非嚴格優先級調度模式,用于緩解高優先級任務持續被調度時,低優先級任務出現‘餓死’的現象。

                                                             圖1 PetOS內核框架
         
               簡單輪詢或者優先級調度都無法保證系統的實時性。這兩種調度都基于事件驅動,任務必須完成事件響應才會執行下一輪調度,因此系統的實時性會受到事件響應函數的粒度的影響,為了增加系統的實時性,PetOS加入了中斷管理及系統時鐘管理,用于提高系統的實時性。中斷可以由硬件產生,也可以由應用程序產生。中斷產生后,系統會及時進入中斷模式進行處理,從而保證實時性要求很高的事務能得到及時的處理。

               PetOS內核框架如圖1。

               3 PetOS的實現
               3.1 PETOS任務維護/調度模塊
        任務維護/調度模塊是PetOS的核心模塊 負責任務的管理和調度。

               ·TASK(任務):

               TASK是PetOS應用程序的邏輯實體,擁有獨立的輸入響應、消息響應和輸出控制,是PetOS的調度實體。

               PetOS任務具有如下5個狀態:

               ·UNREGISTER   :由于Task列表采用靜態數組,此狀態表示該數組項無效

               ·UNINIT:任務已經注冊,但是尚未初始化,不可執行

               ·STOP:任務停止狀態。不接受消息,不可執行。無數據

                                                               圖2 PetOS 任務狀態轉換圖
         
              ·RUN:任務運行狀態。能接受消息,可以執行

              ·PAUSE:任務掛起狀態:不能接受消息,不可執行。但保持數據。

              任務在PetOS啟動時被注冊,并常駐在操作系統中。即操作系統初始化完畢并啟動之后,操作系統調度的任務列表是固定的。操作系統啟動后,任務只會在運行、暫停、掛起狀態之前切換。

              任務狀態圖如圖2:

              為了方便任務的管理與控制,每個TASK都會綁定TCB(task control block)。TCB類似于現代操作系統中進程的PCB,它記錄了task的各種狀態變量、控制變量以及標準接口的函數指針,便于PetOS和應用程序維護。

              Event(事件消息):

              Event是PetOS進程調度的粒度單位。

              由于PetOS的每個任務不具備獨立的代碼/數據段/堆棧指針,我們無法在任意的位置暫停一個task而啟動另一個。PetOS的解決策略是:將task拆分成為一個個獨立的由事件驅動的邏輯模塊,每個task都有各自獨立的事件隊列。Task的每個邏輯功能都會被映射成一個事件,操作系統通過賦予某個task響應事件的權利來完成一次調度。而操作系統的多任務調度可以Task輪流響應事件來實現。

              任務的調度:

                                                                      圖3調度算法流程圖
         
              在嵌入式系統中,很多應用要求執行的優先級絕對優先,比如USB文件傳輸的處理。為此,PetOS采用了多級任務機制,并賦予高優先級的任務更高的執行權限。調度時,PetOs將優先調度優先級高的任務。這種調度方式保證了高優先級任務的實時響應,但可能導致低優先級的任務永遠無法被執行。為了緩解這種‘餓死’現象,PetOS提供了兩種可選的配置:

              ·嚴格優先級調度模式:即,若高優先級的任務隊列中存在還有事件未響應的任務,則無條件執行高優先級的任務。

              ·非嚴格優先級調度模式:即,當高優先級隊列調度一輪過后,次優先級的任務隊列中的第一個待執行任務可以得到1次調度。調度完成后繼續輪詢高優先級隊列。

              可以看到兩者的區別在于:嚴格調度模式可以保證高優先級任務的絕對優先,但是低級任務可能出現‘餓死’的情況。而對于非嚴格調度模式,不論任務優先級有多低,總能以較低的頻率執行。

              調度算法的分析及優化:

              在非嚴格模式下,設一級、二級、三級task隊列的長度分別為N1,N2,N3。則二級隊列中調度一個任務需要判斷一級任務N1次;三級隊列中調度一個任務需要在一級隊列中判斷N1×N2次,在二級隊列中判斷N2次。在一級二級任務都很少被執行,而三級隊列中的任務消息粒度很小且執行頻率很高時,任務調度所占用的系統消耗便會急劇上升。

               一種解決方法是:PetOS給每個消息隊列加入了32Bit消息標記位。其中的每一位對應一個該優先級中的任務。若消息標記變量的某一位為1,則代表該位對應的task存在尚未響應的事件;若為0,則表示該級隊列所有任務的事件都已經處理完畢,可以調度次優先級的任務。

               通過消息標記位策略,若一級二級任務都不存在需要被調度的任務,則三級任務被調度一次的代價只是查詢一級、二級任務的消息標記位各一次,從而大大降低了系統的消耗。

               3.2中斷管理/定時函數管理
               中斷管理:

               由于PetOS的實時性受到事件粒度大小的影響,系統需要提供一種更強有力的實時性保障:中斷。PetOS中斷處理模塊主要完成中斷源的判斷、中斷向量的維護以及中斷響應函數的調度等工作。

               PetOS支持64個中斷源[3],并對每個中斷源支持不限數目的中斷處理函數,因此該列表是一個雙向鏈表,里面包涵了該中斷號下的中斷處理函數,定位后依次執行該鏈表中的函數。

               采用鏈表方式維護中斷處理函數可以更加靈活的維護中斷函數列表,但是實際上,很多中斷函數都是一次性的,比如USB連接響應函數在被調用后,需要將自己從該中斷的函數列表內刪除。而此時,中斷處理函數正在使用該列表,這樣就引起了中斷函數鏈表的不一致性。

               解決的方式是:

               1)給所有函數句柄加入狀態。

               2)維護中斷函數列表時,如果句柄處于閑置狀態,則進行默認的操作;如果句柄處于IRQ狀態被刪除,則暫時不進行直接的刪除操作,而是將句柄狀態改成PETOS_IRQ_HANDLER_CALL_STATUS_DELETE。

               3)當中斷處理主函數調用完該函數后,若發現該函數的句柄狀態已經改變,則可得知該函數已經在調用過程中將自己注銷。IrqHandler會在此時重寫中斷維護模塊API中注銷函數,在這里將該函數句柄刪除。

               4)重新鏈接中斷函數列表和定位tmpIrqHandler找到下一個中斷處理函數句柄。

               中斷擴展模塊-系統時鐘模塊和定時觸發函數:

               中斷機制保證了PetOS對硬件請求的實時性響應,而對于軟件請求的實時性則由PetOS系統時鐘/定時觸發函數模塊完成。該模塊主要完成了兩部分工作:

               ·系統時鐘模塊:系統每隔固定的時間產生一個時間中斷。利用前面的中斷機制,我們可以模擬一個準實時的,不斷執行的任務。具體方法為將這段代碼注冊為系統時鐘的中斷處理函數。

               ·定時觸發函數模塊:為了滿足嵌入式電子產品應用程序的需要,基于系統時鐘模塊,PetOS供了定時觸發函數功能。用戶可以向系統注冊一個定時觸發函數,并指定其被調用的時間。操作系統通過預先注冊好的一個系統時鐘中斷處理函數來檢查是否有需要的定時觸發函數到期,并執行調度。

               PetOS的任務調度是以事件為單位,不可能出現兩個任務同時訪問同一段代碼的情況。因此,大部分代碼不需要考慮重入的問題。

               4 PetOS的不足及改進方向

               目前的調度算法還是存在任務優先級跨度太大的問題,高優先級的任務可能直接導至低優先級任務的“餓死”。

               PetOS不可搶占的任務調度機制,各任務無獨立棧導致調度不夠靈活,如果一個任務的消息處理時間很長,則其他任務的消息響應時間也會很長,使得整個系統的實時性顯得較差并且無法移植阻塞式的應到到該系統中。

               PetOS并沒有啟用多態運行模式,而是簡單的將OS core和其他應用程序的地址空間復用。這樣雖然簡化了系統結構,但是帶來了OS core的地址空間可能被其他應用程序直接訪問的隱患。

               因此調度算法及內存管理將是PetOS改進的方向。

               5 結束語

               增加了優先級調度、任務管理、中斷管理、系統時鐘管理后,PetOS由一個只適用于簡單應用的微型操作系統蛻變為可應用于復雜環境的小型操作系統。由于PetOS的模塊化結構和開放性的代碼,使得各方案的擴展性和可維護性大大加強,大大縮短了方案開發、產品維護的周期和成本。目前,基于ARM922硬件平臺,PetOS已經實現了MP4/學習機等嵌入式消費類電子產品的方案,并已有成熟的產品上市,證明了PetOS的市場潛力。隨著新的應用需求,PetOS會得到進一步完善,在嵌入式領域發揮更大的作用。

               參考文獻:

               [1] UCLA Networked and Embedded Systems Lab. PALOS. http://sourceforge.net/projects/palos/ 2002

               [2] JeanJ .Labrosse. uC /OS-11-源碼公開的實時嵌人式操作系統[M],中國電力出版社,2001

               [3] 杜春雷.ARM體系結構與編程[M] 清華大學出版社, 2003

               [4] 沈勝慶.嵌入式操作系統的內核研究[J].微計算機信息,2006,2-2:72-74

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        linux相關文章:linux教程




        關鍵詞: 嵌入式 PetOS

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 郴州市| 从化市| 依安县| 平舆县| 醴陵市| 伊通| 龙岩市| 潞西市| 宁德市| 万州区| 类乌齐县| 黔南| 察隅县| 湄潭县| 斗六市| 克拉玛依市| 英德市| 浮梁县| 乐平市| 五台县| 昌黎县| 清水县| 海口市| 虞城县| 中超| 沾益县| 虹口区| 札达县| 淮阳县| 乌苏市| 邹城市| 万全县| 岳阳县| 辛集市| 上虞市| 德兴市| 饶平县| 确山县| 渝中区| 宁明县| 青川县|