官术网_书友最值得收藏!

3.1.3 嵌入式操作系統性能管理

3.1.3 嵌入式操作系統性能管理

1.實時操作系統(RTOS)

實時操作系統是一段在嵌入式系統啟動后首先執行的背景程序,用戶的應用程序是運行于RTOS之上的各個任務,RTOS根據各個任務的要求,進行資源(包括存儲器、外設等)管理、消息管理、任務調度、異常處理等工作。在RTOS支持的系統中,每個任務均有一個優先級,RTOS根據各個任務的優先級,動態地切換各個任務,保證對實時性的要求。工程師在編寫程序時,可以分別編寫各個任務,不必同時將所有任務運行的各種可能情況記在心中,大大減小了程序編寫的工作量,而且減小了出錯的可能,保證最終程序具有高可靠性。

實時多任務操作系統,以分時方式運行多個任務,看上去好像是多個任務“同時”運行。任務之間的切換以優先級為根據,只有優先服務方式的RTOS才是真正的實時操作系統,時間分片方式和協作方式的RTOS并不是真正的“實時”。

2.共享資源

程序運行時可使用的軟、硬件環境統稱為資源。資源可以是輸入/輸出設備,例如打印機、鍵盤、顯示器。資源也可以是一個變量、一個結構或一個數組等。

可以被兩個及以上任務使用的資源叫作共享資源。為了防止數據被破壞,每個任務在與共享資源打交道時,必須獨占該資源,這叫作互斥。至于在技術上如何保證互斥條件,本章會做進一步討論。

3.任務

一個任務,也稱作一個線程,是一個簡單的程序,該程序可以認為CPU完全屬于該程序自己。實時應用程序的設計過程,包括如何把問題分割成多個任務,每個任務都是整個應用的某一部分,每個任務被賦予一定的優先級,有其自己的一套CPU寄存器和棧空間。

4.任務切換

當多任務內核決定運行另外的任務時,它保存正在運行任務的當前狀態,即CPU寄存器中的全部內容。這些內容保存在任務的當前狀態保存區,也就是任務在自己的棧區之中。入棧工作完成以后,就把下一個將要運行的任務的當前狀態從任務的棧中重新裝入CPU的寄存器,并開始下一個任務的運行,這個過程就稱為任務切換。這個過程增加了應用程序的額外負荷。CPU的內部寄存器越多,額外負荷就越重。任務切換所需要的時間取決于CPU有多少寄存器要入棧。實時內核的性能不應該以每秒鐘能做多少次任務切換來評價。

內核多任務系統中,內核負責管理各個任務,或者說為每個任務分配CPU時間,并且負責任務之間的通信。內核提供的基本服務是任務切換。之所以使用實時內核可以大大簡化應用系統的設計,是因為實時內核允許將應用分成若干個任務,由實時內核來管理它們。內核本身也增加了應用程序的額外負荷。代碼空間增加ROM的用量,內核本身的數據結構增加RAM的用量,但更主要的是,每個任務要有自己的棧空間,該空間占用內存較大。內核本身對CPU的占用時間一般在2%~5%。

通過提供必不可少的系統服務,諸如信號量管理、消息隊列、延時等,實時內核使得CPU的利用更為有效。

5.調度與多任務機制

調度是內核的主要職責之一,決定該輪到哪個任務運行。多數實時內核是基于優先級調度法的。每個任務根據其重要程序的不同被賦予一定的優先級。基于優先級的調度法指CPU總是讓處在就緒態的優先級最高的任務先運行。然而究竟何時讓高優先級任務掌握CPU的使用權,有兩種不同的情況:非占先式的內核和占先式內核。

6.非占先式內核

非占先式內核要求每個任務自我放棄CPU的所有權。非占先式調度法也稱作合作型多任務,各個任務彼此合作共享一個CPU。異步事件還是由中斷服務來處理。中斷服務可以使一個高優先級的任務由掛起狀態變為就緒狀態。但中斷服務以后控制權還是回到原來相應被中斷的任務,直到該任務主動放棄CPU的使用權時,高優先級的任務才能獲得CPU的使用權。

7.占先式內核

當系統響應時間很重要時,要使用占先式內核。市場上絕大多數的實時內核都是占先式內核。最高優先級的任務一旦就緒,總能得到CPU的控制權。一個比當前正運行任務的優先級高的任務進入了就緒狀態,當前任務的CPU使用權則被剝奪,或者說被掛起,高優先級的任務立刻得到了CPU的控制權。如果是中斷服務子程序使一個高優先級的任務進入就緒態,中斷完成時,中斷的任務被掛起,優先級高的那個任務開始運行。

8.任務優先級

任務的優先級是表示任務被調度的優先程度。每個任務都具有優先級。任務越重要,賦予的優先級應越高,越容易被調度而進入運行狀態。

9.中斷

中斷是一種硬件機制,用于通知CPU有異常事件發生。中斷一旦被識別,CPU保存部分或全部上下文(即部分或全部寄存器的值),跳轉到專門的子程序,稱為中斷服務子程序(ISR)。中斷服務子程序進行事件處理,處理完成后,程序回到后臺:

1)在前后臺系統中,程序回到后臺程序。

2)對非占先式內核而言,程序回到被中斷的任務。

3)對占先式內核而言,讓進入就緒態的優先級最高的任務開始運行。

10.進程和線程

進程是可并發執行的、具有獨立功能的程序在一個數據集合上的運行過程,是操作系統進行資源分配和保護的基本單位;進程是操作系統結構的基礎;進程是一個正在執行的程序,也是計算機正在運行的程序實例。它可以是分配給處理器并用處理器執行的一個實體,也可以是單一順序的執行顯示,還可以是一個當前狀態和一組相關的系統資源所描述的活動單元。

線程,是一個簡單的程序。實時應用程序的設計過程,包括如何把問題分割成多個任務,每個任務都是整個應用的某一部分,每個任務被賦予一定的優先級,有它自己的一套CPU寄存器和自己的棧空間。

主站蜘蛛池模板: 山阴县| 邻水| 兴国县| 鄱阳县| 渭南市| 襄汾县| 庐江县| 祁阳县| 六盘水市| 石景山区| 定州市| 万荣县| 敦化市| 淄博市| 文成县| 姜堰市| 涪陵区| 中超| 理塘县| 威远县| 博白县| 铜鼓县| 布尔津县| 石阡县| 上杭县| 咸阳市| 太仓市| 淳化县| 宝应县| 安仁县| 威宁| 越西县| 射阳县| 定西市| 武义县| 荔浦县| 萨迦县| 长武县| 张家港市| 电白县| 龙胜|