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

1.2 實時操作系統中的基本概念

在實時操作系統中,線程與調度是兩個最重要的概念,本節首先闡述這兩個概念,然后給出實時操作系統的其他相關術語的解釋,理解這些基本概念是學習實時操作系統的關鍵一環。這里的內核是指實時操作系統的核心部分,是實時操作系統廠家提供的程序,而線程則是指應用程序設計者編制的程序,它在內核的調度下運行。

1.2.1 線程與調度的基本含義

線程與調度是實時操作系統中兩個不可分割的重要概念,透徹地理解它們,對實時操作系統的學習至關重要。

1.線程的基本含義

線程是實時操作系統中十分重要的概念之一。在實時操作系統下,把一個復雜的嵌入式應用工程按一定規則分解成一個個功能清晰的小工程,然后設定各個小工程的運行規則,交給實時操作系統管理,這就是基于實時操作系統的基本編程思想。這一個個小工程被稱為線程(Thread),實時操作系統管理這些線程,被稱為調度(Scheduling)。

要給實時操作系統中的線程下一個準確而完整的定義并不容易,可以從不同視角理解線程。從線程調度視角來理解,可以認為實時操作系統中的線程是一個功能清晰的小程序,是實時操作系統進行調度的基本單元;從實時操作系統的軟件設計視角理解,就是在軟件設計時,需要根據具體應用,劃分出獨立的、相互作用的程序集合,這樣的程序集合被稱為線程,每個線程都被賦予一定的優先級;從CPU視角來理解,在單CPU下,某一時刻CPU只會處理(執行)一個線程,或者說只有一個線程占用CPU。實時操作系統內核的關鍵功能就是以合理的方式為系統中的每個線程分配時間(即調度),使之正常運行。

實際上,根據特定的實時操作系統,線程可能被稱為任務(Task),也可能使用其他名詞,含義或許稍有差異,但本質不變,也不必花過多精力追究其精確含義。掌握任務設計方法,理解調度過程與底層驅動原理,提高程序的健壯性、規范性、可移植性、可復用性,提升嵌入式系統的實際開發能力等才是學習實時操作系統的重點。要真正理解與掌握利用線程進行基于實時操作系統的嵌入式軟件開發,需要從線程的狀態、結構、優先級、調度、同步等視角來認識實時操作系統,這將在后續章節中詳細闡述。

2.調度的基本含義

在多線程系統中,實時操作系統內核(Kernel)負責管理線程,或者說為每個線程分配CPU時間,并且負責線程間的通信。

調度就是決定該輪到哪個線程運行了,它是內核最重要的職責。每個線程根據其重要程度的不同,被賦予一定的優先級。不同的調度算法對實時操作系統的性能有較大影響,基于優先級的調度算法是實時操作系統常用的調度算法,其核心思想是,總是讓處于就緒態、優先級最高的線程先運行。然而,何時高優先級的線程可以掌控CPU的使用權,由實時操作系統的內核類型決定。基于優先級的內核可分為不可搶占型和可搶占型兩種。

1.2.2 內核的基本概念

在實時操作系統場景下編程,芯片在啟動時會先運行一段被稱為實時操作系統內核的程序代碼,這段代碼的功能是開辟用戶線程的運行環境,準備對線程進行調度。實時操作系統一般由內核與擴展部分組成,內核的最主要功能是線程調度,擴展部分的最主要功能是提供API。內核的基本概念主要有時間嘀嗒、代碼臨界段、不可搶占型內核(Non-Preemptive Kernel)與可搶占型內核(Preemptive Kernel)、實時性相關概念及實時操作系統的實時性指標等。

1.時間嘀嗒

時鐘節拍(Clock Tick)有時也直接譯為時間嘀嗒,它是通過定時器產生的周期性中斷,以便內核判斷是否有更高優先級的線程進入了就緒態。

2.代碼臨界段

代碼臨界段也稱為臨界區,是指處理時不可分割的代碼,一旦這部分代碼開始執行,就不允許任何中斷“打擾”。為確保臨界區代碼的執行,在進入臨界區之前要關中斷,并且臨界區代碼執行完后應立即開中斷。

3.不可搶占型內核與可搶占型內核

不可搶占型內核要求每個線程主動放棄CPU的使用權。不可搶占型調度算法也稱為合作型多線程,各個線程彼此合作共享一個CPU。但異步事件還是由中斷服務程序來處理的。中斷服務程序可使高優先級的線程從掛起狀態變為就緒態。當中斷服務程序執行結束后,使用權還是回到原來被中斷的那個線程,直到該線程主動放棄CPU的使用權后,新的高優先級的線程才能獲得CPU的使用權。

當系統響應時間很重要時,須使用可搶占型內核。在可搶占型內核中,一個正在運行的線程可以被中斷,而讓另一個優先級更高且變為就緒態的線程運行。如果在中斷服務程序的執行過程中有高優先級的線程進入就緒態,則當中斷完成時,被中斷的線程會被掛起,更高優先級的線程開始運行。

4.實時性相關概念及實時操作系統實時性指標

硬實時(Hard Real-Time)要求在規定的時間內必須完成操作,這是在設計操作系統時保證的,通常將具有優先級驅動、時間確定性、可搶占調度的實時操作系統稱為硬實時系統。軟實時(Soft Real-Time)則沒有那么嚴格,只要求按照線程的優先級,盡可能快地完成操作。

實時操作系統追求的是調度的實時性、響應時間的可確定性、系統的高度可靠性,所以評價一個實時操作系統時一般可以從線程調度、內存開銷、系統響應時間、中斷延遲等方面來考量。

1)線程調度的時間指標

實時操作系統的實時性和多線程能力在很大程度上取決于它的線程調度機制。在大多數的商用實時系統中,為了讓操作系統能夠在發生突發事件時迅速獲得系統使用權,以便對事件做出反應,大都提供了搶占式線程調度功能,也就是說操作系統有權主動中止應用程序(應用線程)的執行,并且將執行權交給擁有最高優先級的線程。

調度延時(Scheduling Latency):指當一個更高優先級的線程從就緒到開始運行的這段時間。簡而言之,就是一個線程被觸發后,由就緒到開始運行的時間。

線程切換時間(Context-Switching Time):由于某種原因使一個線程退出運行時,實時操作系統保存它的運行現場信息,并插入到相應列表,依據一定的調度算法重新選擇一個新的線程使之投入運行,這一過程所需時間稱為線程切換時間。線程切換時間越短,實時操作系統的性能就越高。

恢復時間(Recovery Time):指從線程執行結束后,系統恢復執行主程序所需要的時間。

2)最小內存開銷

在實時操作系統的設計過程中,由于成本限制,嵌入式系統產品的內存一般都不大,而在有限的內存空間內不僅要裝載實時操作系統,還要裝載用戶程序,因此最小內存開銷是一個重要的指標,這是設計實時操作系統與設計其他操作系統的明顯區別之一。

3)系統響應時間

系統響應時間(System Response Time):指用戶發出處理要求到系統給出應答信號的時間,需要滿足一定的時間約束。控制要滿足一定的實時性要求,就是響應時間小于臨界時間。系統響應時間由反應時間和處理時間兩部分組成,其中反應時間指從提交外部中斷到CPU開始處理中斷的時間,處理時間指CPU完成中斷處理的時間。提高系統響應時間,可以從縮短反應時間和處理時間兩個方面入手。反應時間是電信號的傳導時間,對于不同頻率的處理器,這個時間相差不大。因此,在實際的應用程序中往往通過改進算法來提高處理效率,縮短處理時間,從而縮短系統響應時間,滿足系統的實時性要求。

4)中斷延遲

中斷是一種硬件機制,用于通知CPU發生了一個異步事件。CPU一旦識別出一個中斷,就會在保存線程的上下文后跳轉到該中斷服務程序執行,處理完這個中斷后從就緒列表中選擇最高優先級的線程開始執行。當實時操作系統運行在核心態或執行某些系統調用的時候,不會因為外部中斷的到來而立即執行中斷服務程序,只有當實時操作系統重新回到用戶態時才會響應外部中斷請求,這一過程所需的最大時間就是中斷禁止時間。

中斷延遲(Interrupt Latency)時間:指系統確認中斷開始直到執行中斷服務程序第一條指令為止,整個處理過程所需要的時間。中斷禁止時間越短,中斷延遲時間就越短,系統的實時性就越高。

1.2.3 線程的基本概念

線程的基本概念主要有線程的上下文及線程切換、線程間通信、死鎖、線程優先級、優先級驅動、優先級反轉、優先級繼承、資源、共享資源與互斥等。

1.線程的上下文及線程切換

線程的上下文(Context)即CPU內寄存器。當多線程內核決定運行其他線程時,將保存正在運行線程的上下文,這些內容保存在隨機存儲器(Random Access Memory,RAM)中的線程當前狀況保存區(Task's Context Storage Area),也就是線程自己的堆棧之中。完成入棧工作后,就把下一個將要運行線程的當前狀況從其線程堆棧中重新裝入CPU的寄存器中,開始下一個線程的運行,這一過程稱為線程切換或上下文切換。

2.線程間通信

線程間通信是指線程間的信息交換,其作用是實現同步及數據傳輸。同步是指根據線程間的合作關系,協調不同線程間的執行順序。線程間通信的主要方式有事件、消息隊列、信號量、互斥量等。線程間通信、優先級反轉、優先級繼承、資源、共享資源與互斥等概念將在后續章節中詳細闡述。

3.死鎖

死鎖是指兩個或兩個以上的線程無限期地互相等待對方釋放其所占資源而造成的一種阻塞現象。死鎖產生的必要條件有四個,即資源的互斥訪問、資源的不可搶占、資源的請求保持及線程的循環等待。解決死鎖問題的方法是破壞產生死鎖的任一必要條件,如規定所有資源僅在線程運行時才分配,其他任意狀態都不可分配,破壞其資源請求保持特性。

4.線程優先級、優先級驅動、優先級反轉、優先級繼承

在一個多線程系統中,每個線程都有一個優先級(Priority)。

優先級驅動(Priority Driven):在一個多線程系統中,正在運行的線程總是優先級最高的線程。在任何給定的時間內,總是把CPU分配給優先級最高的線程。

優先級反轉(Priority Inversion):當一個線程等待比它優先級低的線程釋放資源而被阻塞時,可能出現其他中等優先級線程先于高優先級線程被運行的現象,這種現象被稱為優先級反轉,這是一個需要在編程時必須注意的問題。優先級繼承技術可以解決優先級反轉問題,目前市場上大多數商用操作系統都使用了優先級繼承技術。

優先級繼承(Priority Inheritance):它是用來解決優先級反轉問題的技術。當優先級反轉發生時,較低優先級線程的優先級暫時被提高,以匹配較高優先級線程的優先級。這樣,就可以使較低優先級線程盡快地被執行,并釋放較高優先級線程所需要的資源。

5.資源、共享資源與互斥

資源(Resources):任何被線程占用的實體均可稱為資源。資源可以是輸入/輸出設備,如打印機、鍵盤及顯示器,也可以是一個變量、結構或數組等。

共享資源(Shared Resources):可以被一個以上線程使用的資源叫作共享資源。為了防止數據被破壞,每個線程在與共享資源打交道時,必須獨占資源,即互斥。

互斥(Mutual Exclusion):互斥是用于控制多線程對共享數據進行順序訪問的同步機制。在多線程應用中,當兩個或更多的線程同時訪問同一數據區時,就會造成訪問沖突。互斥能使它們依次訪問共享數據而不引起沖突。

主站蜘蛛池模板: 汉寿县| 治县。| 鲁山县| 延寿县| 沅江市| 长宁县| 平陆县| 闻喜县| 东丽区| 怀仁县| 黎城县| 务川| 西丰县| 茌平县| 邵武市| 安顺市| 微山县| 淳安县| 灵寿县| 罗甸县| 怀化市| 福鼎市| 泊头市| 丹巴县| 上虞市| 香河县| 梧州市| 拜泉县| 东莞市| 师宗县| 界首市| 商水县| 阿拉善盟| 昌吉市| 姜堰市| 兰州市| 平阴县| 丰镇市| 海南省| 唐海县| 陵川县|