嵌入式操作系统
嵌入式操作系統
- 一、嵌入式操作系統概述
- 1.1 嵌入式操作系統的特點
- 1.2 嵌入式操作系統的分類
- 1.2.1 非實時操作系統
- 1.2.1 實時操作系統
- 二、實時操作系統
- 2.1 實時操作系統與通用操作系統的比較
- 2.2 實時操作系統的評價指標
- 三、基于Linux的嵌入式操作系統
- 3.1 ARMLinux簡介
- 3.2 uCLinux簡介
- 四、嵌入式操作系統設計方法
- 4.1 嵌入式系統開發特點
- 4.2 嵌入式系統開發流程
- 嵌入式操作系統(Embedded Operating System, EOS)是一種用途廣泛的系統軟件,它主要負責嵌入式系統的全部軟、硬件資源的分配、調度工作,控制、協調并任務。另外,EOS必須體現系統的特征,并能通過裝載某些模塊來達到系統所需要的功能。
隨著計算機網絡技術的發展、各種只能家電的普及,EOS加速朝著微型化、智能化、專業化方向發展。嵌入式操作系統在系統實時高效性、硬件的相關依賴性、軟件固化以及應用的專用性等方面具有突出的特點。作為嵌入式系統的重要組成部分,本文主要介紹嵌入式操作系統的特點,并進一步介紹嵌入式系統中常用的實時操作系統與嵌入式系統的設計方法。
一、嵌入式操作系統概述
1.1 嵌入式操作系統的特點
- 傳統的操作系統是計算機的一個大型系統軟件,是計算機的指揮中心和管家。通過操作系統,可以實現計算機自身硬件、軟件管理,提高計算機資源的利用率,合理地組織計算機工作流程,增強計算機地處理能力,提供良好的人機交互界面,方便用戶實用計算機。嵌入式操作系統(EOS)除了以上的功能外,還具有其自身特點 :
- (1)可裝卸性:EOS的體系結構具有開放性、可伸縮性。
- (2)強實時性:EOS實時性一般較強,可用于各種設備控制中。
- (3)統一的接口:EOS提供各種設備的驅動接口。
- (4)操作方便、簡單,并能提供良好的圖形界面,易于用戶上手。
- (5)強大的網絡功能:EOS支持TCP/IP協議,同時也提供TCP/UDP/IP/PPP協議,支持統一的MAC訪問層接口,為各種移動計算設備預留接口。
- (6)強穩定性、弱交互性:EOS一旦運行就不需要用戶過多的干預,這就要求EOS具有很強的穩定性。
- (7)固化代碼:EOS的應用軟件被固化在嵌入式系統計算機的ROM中。并且輔助存儲器在嵌入式系統中很少使用,因此,EOS的文件管理功能應該能夠很容易拆卸。
- (8)良好的移植性:便于更好的實現硬件的適用性。
1.2 嵌入式操作系統的分類
- 通常情況下,嵌入式操作系統分為兩類:面向控制、通信等領域的實時操作系統與面向消費電子產品的非實時操作系統。
1.2.1 非實時操作系統
- 早期的嵌入式系統中沒有操作系統的概念,程序員編寫嵌入式程序通常直接面對裸機。在這種情況下,嵌入式程序分為前臺程序和后臺程序。其中,前臺程序通過中斷處理事件,其結構一般為無限循環;后臺程序則控制嵌入式系統軟、硬件資源的分配、管理以及任務調度,是系統管理調度程序。因此,后臺任務也叫做任務級程序,前臺程序也叫事件級程序。
- 在程序運行時,后臺程序檢查每個任務是否具備運行條件,通過一定的調度算法來完成相應的操作。對于實時性要求嚴格的操作通常由中斷來完成,僅在中斷服務程序中標記事件的發生,不再做任何工作就退出中斷,經過后臺程序的調度,轉由前臺程序完成事件處理。雖然,這樣的處理流程不會造成中斷服務中處理費時事件而影響后續的其他中斷,但是前、后臺的實時性比預想的要差,這是因為前、后臺系統認為所有任務具有相同的優先級,而且任務執行又是通過FIFO隊列排隊,因此那些對實時性要求很高的任務不可能立刻得到粗粒。另外,由于前臺程序是一個無限循環結構,一旦循環體中處理的任務崩潰,通常會造成整個系統的崩潰。即便如此,由于這類系統結構簡單,通常不需要RAM/ROM的額外開銷,因此在簡單的嵌入式應用中被廣泛應用。
1.2.1 實時操作系統
- 實時操作系統是指在確定的事件內執行其功能并對外部異步事件作出響應的計算機系統。其操作的正確性不僅依賴于邏輯設計的正確程度,而且與這些操作進行的事件有關。 “在確定的時間內”是實時操作系統的核心,實時系統對邏輯和時序的要求非常嚴格,如果邏輯和時序出現偏差就會帶來嚴重后果。
- 實時多任務操作系統指具有實時性、支持實時控制系統工作的操作系統。其首要任務是調度一切可利用的資源實現實時控制任務,其次再考慮計算機系統使用率的提高,它的重要特點是滿足用戶對時間的限制和需求。實時操作系統具有以下功能:
- (1)任務管理:多任務和基于優先級的任務調度。
- (2)任務間的同步和通信:信號量與郵箱等。
- (3)存儲器優化管理:包含ROM的管理。
- (4)實時時鐘服務。
- (5)中斷管理服務。
- 實時操作系統具有以下特點:
- (1)規模小。(2)中斷被屏蔽時間短。(3)中斷處理時間短。(4)任務切換快。
二、實時操作系統
2.1 實時操作系統與通用操作系統的比較
- 通用操作系統是由分時操作系統發展而來的,通常支持多用戶與多進程,負責管理眾多的進程與系統資源的分配。分時操作系統的基本設計原則為:盡量縮短系統的平均響應時間并提高吞吐率,在單位時間內盡可能為更多的用戶提供請求服務。因此,分時操作系統更關注平均表現性能,不注重個體表現性能。
- 然而,實時操作系統除了滿足用戶需求外,更重要的是是要滿足用戶應用的實時性要求。組成一個應用的眾多實時任務對于實時性的要求各不相同;另外,實時任務之間也會存在一些復雜的關聯與同步,比如,執行順序限制、共享資源的互斥訪問等。
- 因此,實時操作系統所遵循的最重要的設計原則是:采用各種算法和策略,始終保證系統行為的可預測性。其中,可預測性指在系統運行的任何時刻,實時操作系統的資源調配策略都能為爭奪資源(比如CPU、內存、網絡帶寬等)的多個實時任務合理地分配資源,從而使得每個實時任務的實時性要求都能得到滿足。
- 與通用操作系統相比,實時操作系統注重的不是系統的平均表現,而是滿足每個任務的實時性要求,即實時操作系統注重的是個體表現。由于實時操作系統與通用操作系統的基本設計原則具有很大的差異,因此,在很多資源調度策略選擇與實現方法上也具有很大差異,主要體現以下幾點:
- (1)任務調度策略
- 通用操作系統中的任務調度策略一般采用基于優先級的搶占式調度策略。對于優先級相同的進程則采用時間片輪調度方式,用戶進程可以通過系統調用動態地調整自己的優先級,操作系統則可以根據具體情況,調整某些進程地優先級。
- 在實時操作系統中,使用最為廣泛地兩種任務調度策略為:靜態表驅動方式與固定優先級搶占式調度方式。
- 其中,靜態表驅動方式是指在系統運行之前,工程師根據各個任務的實時要求,在輔助工具的幫助下,事先生成一張任務運行時間表。在運行時,調度器只需根據這張表在指定的時刻啟動相應的任務。
- 對于固定優先級搶占式調度方式,則與通用操作的基于優先級的相類似,但是顧名思義,進程的優先級是固定不變的,并且優先級在運行前通過某種優先級分配策略指定。
- (2)內存管理
- 為了解決虛擬內存給系統帶來的不可預測性,實時操作系統通常采用兩種方式:第一,在原有虛擬內存管理機制的基礎上,增加頁面鎖定功能,用戶可以將關鍵頁面鎖定在內存中,從而使該頁面不會被swap程序交換出內存;第二,采用靜態內存劃分的方式,為每一個實時任務劃分固定的內存區域。目前市場上的實時操作系統通常采用第一種管理方式。
- (3)中斷處理
- 對于通用操作系統,大部分外部中斷都是激活狀態,中斷通常由設備驅動程序來處理。由于通用操作系統的用戶進程通常沒有實時性要求,然而中斷處理程序直接根外設交互,可能具有實時性要求,因此,中斷處理程序的優先級高于任何其他用戶進程。
- 但是對于實時操作系統,采用上述中斷處理機制是不合適的。一種較為適合實時操作系統的中斷處理方式為:除時鐘中斷外,屏蔽所有其他中斷,中斷處理程序采用周期性的輪詢操作;另一種可行的方式是:對于采用輪詢方式無法滿足需求的外部事件,采用中斷方式,其他時間仍然采用輪詢方式。
- (4)共享資源的互斥訪問
- 通用操作系統通常采用信號量機制來解決共享資源的互斥訪問問題。對于實時操作系統,如果任務調度采用靜態表驅動方式,共享資源的互斥訪問問題在生成運行時間表時易經考慮到了,因此在運行時無須再考慮;如果任務調度采用基于優先級的方式,往往需要兌傳統的信號量機制進行一些擴展,引入如優先級繼承協議、優先級頂置協議等機制,從而較好地解決共享資源互斥訪問的問題。
- (5)系統調用及系統內部操作的時間開銷
- 進程通過系統調用得到操作系統提供的服務。操作系統通過內部操作來完成一些內部管理工作。為了保證系統的可預測性,實時操作系統中所有系統調用都應加一個具體量化的界限。而通用操作系統則對時間開銷沒有限制。
- (6)系統的可重入性
- 在通用操作系統中,核心態系統調用往往是不可重入的。當一低優先級任務調用核心態系統時,在該時間段內到達的高優先級任務必須等到低優先級的系統調用完成才能獲得CPU,這就降低了系統的可預測性。因此,實時操作系統中的核心態系統調用往往被設計成可重入性。
2.2 實時操作系統的評價指標
- 實時操作系統對性能指標的要求相對于通用操作系統來說更為嚴格。評價一個實時操作系統,通常從進程管理、任務調度、內存管理、任務通信、內存開銷、任務切換時間和最大中斷禁止時間等技術指標來衡量其優劣。
- (1)任務調度算法
- 任務調度算法在很大程度上決定了實時操作系統的實時性和多任務能力。任務調度算法可以有以下分類方式:從調度策略來講,可分為優先級調度策略和時間片輪轉調度策略;從調度方式上來講,可分為可搶占式、不可搶占式以及選擇克搶占式三種調皮方式:從時間片來看,可分為固定與可變時間片輪轉兩種方式。
- (2)內存管理和最小內存開銷**
- 在內存管理方面,可分為實時模式和保護模式兩種。
- 在實時操作系統的設計過程中,最小內存開銷是一個較重要的指標。這是因為在工業控制領域中,出于降低成本的考慮,某些工控機的內存配置一般不大。而在有限的空間內不僅要裝載實時操作系統,還要裝載用戶程序。這是實時操作系統與通用操作系統設計的明顯區別之一。
- (3)確定性
- 在實時操作系統中,在一定的條件下,系統調用運行的時間應該是可以預測的,但這并不意味著所有的系統調用都總是執行一個固定長度的時間,而不管系統的負載如何。但是,系統調用的最大執行時間可以確定。
- (4)任務切換時間
- 當由于某種原因一個任務退出運行時,實時操作系統要保存它的運行現場信息,插入相應隊列,并依據一定的調度算法重新選擇一個任務位之投入運行。這一過程所需時間稱為任務切換時間。
- (5)最大中斷禁止時間
- 當實時操作系統運行在內核態或執行某些系統調用時,是不會因為外部中斷的到來而中斷執行的。只有當實時操作系統重新回到用戶態時才會響應外部中斷請求。這一過程所需的最大時間就是最大中斷禁止時間。
- 上述幾項指標中,最大中斷禁止時間和任務切換時間是評價實時操作系統性能最重要的兩個技術指標。
三、基于Linux的嵌入式操作系統
- Linux是一個成熟且穩定的網絡操作系統。將Linux植入嵌入式設備具有許多優點。首先Linux的代碼是開放的,任何人都可以獲取并修改,用來開發自己的產品;其次,Linux是可以定制的,它的內核最小只有大約134K,并且非常穩定;另外,它和多數UNIX系統兼容,應用程序的開發和移植非常容易;最后,由于Linux具有良好的可移植性,人們已成功使用Linux運行于數百種硬件平臺上,并且出現了很多嵌入式Linux系統:ARMLinux、uClinux、ETLinux、ThinLinux、LOAF等。下面著重介紹應用最為廣泛的ARMLinux和uClinux。
3.1 ARMLinux簡介
-
完整的嵌入式Linux解決方案應包括嵌入式Linux操作系統內核、運行環境、圖形化界面和應用軟件等。由于嵌入式設備的特殊要求,嵌入式Linux解決方案中的內核、環境、GUI等都于標準Linux由很大不同,其主要挑戰是如何在有限的FLASH、ROM和內存中實現高質量的任務實時調度、圖形化顯示、網絡通信等功能。
-
Linux內核具有自己的體系結構,其中最基本的3個子系統為:進程管理、內存管理和文件系統。圖1給出了Linux內核體系結構。用戶進程可直接通過系統調用或者函數庫來訪問內核資源。由于Linux內核具有這樣的結構,所以修改內核時候,必須注意各個子系統之間的關系。
-
(1)裁剪內核
-
嵌入式Linux內核一般由標準Linux內核裁剪而來。用戶可以依據需求配置系統,裁剪掉不需要的服務功能、文件系統和設備驅動。
-
通常情況下,對于標準Linux的修改主要是虛擬內存和調度程序部分的裁剪。嵌入式系統的實時任務通常要求CPU具有很強的突發處理能力,因此,需要屏蔽內存的虛擬內存管理機制。
-
強實時需求的嵌入式系統可以通過修改任務調度模塊來實現,即在內核與外設驅動程序中添加很多切換點。在切入點處,系統檢測是否存在待處理的緊急中斷,如果存在,則搶占內核的運行,及時處理中斷。實現實時性任務的一個很好的方案為,在標準的Linux內核上添加一個實時內核,標準Linux內核作為一個任務運行于實時內核上。
-
文件系統是嵌入式Linux操作系統的重要組成部分,通常情況下,嵌入式設備文件系統主要使用RamDisk技術和網絡文件系統技術。
-
(2)精簡運行環境
-
通常,Linux的運行環境指用戶運行任何應用的基礎設施,主要包括函數庫和基本命令集。
-
Linux應用運行所需要的函數庫主要由C庫、數學庫、線程庫、加密庫、網絡通信庫等,其中最基本的是C語言的運行庫glibc。glibc主要完成基本的輸入/輸出、內存訪問、文件處理等功能,它需要大約1.2MB的存儲空間,由于嵌入式內核通常很小,因此需要做一些精簡工作,通常采用的方法有兩種:第一種,使用靜態鏈接的方法,而不適用運行庫動態鏈接;第二種,對glibc庫的函數進行精簡,嵌入式系統中,很少有多個程序并行的情況,因此庫函數的維護更新是不常見的,因此只需要保留一些基本功能即可。
-
基本命令集也是運行用戶的基礎,主要包括初始化進程init、終端獲取getty、shell和基本命令等。嵌入式系統的運行過程有時候與標準Linux不同,這就需要修改init、getty等。標準Linux命令集由于體積問題無法直接應用于嵌入式環境,目前小命令集解決方法主要包括集成方法和匯編方法,集成方法通過繼承公共部分來減小命令集整體體積,采用C語言來實現,具有很好的平臺移植性;匯編方法通過匯編程序來減小每個命令的體積,這樣可使得體積非常小,但是平臺移植性較差。
-
(3)嵌入式Linux下的GUI
-
隨著智能化技術的告訴發展,GUI在實時嵌入式系統中的地位越來越重要,比如PDA、智能手機、智能手表等,都需要一個漂亮、完整的圖形用戶界面。嵌入式GUI主要通過削減功能、降低性能來縮減體積和資源占用率。
3.2 uCLinux簡介
- uClinux是Linux操作系統的一種,是由Linux2.0內核發展而來的,它主要有三個基本部分組成:引導程序、uClinux內核(內存管理、進程管理和中斷處理)和文件系統。由于uClinux操作系統內核定制具有高度靈活性,開發者可以很容易地對其進行配置,并且它的代碼是公開的,開發人員只需了解內核原理就可以自由開發部分軟件。
- (1)uClinux的內核結構
- uClinux內核結構于標準Linux基本相同,不同的只是對內存管理和進程管理進行了改寫,以滿足MMU處理器的需求。另外,由于大多數內核源代碼都被重寫,uClinux的內核比原來的Linux2.0的內核小得多,但保留了Linux操作系統的穩定性、優異的網絡能力、優秀的文件系統支持等主要優點。
- (2)uClinux的內存管理
- uClinux與標準Linux的最大不同就在于內存管理,標準Linux是針對由MMU的處理器設計的,在這種處理器上,虛擬地支被送入MMU,MMU把虛擬地址映射為物理地址。通過賦予每個任務不同的虛擬-物理地址轉換映射,支持不同任務之間的保護。
- 然而,對于uClinux來說,其設計針對沒有MMU的處理器,不能使用處理器的虛擬內存管理技術。uClinux仍采用存儲器的分頁管理,系統在啟動時對實際存儲器進行分頁,在加載應用程序時程序分頁加載。由于沒有MMU管理,所以實際上uClinux采用實存儲器管理策略(Real Memeory Management)。uClinux系統是直接訪問內存的,所以程序中訪問的地址都是實際的物理地址。操作系統對內存空間沒有保護,各個進程實際上共享一個運行空間,即沒有獨立的地址轉換表。
- uClinux的這種內存管理設計,從內存訪問角度來看,增加了開發人員的自由性,開發人員在編程時可以訪問任意地址空間,但是系統的安全性大幅下降。
- (3)uClinux的多進程處理
- uClinux沒有MMU管理存儲器,在通過fork調用生成子進程,實現多個進程時,需要實現數據保護。這就意味著uClinux系統fork調用完成后,要么子程序替代父進程直至紫禁城推出;要么調用exec執行一個新的進程,此時將產生的可執行文件的加載。當子進程執行exit或exec后,子進程使用wakeup把父進程喚醒,使父進程繼續執行下去。
- uClinux的這種多進程實現機制于它的內存管理模式緊密相關。uClinux沒有MMU處理器的開發,所以它采用一種flat方式的內存管理模式,啟動新的應用程序時系統必須為應用程序分配存儲空間,并立刻把應用程序加載到內存。由于缺少MMU內存重映射機制,uClinux必須在可執行文件加載階段對可執行文件進行reloc出路,以便程序執行時能夠直接使用物理內存。
- (4)uClinux實時性的解決方案
- uClinux并沒有針對實時性方面的設計,但是它可以使用TR-Linux的patch來增強uClinux的實時性。RT-Linux執行管理器把普通Linux的內核堪稱一個任務運行,同時管理實時進程,并將非實時進程交給普通Linux內核處理。
四、嵌入式操作系統設計方法
4.1 嵌入式系統開發特點
- (1)人機交互界面
- 嵌入式體哦那個和通用計算機之間最大的區別就是人機交互界面。嵌入式系統通常不具備鍵盤、鼠標、顯示器等設備。它所處理的任務可能是網絡監控、傳感器信號等內容,并按照實現設定號的流程完成任務。
- (2)有限功能
- 嵌入式系統的功能在設計時i經定利好,在開發完成投入使用之后就不再變化。系統將反復執行這些預訂好的任務,而不像通用計算機那樣隨時可以運行新任務。當然,使用嵌入式操作系統的嵌入式系統可以剛u新的任務,刪除舊的任務。但這樣的變化對嵌入式系統而言是關鍵性變化.有4能會對整個系統行為產生影響。
- (3)時間的關鍵性與穩定性
- 嵌入式系統需要實時響應,所以具有嚴格的時序。同時,由于嵌入式系統工作環境非常惡劣,嵌入式系統要求非常可靠的穩定性。
- 于此同時,嵌入式軟件開發與傳統軟件開發具有很多共同點,但是嵌入式軟件運行特定目標應用環境,只需要完成預定功能即可,因此嵌入式軟件開發也具有自身特點如下:
- (1)需要交叉開發環境
- 交叉開發環境指實現編譯、鏈接、調試應用程序代碼的環境,它分散在由通信連接的宿主機和目標機環境中。
- 宿主機(Host)是一臺通用計算機,它通過串口或網口與目標機通信;目標機(Target)可以是嵌入式應用軟件的實際運行環境,也可以是仿真系統。
- 交叉軟件開發工具包括交叉編輯器、交叉調試器和模擬軟件等。交叉編譯器允許應用程序開發者在宿主機上生成能在目標機運行的代碼。交叉調試器和模擬調試軟件用于完成宿主機和目標機應用程序代碼的調試。
- (2)引入任務設計方法
- 嵌入式應用系統以任務為基本的執行單元。在系統設計階段,用多個并發的任務代替通用軟件的多個模塊,并定義了應用軟件間的接口。
- (3)需要固化程序
- 通用軟件的開發在測試完成后可直接投入使用,其目標環境與開發環境差別不大。然而,嵌入式應用程序開發環境和運行目標環境差別很大,并且要求應用軟件在目標環境下必須存儲在非易失性存儲器中,以便重啟后可繼續使用。所以應用軟件在開發完成后,應生成固化版本,燒寫到目標環境的FLASH中運行。
4.2 嵌入式系統開發流程
- 嵌入式系統的設計與一般包括需求分析階段、詳細設計階段、實現階段和測試階段等。
- (1)需求分析階段
- 需求分析階段是在項目開始時了解項目的情況,解決用戶而要做什的問題。這一階段主要包括分析用戶的需求、初步確定硬件和軟件、檢查需求分析的結果、確定項目的約束條件、進行概要設計等幾個方面。
- (2)詳細設計階段
- 詳細設計階段是通過需求分析的結果,設計出滿足用戶需求的嵌入式系統產品,這一階段主要包括串查需求分析獲得的資料、進行體系結構設計、對硬件和軟件功能進行劃分、設計硬件和軟件、檢查設計等過程。
- (3)實現階段
- 實現階段是根據詳細設計的結果實現設計好的嵌入式系統產品,這一階段主要包括選擇開發平臺和進行軟件開發。嵌入式系統購開發平臺由4部分組成:硬件平臺、操作系統、編程語言和開發工具。嵌入式系統軟件開發過程包括建立交叉開發環境、交叉編譯和鏈接、重定位和T載、聯機調試、在主機系統上驗證軟件、在目標系統上驗證軟件、優化代碼。
- (4)測試階段
- 嵌入式軟件需要在很長時間內穩定運行,嵌入式軟件一般不會頻繁地由用戶進行升級,嵌入式軟件有時使用在關鍵性的應用產品中,嵌入式軟件必須與嵌入式硬件一起對產品故障負責,真實世界中的事件一艙是異步而且不可預測的,這就使模擬測試既困難又不可靠。
總結
- 上一篇: 本体李俊火星大学最新演讲:从区块链核心价
- 下一篇: EDR汽车事件记录系统