- 嵌入式系統技術應用與開發
- 陸淵章 徐敏主編
- 2132字
- 2022-05-07 18:24:31
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寄存器和自己的棧空間。