ARM匯編語言程序設計基礎 第8章嵌入式系統(tǒng)數學
《ARM匯編語言程序設計基礎 第8章嵌入式系統(tǒng)數學》由會員分享,可在線閱讀,更多相關《ARM匯編語言程序設計基礎 第8章嵌入式系統(tǒng)數學(93頁珍藏版)》請在裝配圖網上搜索。
1、第第8章章 嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎8.1 嵌入式軟件基礎嵌入式軟件基礎n8.1.1 嵌入式軟件的特點n應用在嵌入式計算機系統(tǒng)當中的各種軟件統(tǒng)稱為嵌入式軟件,作為嵌入式系統(tǒng)的一個組成部分,目前嵌入式軟件的種類和規(guī)模都得到了極大的發(fā)展,形成了一個完整、獨立的體系。除了具有通用軟件的一般特性,同時還具有一些與嵌入式系統(tǒng)密切相關的特點,如:n(l)規(guī)模較小n在一般情況下,嵌入式系統(tǒng)的資源多是比較有限的,要求嵌入式軟件必須盡可能地精簡,多數的嵌入式軟件都在幾MB以內。n(2)開發(fā)難度大n嵌入式系統(tǒng)由于硬件資源的有限,使得嵌入式軟件在時間和空間上都受到嚴格的限制,需要開發(fā)
2、人員對編程語言、編譯器和操作系統(tǒng)有深刻的了解,才有可能開發(fā)出運行速度快、存儲空間少、維護成本低的軟件。嵌入式軟件一般都要涉及到底層軟件的開發(fā),應用軟件的開發(fā)也是直接基于操作系統(tǒng)的,這就要求開發(fā)人員具有扎實的軟、硬件基礎,能靈活運用不同的開發(fā)手段和工具,具有較豐富的開發(fā)經驗。嵌入式軟件的運行環(huán)境和開發(fā)環(huán)境比PC機復雜,嵌入式軟件是在目標系統(tǒng)上運行的,而嵌入式軟件的開發(fā)工作則是在另外的開發(fā)系統(tǒng)中進行,當應用軟件調試無誤后,再把它放到目標系統(tǒng)上去。n(3)高實時性和可靠性要求n具有實時處理的能力是許多嵌入式系統(tǒng)的基本要求,實時性要求軟件對外部事件做出反應的時間必須要快,在某些情況下還要求是確定的、可
3、重復實現的,不管系統(tǒng)當時的內部狀態(tài)如何,都是可以預測的。同時,對于事件的處理一定要在限定的時間期限之前完成,否則就有可能引起系統(tǒng)的崩潰。n在航天控制、核電站、工業(yè)機器人等實時系統(tǒng)對嵌入式軟件的可靠性要求是非常高的,一旦軟件出了問題,其后果是非常嚴重的。n(4)軟件固化存儲n為了提高系統(tǒng)的啟動速度、執(zhí)行速度和可靠性,嵌入式系統(tǒng)中的軟件一般都固化在存儲器芯片或微處理器中。8.1.2嵌入式軟件的分類n1系統(tǒng)軟件系統(tǒng)軟件n系統(tǒng)軟件控制和管理嵌入式系統(tǒng)資源,為嵌入式應用提供支持的各種軟件,如設備驅動程序、嵌入式操作系統(tǒng)、嵌入式中間件等。n2應用軟件應用軟件n應用軟件是嵌入式系統(tǒng)中的上層軟件,它定義了嵌入
4、式設備的主要功能和用途,并負責與用戶進行交互。應用軟件是嵌入式系統(tǒng)功能的體現,如飛行控制軟件、手機軟件、MP3播放軟件、電子地圖軟件等,一般面向于特定的應用領域,。n3支撐軟件支撐軟件n支撐軟件指輔助軟件開發(fā)的工具軟件,如系統(tǒng)分析設計工具、在線仿真工具、交叉編譯器、源程序模擬器和配置管理工具等。n在嵌入式系統(tǒng)當中,系統(tǒng)軟件和應用軟件運行在目標平臺的(即嵌入式設備上),而對于各種軟件開發(fā)工具來說,它們大部分都運行在開發(fā)平臺(PC機)上,運行Windows或Linux操作系統(tǒng)。8.1.3 嵌入式軟件的體系結構n1無操作系統(tǒng)的嵌入式軟件無操作系統(tǒng)的嵌入式軟件n早期在嵌入式系統(tǒng)的應用范圍主要集中在控制
5、領域,硬件的配置比較低,嵌入式軟件的設計主要是以應用為核心,應用軟件直接建立在硬件上,沒有專門的操作系統(tǒng),軟件的規(guī)模也很小。n無操作系統(tǒng)的嵌入式軟件主要采用循環(huán)輪轉和中斷(前后臺)兩種實現方式。n(1)循環(huán)輪轉方式n循環(huán)輪轉方式的基本設計思想是:把系統(tǒng)的功能分解為若干個不同的任務,放置在一個永不結束的循環(huán)語句當中,按照時間順序逐一執(zhí)行。當程序執(zhí)行完一輪后,又回到程序的開頭重新執(zhí)行,循環(huán)不斷。n循環(huán)輪轉方式的程序簡單、直觀、開銷小、可預測。軟件的開發(fā)可以按照自頂向下、逐步求精的方式,將系統(tǒng)要完成的功能逐級劃分成若干個小的功能模塊進行編程,最后組合在一起。循環(huán)輪轉方式的軟件系統(tǒng)只有一條執(zhí)行流程和一
6、個地址空間,不需要任務之間的調度和切換,其程序的代碼都是固定的,函數之間的調用關系也是明確的,整個系統(tǒng)的執(zhí)行過程是可預測的。n循環(huán)輪轉方式的缺點是程序必須按順序執(zhí)行,無法處理異步事件,缺乏并行處理的能力。缺乏硬件上的時間控制機制,無法實現定時功能。n(2)中斷方式n中斷方式又稱為前后臺系統(tǒng)形式,系統(tǒng)在循環(huán)輪轉方式的基礎上增加了中斷處理功能。ISR(Interrupt Service Routine,中斷服務程序)負責處理異步事件,即前臺程序(foreground),也稱為事件處理級程序。而后臺程序(background)是一個系統(tǒng)管理調度程序,一般采用的是一個無限的循環(huán)形式,負責掌管整個嵌入式
7、系統(tǒng)軟、硬件資源的分配、管理以及任務的調度。后臺程序也稱為任務級程序。一般情形下,后臺程序會檢查每個任務是否具備運行條件,通過一定的調度算法來完成相應的操作。而一些對實時性有要求的操作通常由中斷服務程序來完成,大多數的中斷服務程序只做一些最基本的操作,如標記中斷事件的發(fā)生等,其余的事情會延遲到后臺程序去完成。n2有操作系統(tǒng)的嵌入式軟件有操作系統(tǒng)的嵌入式軟件n從20世紀80年代開始,操作系統(tǒng)出現在嵌入式系統(tǒng)上。如今,嵌入式操作系統(tǒng)在嵌入式系統(tǒng)中廣泛應用,尤其是在功能復雜、系統(tǒng)龐大的應用中顯得愈來愈重要。在應用軟件開發(fā)時,程序員不是直接面對嵌入式硬件設備,而是采用一些嵌入式軟件開發(fā)環(huán)境,在操作系統(tǒng)
8、的基礎上編寫程序。n在控制系統(tǒng)中,采用前后臺系統(tǒng)體系結構的軟件,在遇到強干擾時,可能會使應用程序產生異常、出錯,甚至死循環(huán)的現象,從而造成系統(tǒng)的崩潰。而采用嵌入式操作系統(tǒng)管理的系統(tǒng),在遇到強干擾時,可能只會引起系統(tǒng)中的某一個進程被破壞,但這可以通過系統(tǒng)的監(jiān)控進程對其進行修復,系統(tǒng)具有自愈能力,不會造成系統(tǒng)崩潰。n在嵌入式操作系統(tǒng)環(huán)境下,開發(fā)一個復雜的應用程序,通??梢园凑哲浖こ痰乃枷耄瑢⒄麄€程序分解為多個任務模塊,每個任務模塊的調試、修改幾乎不影響其他模塊。利用商業(yè)軟件提供的多任務調試環(huán)境,可大大提高系統(tǒng)軟件的開發(fā)效率,降低開發(fā)成本,縮短開發(fā)周期。n嵌入式操作系統(tǒng)本身是可以剪裁的,嵌入式系統(tǒng)
9、外設、相關應用也可以配置,所開發(fā)的應用軟件可以在不同的應用環(huán)境、不同的處理器芯片之間移植,軟件構件可復用,有利于系統(tǒng)的擴展和移植。n嵌入式軟件的體系結構圖如圖8.1.2所示,最底層的是嵌入式硬件系統(tǒng),包括嵌入式微處理器、存儲器、鍵盤、LCD顯示器等輸入輸出設備。在硬件層之上的是設備驅動層,它負責與硬件直接打交道,并為操作系統(tǒng)層軟件提供所需的驅動支持。操作系統(tǒng)層可以分為基本部分和擴展部分,基本部分是操作系統(tǒng)的核心,負責整個系統(tǒng)的任務調度、存儲管理、時鐘管理和中斷管理等功能;擴展部分為用戶提供網絡、文件系統(tǒng)、圖形用戶界面GUI、數據庫等擴展功能,擴展部分的內容可以根據系統(tǒng)的需要來進行剪裁。在操作系
10、統(tǒng)的上面是一些中間件軟件。最上層是網絡瀏覽器、MP3播放器、文本編輯器、電子郵件客戶端、電子游戲等各種應用軟件,實現嵌入式系統(tǒng)的功能。圖8.1.2 嵌入式軟件體系結構8.1.4 嵌入式系統(tǒng)的設備驅動n嵌入式系統(tǒng)的設備驅動層用來完成嵌入式系統(tǒng)硬件設備所需要的一些軟件初始化和管理。設備驅動層直接對硬件進行管理和控制,并為上層軟件提供所需的驅動支持。n1板級支持包板級支持包n設備驅動層也稱為BSP(Board Support Package,板級支持包),在BSP中把所有與硬件相關的代碼都封裝起來,為操作系統(tǒng)提供一個虛擬的硬件平臺,操作系統(tǒng)運行在這個虛擬的硬件平臺上。在BSP當中,使用一組定義好的編
11、程接口來與BSP進行交互,并通過BSP來訪問真正的硬件。在嵌入式系統(tǒng)中,BSP類似于PC系統(tǒng)中的BIOS和驅動程序。BSP把嵌入式操作系統(tǒng)與具體的硬件平臺隔離開來。n一般來說,BSP是針對某個特定的單板而設計的,系統(tǒng)都會提供相應的演示版本的BSP(最小系統(tǒng)BSP)。BSP對于用戶(指系統(tǒng)開發(fā)人員)是開放的,用戶可以根據不同的硬件需求對其進行改動或二次開發(fā)。在實際開發(fā)一個嵌入式系統(tǒng)的時候,通??梢哉业揭粋€與自己的硬件系統(tǒng)相近的演示版本的BSP,并以此為基礎,進行修改和完善,以適應不同單板的需求。BSP主要包括BootLoader(引導加載程序)和設備驅動程序兩個方面的內容。n對于不同的嵌入式操作
12、系統(tǒng),BSP的具體結構和組成是不相同的。n2BootLoadernBootLoader(引導加載程序)是在操作系統(tǒng)內核運行之前運行的一小段程序。通過這段程序,初始化硬件設備、建立內存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境設置到一個合適的狀態(tài),以便為最終調用操作系統(tǒng)內核做好準備。BootLoader用來完成整個系統(tǒng)的加載啟動任務。通常在系統(tǒng)上電或復位時,BootLoader程序從地址0 x00000000處開始執(zhí)行。nBootLoader的功能與嵌入式系統(tǒng)的硬件平臺直接相關,不同的CPU體系結構和板級設備配置,BootLoader的功能不同。一般來說,BootLoader主要包含片級初始化、板級初
13、始化和加載內核等一些基本功能。n(1)片級初始化n片級初始化是一個純硬件的初始化過程,把微處理器從上電時的默認狀態(tài)逐步設置成系統(tǒng)所要求的工作狀態(tài)。片級初始化主要完成設置微處理器的核心寄存器和控制寄存器、微處理器的核心工作模式及其局部總線模式等初始化。n(2)板級初始化n板級初始化是一個同時包含有軟件和硬件在內的初始化過程,通過正確地設置各種寄存器的內容來完成微處理器以外的其他硬件設備的初始化。例如,初始化LED顯示設備、定時器、串口通信和內存控制器,建立內存空間的地址映射,設置中斷控制寄存器和某些軟件的數據結構和參數等。n(3)加載內核n將操作系統(tǒng)和應用程序的映像從Flash存儲器復制到系統(tǒng)的
14、內存當中,然后跳轉到系統(tǒng)內核的第一條指令處繼續(xù)執(zhí)行。n3設備驅動程序設備驅動程序n在一個嵌入式系統(tǒng)中,可以沒有操作系統(tǒng),但設備驅動程序是必不可少的。設備驅動程序是一組庫函數,用來對硬件進行初始化和管理,并向上層軟件提供訪問接口。n不同功能的硬件設備,它們的設備驅動程序是不同的。但大多數的設備驅動程序都具有硬件啟動(初始化)、硬件關閉(關機)、硬件停用(暫停)、硬件啟用(重新啟用)、讀操作(讀取數據)、寫操作(寫入數據)等基本功能。n設備驅動程序通??梢酝瓿梢恍┨囟ǖ墓δ?,這些功能一般采用函數的形式來實現,這些函數有分層結構和混合結構兩種組織結構形式。n在分層結構中,設備驅動程序中的函數分為硬件
15、接口和調用接口兩種類型。硬件接口直接跟硬件打交道的,直接去操作和控制硬件設備;調用接口不直接與硬件打交道,它們調用硬件接口當中的函數,與上層軟件(包括操作系統(tǒng)、中間件和應用軟件)打交道的。分層結構把所有與硬件有關的細節(jié)都封裝在硬件接口當中,在硬件要升級時,只需要改動硬件接口當中的函數即可,而上層接口當中的函數不用做任何修改。n在混合結構中,上層接口和硬件接口的函數是混在一起、相互調用的,之間沒有明確的層次關系。8.1.5 嵌入式中間件n中間件是一種軟件平臺技術,在銀行、證券、電信等行業(yè)的大型計算機應用系統(tǒng)中廣泛應用。近年來,中間件技術也被引入到嵌入式系統(tǒng)的設計中,并與實時多任務操作系統(tǒng)緊密結合
16、。利用中間件技術可以使用戶把精力集中到系統(tǒng)功能的實現上,實現嵌入式系統(tǒng)的軟硬件協(xié)同設計。n嵌入式中間件是指不包括操作系統(tǒng)內核、設備驅動程序和應用軟件在內的所有系統(tǒng)軟件。嵌入式中間件把原本屬于應用軟件層的一些通用的功能模塊抽取出來,形成獨立的一層軟件,為應用軟件提供一個靈活、安全、移植性好、相互通信、協(xié)同工作的平臺。n嵌入式中間件可以分為消息中間件、對象中間件、遠程過程調用(Remote Procedure Calls,RPC)、數據庫訪問中間件、安全中間件等不同的類型。n一些公司可提供嵌入式中間件集成解決方案,如Sun公司的嵌入式Java,微軟公司的.NET Compact Frame-wor
17、k,OMG(Object Management Group)的嵌入式CORBA等。8.2嵌入式操作系統(tǒng)基礎嵌入式操作系統(tǒng)基礎n8.2.1嵌入式操作系統(tǒng)的功能n在嵌入式系統(tǒng)中工作的操作系統(tǒng)稱為EOS(Embedded Operating System,嵌入式操作系統(tǒng)),EOS的基本功能主要體現在以下兩個方面:n1構成一個易于編程的虛擬機平臺nEOS構成一個虛擬機平臺,EOS把底層的硬件細節(jié)封裝起來,為運行在它上面的軟件(如中間件軟件和各種應用軟件)提供了一個抽象的編程接口。軟件開發(fā)在這個編程接口的上進行,而不直接與機器硬件層打交道。EOS所提供的編程接口實際上就是操作系統(tǒng)對外提供的系統(tǒng)調用函數。
18、n2系統(tǒng)資源的管理者nEOS是一個系統(tǒng)資源的管理者,負責管理系統(tǒng)當中的各種軟硬件資源,如處理器、內存、各種I/O設備、文件和數據等,使得整個系統(tǒng)能夠高效、可靠地運轉。n運行在嵌入式環(huán)境中的EOS其目標是為了完成某一項或有限項功能,而非通用型的操作系統(tǒng),因此在性能和實時性方面有嚴格的限制,能耗、成本和可靠性通常是影響設計的重要因素,要求占用資源少,適合在有限存儲空間運行,要求系統(tǒng)功能可以根據產品的設計要求進行剪裁、調整。n所有的EOS都有一個內核(kernel),內核是系統(tǒng)當中的一個組件,它包含了任務管理、存儲管理、輸入輸出(I/O)設備管理和文件系統(tǒng)管理四個功能模塊。其中:n 任務管理:對嵌入
19、式系統(tǒng)中的運行軟件進行描述和管理,并完成處理機資源的分配與調度;n 存儲管理:用來提高內存的利用率,方便用戶的使用,并提供足夠的存儲空間;n I/O設備管理:方便設備的使用,提高CPU和輸入輸出設備的利用率;n 文件管理:解決文件資源的存儲、共享、保密和保護等問題。n注意:不同的嵌入式系統(tǒng)的EOS所包含的組件可能各不相同,內核設計也可能各不相同的,完全取決于系統(tǒng)的設計以及實際的應用需求。8.2.2嵌入式操作系統(tǒng)的分類nEOS可以按照系統(tǒng)的類型、響應時間和軟件結構等不同的標準來分類。n1按系統(tǒng)的類型分類按系統(tǒng)的類型分類n按照系統(tǒng)的類型,可以把EOS分為商業(yè)化系統(tǒng)、專用系統(tǒng)和開放源代碼系統(tǒng)三大類。
20、n(1)商業(yè)化系統(tǒng)n商業(yè)化的EOS有風河公司(WindRiver)的VxWorks,微軟公司的Windows CE,Palm公司的PalmOS等等,其特點是功能強大,性能穩(wěn)定,輔助軟件工具齊全,應用范圍廣泛,但成本較高。n(2)專用系統(tǒng)n專用系統(tǒng)是一些專業(yè)廠家為本公司產品特制的嵌入式操作系統(tǒng),一般不提供給應用開發(fā)者使用。n(3)開放源代碼系統(tǒng)n開放源代碼的嵌入式操作系統(tǒng)有C/OS和各類嵌入式Linux系統(tǒng)等,具有免費、開源、性能優(yōu)良、資源豐富、技術支持強等優(yōu)點,是近年來發(fā)展迅速的一類操作系統(tǒng)。n2按響應時間分類按響應時間分類n按照系統(tǒng)對響應時間的敏感程度,EOS可以分為RTOS(Real Ti
21、me Operating Systems,實時操作系統(tǒng))和非實時操作系統(tǒng)兩大類:。nRTOS對響應時間有非常嚴格的要求,當某一個外部事件或請求發(fā)生時,相應的任務必須在規(guī)定的時間內完成相應的處理。RTOS可以分為硬實時和軟實時兩種情形。n(1)硬實時系統(tǒng)n硬實時系統(tǒng)對響應時間有嚴格的要求,如果響應時間不能滿足可能會引起系統(tǒng)的崩潰或致命的錯誤。n(2)軟實時系統(tǒng)n軟實時系統(tǒng)對響應時間有要求,如果響應時間不能滿足,將需要支付能夠接受的額外代價。n非實時系統(tǒng)對響應時間沒有嚴格的要求,各個進程分享處理器,以獲得各自所需要的運行時間。n3按軟件結構分類按軟件結構分類n按照軟件的體系結構,EOS可以分為單體
22、結構、分層結構和微內核結構三大類,如8.2.18.2.3所示。n(1)單體結構n單體結構是一種常見的組織結構,嵌入式Linux操作系統(tǒng)、Jbed RTOS、C/OS-II和PDOS都屬于單體內核系統(tǒng)。在單體結構(monolithic)的操作系統(tǒng)中,中間件和設備驅動程序通常就集成在系統(tǒng)內核當中,整個系統(tǒng)通常只有一個可執(zhí)行文件,里面包含了所有的功能組件。n單體結構的操作系統(tǒng)由一組功能模塊組成,系統(tǒng)的各個模塊之間可以相互調用,通信開銷比較小,系統(tǒng)高度集成和相互關聯,系統(tǒng)剪裁、修改、調試和維護不方便。圖8.2.1 單體結構 圖8.2.2 分層結構 n采用分層結構(layered)的操作系統(tǒng)內部分為若干
23、個層次(0N),各個層次之間的調用關系是單向的,即某一層次上的代碼只能調用比它低層的代碼。分層結構要求在每個層次上都要提供一組API接口函數,增加了系統(tǒng)的額外開銷,但系統(tǒng)的開發(fā)和維護較為簡單。典型代表有MS-DOS,其結構就是一個有代表性的、組織良好的分層結構。n(3)微內核結構n微內核(microkernel)結構把操作系統(tǒng)的大部分功能都剝離出去,在內核中只保留最核心的功能單元(如進程管理和存儲管理),大部分的系統(tǒng)功能都位于內核之外,例如,將所有的設備驅動程序都被置于內核之外,如圖8.2.3所示。n在微內核操作系統(tǒng)中,大部分的系統(tǒng)功能被放置在內核之外,客戶單元和服務器單元的內存地址空間是相互
24、獨立的,系統(tǒng)具有更高的安全性。新的功能組件也可以被動態(tài)地添加進來,擴展、調試、移植方便。在微內核操作系統(tǒng)中,核內組件與核外組件之間的通信方式是消息傳遞,而不是直接的函數調用,運行速度可能會慢一些。另外,由于它們的內存地址空間是相互獨立的,在切換的時候,也會增加額外的開銷。nOS-9、C Executive、VxWorks,CMX-RTX、Nucleus Plus和QNX等EOS采用的都是微內核結構。圖8.2.3 微內核結構8.2.3常見的嵌入式操作系統(tǒng)簡介n嵌入式操作系統(tǒng)是操作系統(tǒng)研究領域中的一個重要分支,有許多公司在從事相關方面的研究,開發(fā)了數以百計的各具特色的嵌入式操作系統(tǒng)產品,其中比較有
25、影響的系統(tǒng)有VxWorks、嵌入式Linux、Windows CE、C/OS-II和PalmOS等。n1VxWorksn美國WindRiver System公司開發(fā)的嵌入式實時操作系統(tǒng)VxWorks采用基于微內核的體系結構,整個系統(tǒng)由四百多個相對獨立、短小精練的目標模塊組成,用戶可以根據自己的需要選擇適當的模塊,進行裁減和配置。VxWorks采用GNU類型的編譯和調試器,專有的API函數,支持x86、Motorola MC68xxx、Coldfire、PowerPC、MIPS、ARM、i960等主流的32位處理器,具有良好的可靠性和卓越的實時性,是目前嵌入式系統(tǒng)領域中使用最廣泛、市場占有率最高
26、的商業(yè)系統(tǒng)之一。n在VxWorks操作系統(tǒng)中,主要包含有實時微內核Wind、I/O處理系統(tǒng)、文件系統(tǒng)、網絡處理模塊、虛擬內存模塊VxVMI、板級支持包BSP等功能模塊。其中:n實時微內核Wind包括基于優(yōu)先級的任務調度、任務間的通信、同步和互斥、中斷處理、定時器和內存管理機制等功能。與ANSI C兼容的I/O系統(tǒng)包括UNIX標準的緩沖I/O和POSIX標準的異步I/O。文件系統(tǒng)主要包括與MS-DOS兼容的文件系統(tǒng)、與RT-11兼容的文件系統(tǒng)、Raw Disk文件系統(tǒng)和SCSI磁帶設備。網絡處理模塊能與如TCP/IP、NFS、UDP、SNMP、FTP等許多運行其他協(xié)議的網絡進行通信。虛擬內存模塊
27、VxVMI主要用于對指定內存區(qū)的保護,以加強系統(tǒng)的安全性。板級支持包BSP由初始化和驅動程序兩部分組成,用來管理硬件的功能模塊,對各種板卡的硬件功能提供統(tǒng)一的接口。n2嵌入式嵌入式Linuxn嵌入式Linux(Embedded Linux)是指對標準Linux進行小型化剪裁處理之后,可固化在存儲器或單片機中,適合于特定嵌入式應用場合的專用Linux操作系統(tǒng)。常見的嵌入式Linux有Clinux、RT-Linux、Embedix和Hard Hat Linux等,具有如下特點:n 具有高性能、可裁剪的內核,其獨特的模塊機制使用戶可以根據自己的需要,實時地將某些模塊插入到內核或從內核中移走,很適合于
28、嵌入式系統(tǒng)的小型化的需要。n 具有完善的網絡通信和文件管理機制,支持所有標準的Internet網絡協(xié)議,支持ext2,nfat16,fat32,romfs等文件系統(tǒng)。n 可提供完整的工具鏈(Tool Chain),利用GNU的gcc做編譯器,用gdb,kgdb,xgdb做調試工具,能夠方便地實現從操作系統(tǒng)到應用軟件各個級別的調試。n 嵌入式Linux是開放源碼的自由操作系統(tǒng),用戶可以根據自己的應用需要方便地對內核進行修改和優(yōu)化。n 支持x86、ARM、MIPS、Alpha、PowerPC等多種體系結構,支持各種主流硬件設備和最新硬件技術。n 幾乎每一種通用程序在Linux上都能找到,具有豐富的
29、軟件資源。n C linux主要針對沒有MMU的微處理器;RT-Linux是最早實現硬實時支持的Linux版本;Embedix采用模塊化的設計方案,方便系統(tǒng)剪裁;Hard Hat Linux是一個嵌入式實時系統(tǒng),可以針對硬件環(huán)境進行配置,以獲得最佳的性能和最小的容量。n3Windows CEnWindows CE是一個基于優(yōu)先級的多任務嵌入式操作系統(tǒng),提供了256個優(yōu)先級別,基本內核需要至少200KB的ROM,支持Win32API子集、支持多種用戶界面硬件、支持多種串行和網絡通信技術。Windows CE不是一個硬實時系統(tǒng)。nWindows CE主要包含內核模塊、內核系統(tǒng)調用接口模塊、文件系統(tǒng)
30、模塊、圖形窗口和事件子系統(tǒng)模塊和通信模塊五個功能模塊。其中:內核模塊支持進程和線程處理及內存管理等基本服務。內核系統(tǒng)調用接口模塊允許應用軟件訪問操作系統(tǒng)提供的服務。文件系統(tǒng)模塊支持DOS等格式的文件系統(tǒng)。圖形窗口和事件子系統(tǒng)模塊控制圖形顯示,并提供Windows GUI圖形界面。通信模塊允許同其他的設備進行信息交換。nWindows CE操作系統(tǒng)集成了大量的Windows XP Professional的特性,能提供與PC機類似的桌面、任務欄、窗口、圖標、控件等圖形界面和各種應用程序。熟悉Windows操作系統(tǒng)的用戶可以很快地使用基于Windows CE的嵌入式設備。另外,微軟公司提供了Vis
31、ual Studio.NET、Embedded Visual C+、Embedded Visual Basic等一組功能強大的應用程序開發(fā)工具,專門用于對Windows CE操作系統(tǒng)的開發(fā)。n4 C/OS-IInC/OS-II是一種免費、開放源代碼、結構小巧、基于可搶占優(yōu)先級調度的實時操作系統(tǒng),其內核提供任務調度與管理、時間管理、任務間同步與通信、內存管理和中斷服務等功能。名稱C/OS-II來源于術語Micro-Controller Operating System(微控制器操作系統(tǒng)),它通常也稱為MUCOS或者UCOS。nC/OS-II內核在2KB 10KB數量級,具有執(zhí)行效率高、占用空間小
32、、實時性能優(yōu)良和可擴展性強等特點,主要面向中小型嵌入式系統(tǒng)。C/OS-II內核提供最基本的系統(tǒng)服務,例如信號量、郵箱、消息隊列、內存管理、中斷管理等。C/OS-II內核本身并不支持文件系統(tǒng),但它具有良好的擴展性能,可以根據需要自行加入。C/OS-II具有良好的可移植性。C/OS-II的大部分代碼都是用C語言寫成的,只有與處理器的硬件相關的一部分代碼采用匯編語言編寫。C/OS-II并不是一個商業(yè)實時操作系統(tǒng),但C/OS-II的穩(wěn)定性和實用性卻被數百個商業(yè)級的應用所驗證,C/O S-II不已在眾多的商業(yè)領域中獲得了廣泛的應用。nC/OS-II支持ARM、PowerPC、MIPS、68k/ColdF
33、ire和x86等多種體系結構。8.3 嵌入式系統(tǒng)的任務管理嵌入式系統(tǒng)的任務管理n8.3.1 單道程序設計和多道程序設計n嵌入式操作系統(tǒng)可以分為單道程序設計和多道程序設計(mufti-programming)兩種類型。n1單道程序設計類型單道程序設計類型n采用單道程序設計的操作系統(tǒng)在任何時候只能有一個程序在運行。n例如:有兩個程序甲和乙,它們在運行過程中都要用到CPU和I/O設備。如圖8.3.1所示,圖中我們采用不同的方框來表示這兩個程序對兩種資源的使用情況,方框的長度表示使用的時間。n在單道程序設計的環(huán)境下,在任何時候,系統(tǒng)中只能有一個程序在運行,因此,甲和乙這兩個程序只能一個接一個的執(zhí)行。如
34、圖8.3.1所示,首先執(zhí)行程序甲,從t0時刻開始,到t6時刻結束。然后再執(zhí)行程序乙,從t6時刻開始,一直到它所有的工作都已完成。n2.多道程序設計類型多道程序設計類型n采用多道程序設計的操作系統(tǒng)允許多個程序同時存在并運行,采用多道程序技術可以有效提高系統(tǒng)資源的利用率。n在多道程序設計的環(huán)境下,允許多個程序同時運行,當一個程序在訪問I/O設備時,會主動把CPU交出來,讓另一個程序去運行,從而提高系統(tǒng)資源的使用效率。如圖8.3.1所示,從t0到t1,甲在使用I/O設備,乙處于等待狀態(tài)。在到達了t1時刻后,甲釋放剛剛占用的I/O設備,交給程序乙去使用。因此,在t1到t2期間,程序甲在使用CPU,程序
35、乙在使用I/O設備。在到達t2時刻后,乙釋放剛剛占用的I/O設備,交給程序甲去使用。因此,在t2到t3期間,甲和乙兩個程序相互交換資源,繼續(xù)執(zhí)行。同樣的情形也發(fā)生在t3時刻和t4時刻。但是在t5時刻,甲已經使用完了I/O設備,而乙仍然在使用CPU,所以甲只能處于等待狀態(tài),等到t6時刻再交換資源。這樣一直進行下去,在t7時刻,甲執(zhí)行完畢,在t8時刻,乙也執(zhí)行完畢。n從圖8.3.1可見,由于CPU和I/O設備的使用是并行進行的,在總的執(zhí)行時間上要明顯少于單道程序系統(tǒng)。圖8.3.1 單道程序與多道程序的運行過程8.3.2進程、線程和任務n1進程進程n進程(process)是在描述多道系統(tǒng)中并發(fā)活動過
36、程引入的一個概念。進程和程序是兩個既有聯系又有區(qū)別的概念,兩者不能混為一談。例如:一個程序主要由代碼和數據兩部分內容組成。而進程是正在執(zhí)行的程序,它是由程序和該程序的運行上下文兩部分內容組成。程序是靜態(tài)的,而進程是一個動態(tài)的,變化的。進程和程序之間并不是一一對應的。一個進程在運行的時候可以啟動一個或多個程序,同一個程序也可能由多個進程同時執(zhí)行。程序可以以文件的形式存放在硬盤或光盤上,作為一種軟件資源長期保存。而進程則是一次執(zhí)行過程,它是暫時的,是動態(tài)地產生和終止的。n一個進程通常包含有以下幾個方面的內容:n 相應的程序:進程是一個正在運行的程序,有相應程序的代碼和數據。n CPU上下文:程序在
37、運行時,CPU中含有PC(Program Counter,程序計數器)、PSW(Program Status Word,程序狀態(tài)字)、通用寄存器、段寄存器、棧指針寄存器等各種寄存器的當前值內容,例如:在PC中記錄的將要取出的指令的地址,在PSW中用于記錄處理器的運行狀態(tài)信息,通用寄存器存放的數據或地址;段寄存器存放的程序中各個段的地址;棧指針寄存器記錄的棧頂的當前位置。n 一組系統(tǒng)資源:包括操作系統(tǒng)用來管理進程的數據結構、進程的內存地址空間、進程正在使用的文件等。n 總而言之,進程包含了正在運行的一個程序的所有狀態(tài)信息。進程具有動態(tài)性,進程是一個正在運行的程序,程序的運行狀態(tài)都在不斷地變化,如
38、PC寄存器的值、堆和棧的內容、通用寄存器存放數據和地址等。進程具有獨立性,一個進程是一個獨立的實體,占有計算機的系統(tǒng)資源,每個進程都有自己的運行上下文和內部狀態(tài),在它運行的時候獨立于其他的進程。進程具有并發(fā)性,在系統(tǒng)中同時有多個進程存在,它們相互獨立地運行。n2線程線程n線程(thread)是一個比進程更小的能獨立運行的基本單位。所謂的線程,就是進程當中的一條執(zhí)行流程。n從資源組合的角度來看,進程把一組相關的資源組合起來,構成了一個資源平臺(資源環(huán)境),其中包括運行上下文、內存地址空間、打開的文件等,在圖8.3.2中用深色的方框來表示。從程序運行的角度來看,進程就是一個正在運行的程序,在圖8.
39、3.2中用一條帶有箭頭的線段來表示。從圖8.3.2可見,可以把進程看成是程序代碼在這個資源平臺上的一條執(zhí)行流程(線程),也就是可以認為進程等于線程加上資源平臺。n如圖8.3.2所示,在一個進程當中,或者說在一個資源平臺上,可以同時存在多個線程??梢杂镁€程來作為CPU的基本調度單位,使得各個線程之間可以并發(fā)執(zhí)行。對于同一個進程當中的各個線程來說,運行在相同的資源平臺上,可以共享該進程的大部分資源(如內存地址空間、代碼、數據、文件等),但也有一小部分資源是不能共享的,每個線程都必須擁有各自獨立的一份(如CPU運行上下文(如PC寄存器、PSW寄存器、通用寄存器和棧指針等)和棧)。圖8.3.2 線程與
40、進程的資源關系n3任務任務n在一些嵌入式系統(tǒng)中,把能夠獨立運行的實體稱為“任務”(task),并沒有使用“進程”或“線程”這兩個概念。任務到底是進程還是線程,在研究一個具體的嵌入式操作系統(tǒng)的時候,要注意加以區(qū)分。n在任務的創(chuàng)建過程需要定義的主要參數有任務的優(yōu)先級、??臻g的大小和函數名。任務具有獨立的優(yōu)先級和??臻g,CPU上下文一般也是存放在??臻g中。對于不同的任務,它們也能夠訪問相同的全局變量,在這些任務之間,可以很方便地、直接地去使用共享的內存,而不需要經過系統(tǒng)內核來進行通信。n通常認為,在嵌入式操作系統(tǒng)中“任務”就是線程,如在VxWorks、C/OS-II、Jbed、嵌入式Linux等嵌入
41、式操作系統(tǒng)中。8.3.3任務的實現n1任務的層次結構任務的層次結構n任務的層次結構如圖8.3.3所示。在多道程序的嵌入式操作系統(tǒng)中,同時存在著多個任務,嵌入式內核啟動時,只有一個任務存在,然后由該任務派生出其他所有任務,這些任務采用層狀結構,存在著父子關系。圖8.3.3 任務的層次結構n2.任務的創(chuàng)建與終止任務的創(chuàng)建與終止n(1)任務的創(chuàng)建n在一個嵌入式操作系統(tǒng)中,在系統(tǒng)初始化、任務運行過程中、人機交互等過程中都可以創(chuàng)建任務。n在系統(tǒng)初始化時,一般都會創(chuàng)建系統(tǒng)與用戶進行交互的一些前臺任務,以及完成鍵盤掃描、系統(tǒng)狀態(tài)檢測、時間統(tǒng)計等一些特定功能的后臺任務。在任務運行過程中,也能夠使用相應的系統(tǒng)調
42、用來創(chuàng)建新的任務,以幫助它完成自己的工作。在一些具有交互功能的嵌入式系統(tǒng)中,用戶可以通過輸入命令或單擊圖標的方式,讓系統(tǒng)啟動一個新的任務。n創(chuàng)建任務的基本方法是在一個已經存在的任務當中,通過調用相應的系統(tǒng)函數來創(chuàng)建一個新的任務。n在嵌入式操作系統(tǒng)當中,任務的創(chuàng)建主要采用fork/exec和spawn兩種模型。fork/exec模型源于IEEE/ISO POSIX 1003.1標準,而spawn模型是從它派生出來的。n兩種模型創(chuàng)建任務的過程非常相似,包括為新任務分配相應的數據結構,存放各種管理信息,分配內存空間,存放任務的代碼和數據。當這個新任務準備就緒后,就可以啟動它運行了。n在fork/ex
43、ec模型,首先調用fork函數為新任務創(chuàng)建一份與父任務完全相同的內存空間,然后再調用exec函數裝入新任務的代碼,并用它來覆蓋原有的屬于父任務的內容。對于新創(chuàng)建的子任務來說,它可以從父任務那里繼承代碼、數據等各種屬性。而spawn模型在創(chuàng)建新任務的時,直接為它分配一個全新的地址空間,然后將新任務的代碼裝入并運行。n(2)任務的終止n任務的終止可能有多種原因,正常退出、錯誤退出、被其他任務踢出等情況可以使任務終止。n當一個任務完成了所有的工作,需要結束運行,提出退出要求,稱為正常退出。n當一個任務在執(zhí)行過程中,出現了致命的錯誤(例如執(zhí)行了非法指令、內存訪問錯誤等),系統(tǒng)中止該任務的運行,強制性地
44、讓該任務退出,稱為錯誤退出。n在一些操作系統(tǒng)中可以提供一些系統(tǒng)調用函數,用來把一個任務從系統(tǒng)中清除出局,稱為被其他任務踢出。n在一些嵌入式系統(tǒng)中,某些任務被設計為“死循環(huán)”的模式,任務不會自行終止。n3任務的狀態(tài)任務的狀態(tài)n在多道程序系統(tǒng)中,任務是獨立運行的實體,需要競爭系統(tǒng)資源,而任務所擁有的資源是在不斷變化中的,使得任務的狀態(tài)也在不斷的變化。一般來說,任務具有運行(running)、就緒(ready)和阻塞(blocked)三種基本狀態(tài)。n任務在運行狀態(tài)時占有CPU并在CPU上運行,在任何一個時刻,處于運行狀態(tài)的任務個數必須小于或等于CPU的數目。如果在一個系統(tǒng)中只有一個CPU的話,那么最
45、多只能有一個任務處于運行狀態(tài)。n當一個任務已具備運行條件,但由于CPU正在運行其他的任務,暫時不能運行該任務時,稱為就緒狀態(tài)。不過,只要把CPU分給該任務,它就能夠立刻執(zhí)行。n任務因為正在等待某種事件的發(fā)生而暫時不能運行稱為阻塞狀態(tài),也叫等待狀態(tài)(waiting)。此時,即使CPU已經空閑下來了,該任務也還是不能運行。n如圖8.3.4所示,在一定條件下,任務會在不同的狀態(tài)之間來回轉換,存在運行阻塞、運行就緒、就緒運行、阻塞就緒四種轉換關系。圖8.3.4 任務間的狀態(tài)轉換圖n4任務控制塊任務控制塊nTCB(Task Control Block,任務控制塊)是在操作系統(tǒng)當中用來描述和管理一個任務的
46、數據結構。通過對各個任務的TCB的操作來實現任務管理。利用TCB這個數據結構可以描述任務的基本情況,以及它的運行變化過程??梢园裈CB看成是任務存在的唯一標志。當需要創(chuàng)建一個新任務的時候,就為它生成一個TCB,并初始化這個TCB的內容;當需要終止一個任務的時候,只要回收它的TCB即可。對任務的組織和管理可以通過對它們的TCB的組織和管理來實現。TCB主要包括任務的管理信息、CPU上下文信息、資源管理信息等內容。n(1)任務的管理信息n任務的管理信息包括任務的標識ID、任務的狀態(tài)、任務的優(yōu)先級、任務的調度信息、任務的時間統(tǒng)計信息、各種隊列指針等。n(2)CPU上下文信息nCPU上下文信息包括通用
47、寄存器、PC寄存器、程序狀態(tài)字、棧指針等各種CPU寄存器的當前值。在實際的嵌入式系統(tǒng)中,CPU上下文信息不一定直接存放在TCB當中,而是存放在任務的棧當中,可以通過相應的棧指針來訪問。n(3)資源管理信息n在操作系統(tǒng)中,任務表示的是進程,則還應包含一些資源管理方面的信息,如段表地址、頁表地址等存儲管理方面的信息,根目錄、文件描述字等文件管理方面的信息。n5任務切換任務切換n任務切換(context switching)是指一個任務正在CPU上運行,由于某種原因,系統(tǒng)需要調度另一個任務去運行,那么這時就需要進行把當前任務的運行上下文保存起來,并設置新任務的上下文,這一過程稱為任務切換。n任務切換
48、通常包含有以下幾個基本步驟:n(1)將處理器的運行上下文保存在當前任務的TCB中;n(2)更新當前任務的狀態(tài),從運行狀態(tài)變?yōu)榫途w狀態(tài)或阻塞狀態(tài)。n(3)按照一定的策略,從所有處于就緒狀態(tài)的任務中選擇一個去運行。n(4)修改新任務的狀態(tài),從就緒狀態(tài)變成運行狀態(tài)。n(5)根據新任務的TCB的內容,恢復它的運行上下文環(huán)境。n6任務隊列任務隊列n在一個多任務的操作系統(tǒng)中,各個任務的狀態(tài)是經常變化的,有時處于運行狀態(tài),有時處于就緒狀態(tài),有時又處于阻塞狀態(tài)。通常采用任務隊列的方式來組織它的所有任務,以提高對這些任務的管理效率。n操作系統(tǒng)用一組隊列來表示系統(tǒng)當中所有任務的當前狀態(tài)。例如,處于運行狀態(tài)的所有任
49、務構成了運行隊列,處于就緒狀態(tài)的所有任務構成了就緒隊列,而對于處于阻塞狀態(tài)的任務,則要根據它們阻塞的原因,分別構成相應的阻塞隊列。不同的狀態(tài)用不同的隊列來表示。然后,對于系統(tǒng)當中的每一個任務,根據它的狀態(tài)把它的TCB加入到相應的隊列當中去。如果一個任務的狀態(tài)發(fā)生變化,就要把它的TCB從一個狀態(tài)隊列中脫離出來,加入到另一個隊列當中去。8.3.4 任務的調度n1任務調度概述任務調度概述n在多道程序操作系統(tǒng)中,當有兩個或多個任務同時處于就緒狀態(tài)時,而系統(tǒng)中只有一個CPU而且這個CPU己經空閑下來了,就會出現多個任務同時去競爭這個CPU的情況。通常利用調度器(scheduler)選擇就緒隊列中的那些任
50、務中的一個去運行,調度器是CPU這個資源的管理者。調度器在決策過程中所采用的算法稱為調度算法。n一般來說,在一個新的任務被創(chuàng)建時、在一個任務運行結束時、在一個任務由于I/O操作、信號量或其他原因被阻塞時、在一個I/O中斷發(fā)生時、在一個時鐘中斷發(fā)生時這五種調度時機都可能會發(fā)生任務的調度。n任務調度存在可搶占調度(preemptive)和不可搶占調度(nonpreemptive)兩種調度方式。n(1)在可搶占調度方式,當一個任務正在運行的時候,出現調度時機當中的五種情況之一,都有可能會發(fā)生調度。調度程序可以去打斷它,并安排另外的任務去運行。實時操作系統(tǒng)大都采用可搶占的調度方式。n(2)在不可搶占調
51、度方式,一個任務長時間地占用著CPU系統(tǒng)也不會強制它中止。當出現新任務創(chuàng)建、任務運行結束及任務被阻塞的調度時機時,有可能會發(fā)生調度。而對于發(fā)生的各種中斷,并不會去調用調度程序,而是在中斷處理完成后,又會回到剛才被打斷的任務中繼續(xù)執(zhí)行。n在嵌入式操作系統(tǒng)中,存在著許多的調度算法,每一種算法都有各自的優(yōu)點和缺點??梢愿鶕憫獣r間、周轉時間、調度開銷、公平性、均衡性、吞吐量等指標來評價一個調度算法的好壞。其中:n 調度器為一個就緒任務進行上下文切換時所需的時間,以及任務在就緒隊列中的等待時間稱為響應時間(response time)。n 一個任務從提交到完成所經歷的時間稱為周轉時間(turnarou
52、nd time)。n 調度器在做出調度決策時所需要的時間和空間開銷稱為調度開銷(overhead)。n 公平性(fairness)是指大致相當的兩個任務所得到的CPU時間也應該是大致相同的。另外,要防止饑餓(starvation)情況出現,即某一個任務始終得不到處理器去運行。n 均衡性(balance)是指要盡可能使整個系統(tǒng)的各個部分(CPU,I/O)都忙起來,提高系統(tǒng)資源的使用效率。n 單位時間內完成的任務數量稱為吞吐量(throughput)。n對于一個調度算法來說,這些指標中一些是共存的,而另一些是相互牽制的,這些指標不可能全部都實現,而是需要根據系統(tǒng)的要求,綜合權衡和折中選擇。n2先來
53、先服務算法(先來先服務算法(First Come First Served,FCFS)nFCFS(First Come First Served,先來先服務算法)是一種最簡單的調度算法。FCFS的基本思想就是按照任務到達的先后次序來進行調度,它是一種不可搶占的調度方式。FCFS也叫做FIFO(First In First Out,先進先出算法)。nFCFS的最大優(yōu)點就是簡單,易于理解也易于實現。缺點是一批任務的平均周轉時間取決于各個任務到達的順序,如果短任務位于長任務之后,那么將增大平均周轉時間。n3短作業(yè)優(yōu)先算法(短作業(yè)優(yōu)先算法(Shortest Job First,SJF)n在SJF(Sh
54、ortest Job First,短作業(yè)優(yōu)先算法)中,在各個任務在開始執(zhí)行前,事先預計好各任務的執(zhí)行時間,調度算法根據這些預計時間,安排執(zhí)行時間較短的任務優(yōu)先執(zhí)行??梢宰C明,對于一批同時到達的任務,采用SJF算法將得到一個最小的平均周轉時間。nSJF算法有不可搶占方式和可搶占方式兩種實現方案。在不可搶占方式,只有任務運行完畢或者是被阻塞時,才會讓出CPU進行新的調度。而在可搶占方式,當前任務正在運行的時候,來了一個比它執(zhí)行時間更短的任務,而且它的運行時間要小于當前正在運行的任務的剩余時間,那么這個新任務就會搶占CPU去運行。這種方法也稱為SRTF(Shortest Remaining Time
55、 First,最短剩余時間優(yōu)先算法)n不可搶占的SJF算法如圖8.3.5所示,由于任務T3的執(zhí)行時間最短,所以首先被調度運行,其次是T1和T2。圖8.3.5 SJF算法示意圖n4時間片輪轉算法(時間片輪轉算法(Round Robin,RR)nRR算法如圖8.3.6所示。在RR(Round Robin,時間片輪轉算法)中,把系統(tǒng)當中的所有就緒任務按照先來先服務的原則進行排列,然后,在每次調度的時候,處理器分派給隊列當中的第一個任務一小段CPU執(zhí)行時間(time slice,時間片)。當這個時間片結束的時候,如果任務還沒有執(zhí)行完的話,將會發(fā)生時鐘中斷,調度器將會暫停當前任務的執(zhí)行,并把這個任務送到
56、就緒隊列的末尾,然后再執(zhí)行當前的隊列的第一個任務。如果一個任務在分配給它的時間片結束前就已經運行結束了或者是被阻塞了,那么它就會立即讓出CPU給其他的任務。n采用RR算法,各個就緒任務平均地分配CPU的使用時間,例如有n個就緒任務,那么每個任務將得到1/n的CPU時間。n采用RR算法時,時間片q既不能太大,也不能太小。q太大,每個任務都在一個時間片內完成,這就失去了RR算法的意義。如果q太小,每個任務都需要更多的時間片才能運行完,增加了在任務之間的切換次數,增大了系統(tǒng)的管理開銷,降低了CPU的使用效率。圖8.3.6 RR算法示意圖n5優(yōu)先級算法(優(yōu)先級算法(priority)n在優(yōu)先級調度算法
57、(priority)中,給每一個任務都設置一個優(yōu)先級,然后在任務調度的時候,在所有處于就緒狀態(tài)的任務中選擇優(yōu)先級最高的那個任務去運行。例如,在短作業(yè)優(yōu)先算法中,以時間為優(yōu)先級,運行時間越短,優(yōu)先級越高。n優(yōu)先級算法可以分為可搶占和不可搶占兩種方式。在可搶占方式中,當一個任務正在運行的時候,如果這時來了一個新的任務,其優(yōu)先級更高,則立即搶占CPU去運行這個新任務。而不可搶占方式則是需要等當前任務運行完后再決定。n可以采用靜態(tài)方式和動態(tài)方式確定任務的優(yōu)先級。靜態(tài)優(yōu)先級方式根據任務的類型或重要性,在創(chuàng)建任務的時候就確定任務的優(yōu)先級,并且一直保持不變直到任務結束。動態(tài)優(yōu)先級方式在創(chuàng)建任務的時候確定任務
58、的優(yōu)先級,但是該優(yōu)先級可以在任務的運行過程中動態(tài)改變,以便獲得更好的調度性能。動態(tài)優(yōu)先級方式可以克服在靜態(tài)優(yōu)先級方式中高優(yōu)先級的任務一直占用著CPU,而那些低優(yōu)先級的任務可能會長時間地得不到CPU的情況。n在優(yōu)先級算法中,對于優(yōu)先級相同的兩個任務,通常是把任務按照不同的優(yōu)先級進行分組,然后在不同組的任務之間使用優(yōu)先級算法,而在同一組的各個任務之間使用時間片輪轉法。8.3.5 實時系統(tǒng)調度n許多嵌入式操作系統(tǒng)都是實時操作系統(tǒng)(RTOS),實時系統(tǒng)的調度追求的是實時性,RTOS調度器要讓每個任務都在其最終時間期限(deadline)之前完成,而各任務之間的公平性并不是最重要的指標。RTOS調度器多
59、采用基于優(yōu)先級的可搶占調度算法。n1RTOS任務模型任務模型nRTOS任務模型如圖8.3.7所示,在RTOS任務模型中,每一個任務用一個三元組來表示(執(zhí)行時間、周期、時間期限)。其中:執(zhí)行時間(execution time)E(i)是指對于第i個任務,當它所需要的資源都己具備時,它的執(zhí)行所需要的最長時間。周期(period)P(i)是指第i個任務的連續(xù)兩次運行之間的最小時間間隔。時間期限(deadline)是指D(i)第i個任務所允許的最大響應時間(從任務啟動到運行結束所需的時間)。一般來說,一個任務的周期時間同時也是它的時間期限,因為該任務必須在它的下一個周期開始之前,完成此次運行。啟動時間
60、t(i)是指第i個任務的第i次執(zhí)行的開始時間。圖8.3.7 RTOS任務模型n2單調速率調度算法(單調速率調度算法(Rate Monotonic Scheduling,RMS)nRMS(Rate Monotonic Scheduling,單調速率調度算法)是一種靜態(tài)優(yōu)先級調度算法。nRMS算法假設:所有的任務都是周期性任務;任務的時間期限等于它的周期;任務在每個周期內的執(zhí)行時間是一個常量;任務之間不進行通信,也不需要同步;任務可以在任何位置被搶占,不存在臨界區(qū)的問題。nRMS算法的基本思路是任務的優(yōu)先級與它的周期表現為單調函數的關系,任務的周期越短,優(yōu)先級越高;任務的周期越長,優(yōu)先級越低。nR
61、MS算法是一種最優(yōu)調度算法。如果存在一種基于靜態(tài)優(yōu)先級的調度順序,使得每個任務都能在其期限時間內完成,那么 RMS算法總能找到這樣的一種可行的調度方案。n在任務比較多的情況下,RMS可調度的CPU使用率上限為ln20.69,CPU使用率如此低,對于大多數系統(tǒng)來說是不可接受的。另外,在一個實際的系統(tǒng)中,任務之間通常都需要進行通信和同步。n3最早期限優(yōu)先算法(最早期限優(yōu)先算法(Earliest Deadline First,EDF)nEDF(Earliest Deadline First,最早期限優(yōu)先)調度算法是一種動態(tài)優(yōu)先級調度算法。nEDF算法的基本思路是:根據任務的截止時間來確定其優(yōu)先級,對
62、于時間期限最近的任務,分配最高的優(yōu)先級。當有一個新的任務處于就緒狀態(tài)時,各個任務的優(yōu)先級就有可能要進行調整。nEDF算法假設條件除了它不要求系統(tǒng)中的任務都必須是周期任務外,其他的假設條件與RMS相同。nEDF算法可調度上限為100。對于給定的一組任務,只要它們的CPU使用率小于或等于1,EDF就能找到合適的調度順序,使得每個任務都能在自己的時間期限內完成。8.4 嵌入式系統(tǒng)的存儲管理n8.4.1嵌入式存儲管理方式的特點n 嵌入式系統(tǒng)的存儲管理方式與系統(tǒng)的實際應用領域及硬件環(huán)境密切相關,不同的嵌入式系統(tǒng)采用不同的存儲管理方式,需要考慮硬件條件、實時性要求、系統(tǒng)規(guī)模、可靠性要求等因素。系統(tǒng)的實時性
63、要求直接影響到存儲管理的實現方式,為了確保系統(tǒng)的實時性,快速和確定是內存管理的基本要求,即在存儲管理方面的開銷不能太大,對于每一項工作都要有明確的實時約束,即必須在某個限定的時刻之前完成。在實時系統(tǒng)中,存儲管理方法就比較簡單,甚至不提供存儲管理功能。而對一些實時性要求不高,可靠性要求比較高、比較復雜的應用系統(tǒng),需要實現對操作系統(tǒng)或任務的保護,在存儲管理方式上就相對較為復雜。n在嵌入式微處理器中,MMU(Memory Management Unit,存儲管理單元)提供了一種內存保護的硬件機制。內存保護用來防止地址越界和防止操作越權。采用內存保護機制的每個應用程序都有自己獨立的地址空間,當一個應用
64、程序要訪問某個內存單元時,由硬件檢查該地址是否在限定的地址空間內,如果不是的話就要進行地址越界處理;二是防對于允許多個應用程序共享的某塊存儲區(qū)域,每個應用程序都有自己的訪問權限,如果違反了權限規(guī)定,則要進行操作越權處理。n操作系統(tǒng)通常利用MMU來實現系統(tǒng)內核與應用程序的隔離,以及應用程序與應用程序之間的隔離。防止應用程序去破壞操作系統(tǒng)和其他應用程序的代碼和數據,防止應用程序對硬件的直接訪問。MMU通常只在一些對安全性和可靠性的要求比較高、系統(tǒng)比較復雜的嵌入式系統(tǒng)中存在。8.4.2存儲管理的實模式與保護模式n 實模式和保護模式是嵌入式操作系統(tǒng)中常見的兩個存儲管理方式。n 1實模式存儲管理實模式存
65、儲管理 n在實模式存儲管理方式中,系統(tǒng)不使用MMU;不劃分“系統(tǒng)空間”和“用戶空間”,整個系統(tǒng)只有一個地址空間,即物理內存地址空間;應用程序和系統(tǒng)程序都能直接對所有的內存單元進行隨意訪問,無須進行地址映射;操作系統(tǒng)的內核與外圍應用程序在編譯連接后,兩者通常被集成在同一個系統(tǒng)文件中;系統(tǒng)中的“任務”或“進程”均是內核線程,只有運行上下文和棧是獨享的,其他資源都是共享的。n在實模式存儲管理方式中,系統(tǒng)的內存地址空間一般可以分為text、data、bss、堆、棧五個部分。其中:.text:(代碼段)用來存放操作系統(tǒng)和應用程序的所有代碼。.data:(數據段)用來存放操作系統(tǒng)和應用程序當中所有帶有初始
66、值的全局變量。.bss:用來存放操作系統(tǒng)和應用程序當中所有未帶初始值的全局變量。堆為動態(tài)分配的內存空間,在系統(tǒng)運行時,可以通過類似于malloc/free之類的函數來申請或釋放一段連續(xù)的內存空間。棧用來保存運行上下文以及函數調用時的局部變量和運行參數。n對于實時系統(tǒng)來說,實模式方案簡單、存儲管理的開銷確定,比較適合于規(guī)模較小、簡單和實時性要求較高的系統(tǒng)。其缺點是沒有存儲保護、安全性差,在應用程序中出現的任何一個小錯誤或蓄意攻擊都有可能導致整個系統(tǒng)的崩潰。n 2保護模式存儲管理n在保護模式存儲管理方式中,微處理器必須具有MMU硬件并啟用它。n在保護模式存儲管理方式中,系統(tǒng)內核和用戶程序有各自獨立的地址空間,操作系統(tǒng)和MMU共同完成邏輯地址到物理地址的映射;每個應用程序只能訪問自己的地址空間,對于共享的內存區(qū)域,也必須按照規(guī)定的權限規(guī)則來訪問,具有存儲保護功能。n保護模式存儲管理方式的安全性和可靠性較好,適合于規(guī)模較大、較復雜和實時性要求不太高的系統(tǒng)。8.4.3分區(qū)存儲管理n分區(qū)存儲管理適合在多道程序操作系統(tǒng)中應用。分區(qū)存儲管理把整個內存劃分為系統(tǒng)區(qū)和用戶區(qū)兩大區(qū)域,然后再把用戶區(qū)劃分為若
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。