《嵌入式系統(tǒng)》課件
《《嵌入式系統(tǒng)》課件》由會員分享,可在線閱讀,更多相關(guān)《《嵌入式系統(tǒng)》課件(82頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第5章 嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ) 5.1 嵌入式軟件基礎(chǔ)n 5.1.1 嵌入式軟件的特點n應(yīng)用在嵌入式計算機系統(tǒng)當(dāng)中的各種軟件統(tǒng)稱為嵌入式軟件,作為嵌入式系統(tǒng)的一個組成部分,目前嵌入式軟件的種類和規(guī)模都得到了極大的發(fā)展,形成了一個完整、獨立的體系。除了具有通用軟件的一般特性,同時還具有一些與嵌入式系統(tǒng)密切相關(guān)的特點,如:n(l)規(guī)模較小n在一般情況下,嵌入式系統(tǒng)的資源多是比較有限的,要求嵌入式軟件必須盡可能地精簡,多數(shù)的嵌入式軟件都在幾MB以內(nèi)。 n(2)開發(fā)難度大n嵌入式系統(tǒng)由于硬件資源的有限,使得嵌入式軟件在時間和空間上都受到嚴(yán)格的限制,需要開發(fā)人員對編程語言、編譯器和操作系統(tǒng)有深刻的
2、了解,才有可能開發(fā)出運行速度快、存儲空間少、維護成本低的軟件。嵌入式軟件一般都要涉及到底層軟件的開發(fā),應(yīng)用軟件的開發(fā)也是直接基于操作系統(tǒng)的,這就要求開發(fā)人員具有扎實的軟、硬件基礎(chǔ),能靈活運用不同的開發(fā)手段和工具,具有較豐富的開發(fā)經(jīng)驗。嵌入式軟件的運行環(huán)境和開發(fā)環(huán)境比PC機復(fù)雜,嵌入式軟件是在目標(biāo)系統(tǒng)上運行的,而嵌入式軟件的開發(fā)工作則是在另外的開發(fā)系統(tǒng)中進行,當(dāng)應(yīng)用軟件調(diào)試無誤后,再把它放到目標(biāo)系統(tǒng)上去。 n(3)高實時性和可靠性要求n具有實時處理的能力是許多嵌入式系統(tǒng)的基本要求,實時性要求軟件對外部事件做出反應(yīng)的時間必須要快,在某些情況下還要求是確定的、可重復(fù)實現(xiàn)的,不管系統(tǒng)當(dāng)時的內(nèi)部狀態(tài)如何
3、,都是可以預(yù)測的。同時,對于事件的處理一定要在限定的時間期限之前完成,否則就有可能引起系統(tǒng)的崩潰。 n在航天控制、核電站、工業(yè)機器人等實時系統(tǒng)對嵌入式軟件的可靠性要求是非常高的,一旦軟件出了問題,其后果是非常嚴(yán)重的。 n(4)軟件固化存儲n為了提高系統(tǒng)的啟動速度、執(zhí)行速度和可靠性,嵌入式系統(tǒng)中的軟件一般都固化在存儲器芯片或微處理器中。 5.1.2嵌入式軟件的分類n 1系統(tǒng)軟件n系統(tǒng)軟件控制和管理嵌入式系統(tǒng)資源,為嵌入式應(yīng)用提供支持的各種軟件,如設(shè)備驅(qū)動程序、嵌入式操作系統(tǒng)、嵌入式中間件等。n 2應(yīng)用軟件n應(yīng)用軟件是嵌入式系統(tǒng)中的上層軟件,它定義了嵌入式設(shè)備的主要功能和用途,并負(fù)責(zé)與用戶進行交互
4、。應(yīng)用軟件是嵌入式系統(tǒng)功能的體現(xiàn),如飛行控制軟件、手機軟件、MP3播放軟件、電子地圖軟件等,一般面向于特定的應(yīng)用領(lǐng)域,。n 3支撐軟件 n支撐軟件指輔助軟件開發(fā)的工具軟件,如系統(tǒng)分析設(shè)計工具、在線仿真工具、交叉編譯器、源程序模擬器和配置管理工具等。n在嵌入式系統(tǒng)當(dāng)中,系統(tǒng)軟件和應(yīng)用軟件運行在目標(biāo)平臺的(即嵌入式設(shè)備上),而對于各種軟件開發(fā)工具來說,它們大部分都運行在開發(fā)平臺(PC機)上,運行Windows或Linux操作系統(tǒng)。 5.1.3 嵌入式軟件的體系結(jié)構(gòu)n 1無操作系統(tǒng)的嵌入式軟件n早期在嵌入式系統(tǒng)的應(yīng)用范圍主要集中在控制領(lǐng)域,硬件的配置比較低,嵌入式軟件的設(shè)計主要是以應(yīng)用為核心,應(yīng)用軟
5、件直接建立在硬件上,沒有專門的操作系統(tǒng),軟件的規(guī)模也很小。n無操作系統(tǒng)的嵌入式軟件主要采用循環(huán)輪轉(zhuǎn)和中斷(前后臺)兩種實現(xiàn)方式。n(1)循環(huán)輪轉(zhuǎn)方式 n循環(huán)輪轉(zhuǎn)方式的基本設(shè)計思想是:把系統(tǒng)的功能分解為若干個不同的任務(wù),放置在一個永不結(jié)束的循環(huán)語句當(dāng)中,按照時間順序逐一執(zhí)行。當(dāng)程序執(zhí)行完一輪后,又回到程序的開頭重新執(zhí)行,循環(huán)不斷。 n循環(huán)輪轉(zhuǎn)方式的程序簡單、直觀、開銷小、可預(yù)測。軟件的開發(fā)可以按照自頂向下、逐步求精的方式,將系統(tǒng)要完成的功能逐級劃分成若干個小的功能模塊進行編程,最后組合在一起。循環(huán)輪轉(zhuǎn)方式的軟件系統(tǒng)只有一條執(zhí)行流程和一個地址空間,不需要任務(wù)之間的調(diào)度和切換,其程序的代碼都是固定的
6、,函數(shù)之間的調(diào)用關(guān)系也是明確的,整個系統(tǒng)的執(zhí)行過程是可預(yù)測的。n循環(huán)輪轉(zhuǎn)方式的缺點是程序必須按順序執(zhí)行,無法處理異步事件,缺乏并行處理的能力。缺乏硬件上的時間控制機制,無法實現(xiàn)定時功能。 n(2)中斷方式n中斷方式又稱為前后臺系統(tǒng)形式,系統(tǒng)在循環(huán)輪轉(zhuǎn)方式的基礎(chǔ)上增加了中斷處理功能。ISR(Interrupt Service Routine,中斷服務(wù)程序)負(fù)責(zé)處理異步事件,即前臺程序(foreground),也稱為事件處理級程序。而后臺程序(background)是一個系統(tǒng)管理調(diào)度程序,一般采用的是一個無限的循環(huán)形式,負(fù)責(zé)掌管整個嵌入式系統(tǒng)軟、硬件資源的分配、管理以及任務(wù)的調(diào)度。后臺程序也稱為任
7、務(wù)級程序。一般情形下,后臺程序會檢查每個任務(wù)是否具備運行條件,通過一定的調(diào)度算法來完成相應(yīng)的操作。而一些對實時性有要求的操作通常由中斷服務(wù)程序來完成,大多數(shù)的中斷服務(wù)程序只做一些最基本的操作,如標(biāo)記中斷事件的發(fā)生等,其余的事情會延遲到后臺程序去完成。 n 2有操作系統(tǒng)的嵌入式軟件n從20世紀(jì)80年代開始,操作系統(tǒng)出現(xiàn)在嵌入式系統(tǒng)上。如今,嵌入式操作系統(tǒng)在嵌入式系統(tǒng)中廣泛應(yīng)用,尤其是在功能復(fù)雜、系統(tǒng)龐大的應(yīng)用中顯得愈來愈重要。在應(yīng)用軟件開發(fā)時,程序員不是直接面對嵌入式硬件設(shè)備,而是采用一些嵌入式軟件開發(fā)環(huán)境,在操作系統(tǒng)的基礎(chǔ)上編寫程序。n在控制系統(tǒng)中,采用前后臺系統(tǒng)體系結(jié)構(gòu)的軟件,在遇到強干擾時
8、,可能會使應(yīng)用程序產(chǎn)生異常、出錯,甚至死循環(huán)的現(xiàn)象,從而造成系統(tǒng)的崩潰。而采用嵌入式操作系統(tǒng)管理的系統(tǒng),在遇到強干擾時,可能只會引起系統(tǒng)中的某一個進程被破壞,但這可以通過系統(tǒng)的監(jiān)控進程對其進行修復(fù),系統(tǒng)具有自愈能力,不會造成系統(tǒng)崩潰。 n在嵌入式操作系統(tǒng)環(huán)境下,開發(fā)一個復(fù)雜的應(yīng)用程序,通??梢园凑哲浖こ痰乃枷?,將整個程序分解為多個任務(wù)模塊,每個任務(wù)模塊的調(diào)試、修改幾乎不影響其他模塊。利用商業(yè)軟件提供的多任務(wù)調(diào)試環(huán)境,可大大提高系統(tǒng)軟件的開發(fā)效率,降低開發(fā)成本,縮短開發(fā)周期。n嵌入式操作系統(tǒng)本身是可以剪裁的,嵌入式系統(tǒng)外設(shè)、相關(guān)應(yīng)用也可以配置,所開發(fā)的應(yīng)用軟件可以在不同的應(yīng)用環(huán)境、不同的處理器
9、芯片之間移植,軟件構(gòu)件可復(fù)用,有利于系統(tǒng)的擴展和移植。 嵌入式軟件體系結(jié)構(gòu) 5.1.4 嵌入式系統(tǒng)的設(shè)備驅(qū)動n嵌入式系統(tǒng)的設(shè)備驅(qū)動層用來完成嵌入式系統(tǒng)硬件設(shè)備所需要的一些軟件初始化和管理。設(shè)備驅(qū)動層直接對硬件進行管理和控制,并為上層軟件提供所需的驅(qū)動支持。n 1板級支持包n設(shè)備驅(qū)動層也稱為BSP(Board Support Package, 板級支持包),在BSP中把所有與硬件相關(guān)的代碼都封裝起來,為操作系統(tǒng)提供一個虛擬的硬件平臺,操作系統(tǒng)運行在這個虛擬的硬件平臺上。在BSP當(dāng)中,使用一組定義好的編程接口來與BSP進行交互,并通過BSP來訪問真正的硬件。在嵌入式系統(tǒng)中,BSP類似于PC系統(tǒng)中的
10、BIOS和驅(qū)動程序。BSP把嵌入式操作系統(tǒng)與具體的硬件平臺隔離開來。 n一般來說,BSP是針對某個特定的單板而設(shè)計的,系統(tǒng)都會提供相應(yīng)的演示版本的BSP(最小系統(tǒng)BSP)。BSP對于用戶(指系統(tǒng)開發(fā)人員)是開放的,用戶可以根據(jù)不同的硬件需求對其進行改動或二次開發(fā)。在實際開發(fā)一個嵌入式系統(tǒng)的時候,通??梢哉业揭粋€與自己的硬件系統(tǒng)相近的演示版本的BSP,并以此為基礎(chǔ),進行修改和完善,以適應(yīng)不同單板的需求。BSP主要包括BootLoader(引導(dǎo)加載程序)和設(shè)備驅(qū)動程序兩個方面的內(nèi)容。 n對于不同的嵌入式操作系統(tǒng),BSP的具體結(jié)構(gòu)和組成是不相同的。 n 2BootLoadern BootLoader
11、(引導(dǎo)加載程序)是在操作系統(tǒng)內(nèi)核運行之前運行的一小段程序。通過這段程序,初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境設(shè)置到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核做好準(zhǔn)備。BootLoader用來完成整個系統(tǒng)的加載啟動任務(wù)。通常在系統(tǒng)上電或復(fù)位時,BootLoader程序從地址0 x00000000處開始執(zhí)行。n BootLoader的功能與嵌入式系統(tǒng)的硬件平臺直接相關(guān),不同的CPU體系結(jié)構(gòu)和板級設(shè)備配置,BootLoader的功能不同。一般來說,BootLoader主要包含片級初始化、板級初始化和加載內(nèi)核等一些基本功能。 n(1)片級初始化n片級初始化是一個純硬件的初始化過
12、程,把微處理器從上電時的默認(rèn)狀態(tài)逐步設(shè)置成系統(tǒng)所要求的工作狀態(tài)。片級初始化主要完成設(shè)置微處理器的核心寄存器和控制寄存器、微處理器的核心工作模式及其局部總線模式等初始化。n(2)板級初始化n板級初始化是一個同時包含有軟件和硬件在內(nèi)的初始化過程,通過正確地設(shè)置各種寄存器的內(nèi)容來完成微處理器以外的其他硬件設(shè)備的初始化。例如,初始化LED顯示設(shè)備、定時器、串口通信和內(nèi)存控制器,建立內(nèi)存空間的地址映射,設(shè)置中斷控制寄存器和某些軟件的數(shù)據(jù)結(jié)構(gòu)和參數(shù)等。 n(3)加載內(nèi)核n將操作系統(tǒng)和應(yīng)用程序的映像從Flash存儲器復(fù)制到系統(tǒng)的內(nèi)存當(dāng)中,然后跳轉(zhuǎn)到系統(tǒng)內(nèi)核的第一條指令處繼續(xù)執(zhí)行。 1. Bootloader
13、 概述 n Bootloader,啟動引導(dǎo)程序,又叫引導(dǎo)加載程序,功能強大的Bootloader也就直接叫做板級支持包(BSP,Board Support Packet)或者固件(Firmware)。近年來,為了方便嵌入式產(chǎn)品的推廣,也有些直接將Bootloader叫做BIOS。BIOS是PC機的“基本輸入輸出系統(tǒng)”,燒錄在電腦主板上一塊專門的芯片中。一般BIOS由主板廠商或者專門的BIOS生產(chǎn)商提供,不是開源的,用戶不能修改其中的代碼進行定制。而嵌入式系統(tǒng)的開發(fā)則離不開Bootloader的開發(fā),它也是整個系統(tǒng)開發(fā)中的難點之一。 1.1 Bootloader 的作用 n Bootloader
14、是在嵌入式操作系統(tǒng)內(nèi)核運行之前運行的一段小程序,也是系統(tǒng)開機后執(zhí)行的第一段程序。通過這段小程序,可以初始化硬件設(shè)備、建立內(nèi)存空間,從而將系統(tǒng)的軟硬件環(huán)境設(shè)置成一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。Bootloader是依賴于底層硬件而實現(xiàn)的,因此建立一個通用的嵌入式系統(tǒng)Bootloader幾乎是不可能的。n在PC機中,主板的BIOS和位于硬盤0磁道上的主引導(dǎo)記錄(Master Boot Record, MBR)中的引導(dǎo)程序(如LILO或GRUB等),兩者一起的作用就相當(dāng)于Bootloader在嵌入式系統(tǒng)中的作用,即實現(xiàn)整個系統(tǒng)的啟動引導(dǎo),并最終能引導(dǎo)操作系統(tǒng)的運行。 1.
15、1 Bootloader 的作用n在嵌入式系統(tǒng)中,Bootloader對嵌入式設(shè)備中的主要部件如CPU、SDRAM、FLASH、串口等進行了初始化,這樣可以使用Bootloader通過串口下載各種文件到設(shè)備的SDRAM中或者燒錄Flash,然后將操作系統(tǒng)內(nèi)核讀入到內(nèi)存中來或者直接跳轉(zhuǎn)到內(nèi)核的入口點,從而實現(xiàn)操作系統(tǒng)的引導(dǎo)。現(xiàn)在有些Bootloader也把對以太網(wǎng)的支持等功能也加進去了,這樣一個功能比較強大的Bootloader實際上就已經(jīng)相當(dāng)于一個微型的操作系統(tǒng)了。 10.1.1 Bootloader 的作用n Bootloader從第一條指令跳轉(zhuǎn)后,就開始初始化各種最重要的硬件,比如CPU的
16、工作頻率、定時器、中斷、看門狗、檢測RAM大小和Flash等。一般,硬件初始化的這段程序是用匯編語言編寫的,其后就用C語言編寫??傮w上Bootloader主要完成以下工作: 1.1 Bootloader 的作用n初始化CPU速度;n初始化內(nèi)存,包括啟用內(nèi)存庫,初始化內(nèi)存配置寄存器等;n初始化中斷控制器,在系統(tǒng)啟動時,關(guān)閉中斷,關(guān)閉看門狗;n初始化串行端口(如果在目標(biāo)上有的話);n啟用指令/數(shù)據(jù)高速緩存;n設(shè)置堆棧指針;n設(shè)置參數(shù)區(qū)域并構(gòu)造參數(shù)結(jié)構(gòu)和標(biāo)記,即引導(dǎo)參數(shù); n執(zhí)行POST(上電自檢)來標(biāo)識存在的設(shè)備并報告有何問題;n為電源管理提供掛起/恢復(fù)支持;n傳輸操作系統(tǒng)內(nèi)核鏡像文件到目標(biāo)機。也
17、可以將操作系統(tǒng)內(nèi)核鏡像文件事先存放在Flash中,這樣就不需要Bootloader和主機傳輸操作系統(tǒng)內(nèi)核鏡像文件,這通常是在做成產(chǎn)品的情況下使用。而一般在開發(fā)過程中,為了調(diào)試內(nèi)核的方便,不將操作系統(tǒng)內(nèi)核鏡像文件固化在Flash中,這就需要主機和目標(biāo)機進行文件傳輸;n跳轉(zhuǎn)到內(nèi)核的開始,在此又分為ROM啟動和RAM啟動。所謂ROM啟動就是直接在Flash中執(zhí)行操作系統(tǒng)鏡像文件;所謂RAM啟動就是指把內(nèi)核鏡像從Flash復(fù)制到RAM中,然后再將PC指針跳轉(zhuǎn)到RAM中的操作系統(tǒng)啟動地址。 1.1 Bootloader 的作用n在嵌入式Linux軟件系統(tǒng)的開發(fā)中,一般將軟件分為啟動引導(dǎo)程序(Bootlo
18、ader)、操作系統(tǒng)內(nèi)核(OS Kernel)、根文件系統(tǒng)(File System)、圖形窗口系統(tǒng)(GUI)和應(yīng)用程序(AP)等幾個部分,其中前三部分是一個可運行的嵌入式系統(tǒng)必不可少的, 它們在開發(fā)的過程中,被分別獨立地編譯鏈接或打包為一個二進制目標(biāo)文件,然后下載(燒錄)到嵌入式系統(tǒng)的ROM(一般是Flash)中。后兩部分如果有的話,n通常也是和根文件系統(tǒng)一 n起打包后燒錄到Flash中。n因此,在Bootloader階段,n也提供了對Flash設(shè)備的分n區(qū)格式化的支持,其空間n分配通常如圖所示。 1.2 Bootloader 的工作模式n對于嵌入式系統(tǒng)的開發(fā)人員而言,Bootloader通常
19、包含“啟動加載”和“下載”這兩種不同的工作模式。當(dāng)然,這兩種工作模式的區(qū)別一般僅僅對于開發(fā)人員才有意義,而對最終用戶來說,Bootloader 的作用就是用來加載操作系統(tǒng),從而啟動整個嵌入式系統(tǒng)。 1.2 Bootloader 的工作模式n啟動加載(Boot loading)模式 正常啟動模式 n下載(Downloading)模式提供給開發(fā)人員或者技術(shù)支持人員使用 1.3 Bootloader 的啟動流程 n分為stage1和stage2兩個階段 一般依賴于 CPU 體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,都放在stage1中,而且通常都用匯編語言來實現(xiàn),以達到短小精悍且啟動快的目的;而 sta
20、ge2 則通常用C語言來實現(xiàn),這樣可以實現(xiàn)各種復(fù)雜的功能(比如串口、以太網(wǎng)接口的支持等) Bootloader的第一階段 1. 硬件設(shè)備初始化2. 為加載 Bootloader 的 stage2 準(zhǔn)備 RAM 空間 3. 拷貝 Bootloader的 stage2 到 RAM 空間中4. 設(shè)置好堆棧 5.跳轉(zhuǎn)到 stage2 的 C 入口點main()函數(shù)處 Bootloader的第二階段 1.初始化本階段要使用到的硬件設(shè)備2.檢測系統(tǒng)內(nèi)存映射(memory map)3.將 kernel 映像和根文件系統(tǒng)映像從 flash 上讀到 RAM 空間中4.為內(nèi)核設(shè)置啟動參數(shù)5.調(diào)用內(nèi)核 n 3設(shè)備驅(qū)
21、動程序n在一個嵌入式系統(tǒng)中,可以沒有操作系統(tǒng),但設(shè)備驅(qū)動程序是必不可少的。設(shè)備驅(qū)動程序是一組庫函數(shù),用來對硬件進行初始化和管理,并向上層軟件提供訪問接口。n不同功能的硬件設(shè)備,它們的設(shè)備驅(qū)動程序是不同的。但大多數(shù)的設(shè)備驅(qū)動程序都具有硬件啟動(初始化)、硬件關(guān)閉(關(guān)機)、硬件停用(暫停)、硬件啟用(重新啟用)、讀操作(讀取數(shù)據(jù))、寫操作(寫入數(shù)據(jù))等基本功能。n設(shè)備驅(qū)動程序通常可以完成一些特定的功能,這些功能一般采用函數(shù)的形式來實現(xiàn),這些函數(shù)有分層結(jié)構(gòu)和混合結(jié)構(gòu)兩種組織結(jié)構(gòu)形式。 5.2嵌入式操作系統(tǒng)基礎(chǔ)n 5.2.1嵌入式操作系統(tǒng)的功能n在嵌入式系統(tǒng)中工作的操作系統(tǒng)稱為EOS(Embedded
22、 Operating System,嵌入式操作系統(tǒng)),EOS的基本功能主要體現(xiàn)在以下兩個方面:n 1構(gòu)成一個易于編程的虛擬機平臺n EOS構(gòu)成一個虛擬機平臺,EOS把底層的硬件細(xì)節(jié)封裝起來,為運行在它上面的軟件(如中間件軟件和各種應(yīng)用軟件)提供了一個抽象的編程接口。軟件開發(fā)在這個編程接口的上進行,而不直接與機器硬件層打交道。EOS所提供的編程接口實際上就是操作系統(tǒng)對外提供的系統(tǒng)調(diào)用函數(shù)。 n 2系統(tǒng)資源的管理者n EOS是一個系統(tǒng)資源的管理者,負(fù)責(zé)管理系統(tǒng)當(dāng)中的各種軟硬件資源,如處理器、內(nèi)存、各種I/O設(shè)備、文件和數(shù)據(jù)等,使得整個系統(tǒng)能夠高效、可靠地運轉(zhuǎn)。 n運行在嵌入式環(huán)境中的EOS其目標(biāo)是
23、為了完成某一項或有限項功能,而非通用型的操作系統(tǒng),因此在性能和實時性方面有嚴(yán)格的限制,能耗、成本和可靠性通常是影響設(shè)計的重要因素,要求占用資源少,適合在有限存儲空間運行,要求系統(tǒng)功能可以根據(jù)產(chǎn)品的設(shè)計要求進行剪裁、調(diào)整。n所有的EOS都有一個內(nèi)核(kernel),內(nèi)核是系統(tǒng)當(dāng)中的一個組件,它包含了任務(wù)管理、存儲管理、輸入輸出(I/O)設(shè)備管理和文件系統(tǒng)管理四個功能模塊。其中:n 任務(wù)管理:對嵌入式系統(tǒng)中的運行軟件進行描述和管理,并完成處理機資源的分配與調(diào)度;n 存儲管理:用來提高內(nèi)存的利用率,方便用戶的使用,并提供足夠的存儲空間; n I/O設(shè)備管理:方便設(shè)備的使用,提高CPU和輸入輸出設(shè)備的
24、利用率;n 文件管理:解決文件資源的存儲、共享、保密和保護等問題。n注意:不同的嵌入式系統(tǒng)的EOS所包含的組件可能各不相同,內(nèi)核設(shè)計也可能各不相同的,完全取決于系統(tǒng)的設(shè)計以及實際的應(yīng)用需求。 5.2.2嵌入式操作系統(tǒng)的分類n EOS可以按照系統(tǒng)的類型、響應(yīng)時間和軟件結(jié)構(gòu)等不同的標(biāo)準(zhǔn)來分類。n 1按系統(tǒng)的類型分類n按照系統(tǒng)的類型,可以把EOS分為商業(yè)化系統(tǒng)、專用系統(tǒng)和開放源代碼系統(tǒng)三大類。n(1)商業(yè)化系統(tǒng)n商業(yè)化的EOS有風(fēng)河公司(WindRiver)的VxWorks,微軟公司的Windows CE,Palm公司的PalmOS等等,其特點是功能強大,性能穩(wěn)定,輔助軟件工具齊全,應(yīng)用范圍廣泛,但
25、成本較高。 n(2)專用系統(tǒng)n專用系統(tǒng)是一些專業(yè)廠家為本公司產(chǎn)品特制的嵌入式操作系統(tǒng),一般不提供給應(yīng)用開發(fā)者使用。n(3)開放源代碼系統(tǒng)n開放源代碼的嵌入式操作系統(tǒng)有C/OS和各類嵌入式Linux系統(tǒng)等,具有免費、開源、性能優(yōu)良、資源豐富、技術(shù)支持強等優(yōu)點,是近年來發(fā)展迅速的一類操作系統(tǒng)。 n 2按響應(yīng)時間分類n按照系統(tǒng)對響應(yīng)時間的敏感程度,EOS可以分為RTOS(Real Time Operating Systems ,實時操作系統(tǒng))和非實時操作系統(tǒng)兩大類:。n RTOS對響應(yīng)時間有非常嚴(yán)格的要求,當(dāng)某一個外部事件或請求發(fā)生時,相應(yīng)的任務(wù)必須在規(guī)定的時間內(nèi)完成相應(yīng)的處理。RTOS可以分為硬實
26、時和軟實時兩種情形。n(1)硬實時系統(tǒng)n硬實時系統(tǒng)對響應(yīng)時間有嚴(yán)格的要求,如果響應(yīng)時間不能滿足可能會引起系統(tǒng)的崩潰或致命的錯誤。n(2)軟實時系統(tǒng) n軟實時系統(tǒng)對響應(yīng)時間有要求,如果響應(yīng)時間不能滿足,將需要支付能夠接受的額外代價。n非實時系統(tǒng)對響應(yīng)時間沒有嚴(yán)格的要求,各個進程分享處理器,以獲得各自所需要的運行時間。 n 3按軟件結(jié)構(gòu)分類n按照軟件的體系結(jié)構(gòu),EOS可以分為單體結(jié)構(gòu)、分層結(jié)構(gòu)和微內(nèi)核結(jié)構(gòu)三大類,n(1)單體結(jié)構(gòu)n單體結(jié)構(gòu)是一種常見的組織結(jié)構(gòu),嵌入式Linux操作系統(tǒng)、Jbed RTOS、C/OS-II和PDOS都屬于單體內(nèi)核系統(tǒng)。在單體結(jié)構(gòu)(monolithic)的操作系統(tǒng)中,中
27、間件和設(shè)備驅(qū)動程序通常就集成在系統(tǒng)內(nèi)核當(dāng)中,整個系統(tǒng)通常只有一個可執(zhí)行文件,里面包含了所有的功能組件。n單體結(jié)構(gòu)的操作系統(tǒng)由一組功能模塊組成,系統(tǒng)的各個模塊之間可以相互調(diào)用,通信開銷比較小,系統(tǒng)高度集成和相互關(guān)聯(lián),系統(tǒng)剪裁、修改、調(diào)試和維護不方便。 圖5.2.1 單體結(jié)構(gòu) 圖5.2.2 分層結(jié)構(gòu) n采用分層結(jié)構(gòu)(layered)的操作系統(tǒng)內(nèi)部分為若干個層次(0N),各個層次之間的調(diào)用關(guān)系是單向的,即某一層次上的代碼只能調(diào)用比它低層的代碼。分層結(jié)構(gòu)要求在每個層次上都要提供一組API接口函數(shù),增加了系統(tǒng)的額外開銷,但系統(tǒng)的開發(fā)和維護較為簡單。典型代表有MS-DOS,其結(jié)構(gòu)就是一個有代表性的、組織良
28、好的分層結(jié)構(gòu)。n(3)微內(nèi)核結(jié)構(gòu)n微內(nèi)核( microkernel )結(jié)構(gòu)把操作系統(tǒng)的大部分功能都剝離出去,在內(nèi)核中只保留最核心的功能單元(如進程管理和存儲管理),大部分的系統(tǒng)功能都位于內(nèi)核之外,例如,將所有的設(shè)備驅(qū)動程序都被置于內(nèi)核之外。 n在微內(nèi)核操作系統(tǒng)中,大部分的系統(tǒng)功能被放置在內(nèi)核之外,系統(tǒng)具有更高的安全性。新的功能組件也可以被動態(tài)地添加進來,擴展、調(diào)試、移植方便。在微內(nèi)核操作系統(tǒng)中,核內(nèi)組件與核外組件之間的通信方式是消息傳遞,而不是直接的函數(shù)調(diào)用,運行速度可能會慢一些。另外,由于它們的內(nèi)存地址空間是相互獨立的,在切換的時候,也會增加額外的開銷。 n OS-9、C Executive
29、、VxWorks,CMX-RTX、Nucleus Plus和QNX等EOS采用的都是微內(nèi)核結(jié)構(gòu)。微內(nèi)核結(jié)構(gòu) 5.2.3常見的嵌入式操作系統(tǒng)簡介n嵌入式操作系統(tǒng)是操作系統(tǒng)研究領(lǐng)域中的一個重要分支,有許多公司在從事相關(guān)方面的研究,開發(fā)了數(shù)以百計的各具特色的嵌入式操作系統(tǒng)產(chǎn)品,其中比較有影響的系統(tǒng)有VxWorks、嵌入式Linux、Windows CE、C/OS-II和PalmOS等。 5.3 嵌入式系統(tǒng)的任務(wù)管理n 5.3.1 單道程序設(shè)計和多道程序設(shè)計n嵌入式操作系統(tǒng)可以分為單道程序設(shè)計和多道程序設(shè)計(mufti-programming)兩種類型。n 1單道程序設(shè)計類型n采用單道程序設(shè)計的操作系
30、統(tǒng)在任何時候只能有一個程序在運行。n例如:有兩個程序甲和乙,它們在運行過程中都要用到CPU和I/O設(shè)備。如圖所示,圖中我們采用不同的方框來表示這兩個程序?qū)煞N資源的使用情況,方框的長度表示使用的時間。 n在單道程序設(shè)計的環(huán)境下,在任何時候,系統(tǒng)中只能有一個程序在運行,因此,甲和乙這兩個程序只能一個接一個的執(zhí)行。首先執(zhí)行程序甲,從t0時刻開始,到t6時刻結(jié)束。然后再執(zhí)行程序乙,從t6時刻開始,一直到它所有的工作都已完成。 n 2. 多道程序設(shè)計類型n采用多道程序設(shè)計的操作系統(tǒng)允許多個程序同時存在并運行,采用多道程序技術(shù)可以有效提高系統(tǒng)資源的利用率。n在多道程序設(shè)計的環(huán)境下,允許多個程序同時運行,
31、當(dāng)一個程序在訪問I/O設(shè)備時,會主動把CPU交出來,讓另一個程序去運行,從而提高系統(tǒng)資源的使用效率。從t0到t1,甲在使用I/O設(shè)備,乙處于等待狀態(tài)。在到達了t1時刻后,甲釋放剛剛占用的I/O設(shè)備,交給程序乙去使用。因此,在t1到t2期間,程序甲在使用CPU,程序乙在使用I/O設(shè)備。在到達t2時刻后,乙釋放剛剛占用的I/O設(shè)備,交給程序甲去使用。因此,在t2到t3期間,甲和乙兩個程序相互交換資源,繼續(xù)執(zhí)行。同樣的情形也發(fā)生在t3時刻和t4時刻。但是在t5時刻,甲已經(jīng)使用完了I/O設(shè)備,而乙仍然在使用CPU,所以甲只能處于等待狀態(tài),等到t6時刻再交換資源。這樣一直進行下去,在t7時刻,甲執(zhí)行完畢
32、,在t8時刻,乙也執(zhí)行完畢。 n從圖可見,由于CPU和I/O設(shè)備的使用是并行進行的,在總的執(zhí)行時間上要明顯少于單道程序系統(tǒng)。 單道程序與多道程序的運行過程 5.3.2進程、線程和任務(wù)n 1進程n進程(process)是在描述多道系統(tǒng)中并發(fā)活動過程引入的一個概念。進程和程序是兩個既有聯(lián)系又有區(qū)別的概念,兩者不能混為一談。例如:一個程序主要由代碼和數(shù)據(jù)兩部分內(nèi)容組成。而進程是正在執(zhí)行的程序,它是由程序和該程序的運行上下文兩部分內(nèi)容組成。程序是靜態(tài)的,而進程是一個動態(tài)的,變化的。進程和程序之間并不是一一對應(yīng)的。一個進程在運行的時候可以啟動一個或多個程序,同一個程序也可能由多個進程同時執(zhí)行。程序可以以
33、文件的形式存放在硬盤或光盤上,作為一種軟件資源長期保存。而進程則是一次執(zhí)行過程,它是暫時的,是動態(tài)地產(chǎn)生和終止的。 n一個進程通常包含有以下幾個方面的內(nèi)容:n 相應(yīng)的程序:進程是一個正在運行的程序,有相應(yīng)程序的代碼和數(shù)據(jù)。 n CPU上下文:程序在運行時,CPU中含有PC(Program Counter,程序計數(shù)器)、PSW(Program Status Word, 程序狀態(tài)字)、通用寄存器、段寄存器、棧指針寄存器等各種寄存器的當(dāng)前值內(nèi)容,例如:在PC中記錄的將要取出的指令的地址,在PSW中用于記錄處理器的運行狀態(tài)信息,通用寄存器存放的數(shù)據(jù)或地址;段寄存器存放的程序中各個段的地址;棧指針寄存器
34、記錄的棧頂?shù)漠?dāng)前位置。n 一組系統(tǒng)資源:包括操作系統(tǒng)用來管理進程的數(shù)據(jù)結(jié)構(gòu)、進程的內(nèi)存地址空間、進程正在使用的文件等。n 總而言之,進程包含了正在運行的一個程序的所有狀態(tài)信息。進程具有動態(tài)性,進程是一個正在運行的程序,程序的運行狀態(tài)都在不斷地變化,如PC寄存器的值、堆和棧的內(nèi)容、通用寄存器存放數(shù)據(jù)和地址等。進程具有獨立性,一個進程是一個獨立的實體,占有計算機的系統(tǒng)資源,每個進程都有自己的運行上下文和內(nèi)部狀態(tài),在它運行的時候獨立于其他的進程。進程具有并發(fā)性,在系統(tǒng)中同時有多個進程存在,它們相互獨立地運行。 n 2線程n線程(thread)是一個比進程更小的能獨立運行的基本單位。所謂的線程,就是進
35、程當(dāng)中的一條執(zhí)行流程。n從資源組合的角度來看,進程把一組相關(guān)的資源組合起來,構(gòu)成了一個資源平臺(資源環(huán)境),其中包括運行上下文、內(nèi)存地址空間、打開的文件等,在圖中用深色的方框來表示。從程序運行的角度來看,進程就是一個正在運行的程序,在圖中用一條帶有箭頭的線段來表示。從圖可見,可以把進程看成是程序代碼在這個資源平臺上的一條執(zhí)行流程(線程),也就是可以認(rèn)為進程等于線程加上資源平臺。n如圖所示,在一個進程當(dāng)中,或者說在一個資源平臺上,可以同時存在多個線程??梢杂镁€程來作為CPU的基本調(diào)度單位,使得各個線程之間可以并發(fā)執(zhí)行。對于同一個進程當(dāng)中的各個線程來說,運行在相同的資源平臺上,可以共享該進程的大部
36、分資源(如內(nèi)存地址空間、代碼、數(shù)據(jù)、文件等),但也有一小部分資源是不能共享的,每個線程都必須擁有各自獨立的一份(如CPU運行上下文(如PC寄存器、PSW寄存器、通用寄存器和棧指針等)和棧)。 線程與進程的資源關(guān)系 n 3任務(wù)n在一些嵌入式系統(tǒng)中,把能夠獨立運行的實體稱為“任務(wù)”(task),并沒有使用“進程”或“線程”這兩個概念。任務(wù)到底是進程還是線程,在研究一個具體的嵌入式操作系統(tǒng)的時候,要注意加以區(qū)分。n在任務(wù)的創(chuàng)建過程需要定義的主要參數(shù)有任務(wù)的優(yōu)先級、??臻g的大小和函數(shù)名。任務(wù)具有獨立的優(yōu)先級和??臻g,CPU上下文一般也是存放在??臻g中。對于不同的任務(wù),它們也能夠訪問相同的全局變量,在這
37、些任務(wù)之間,可以很方便地、直接地去使用共享的內(nèi)存,而不需要經(jīng)過系統(tǒng)內(nèi)核來進行通信。 n通常認(rèn)為,在嵌入式操作系統(tǒng)中“任務(wù)”就是線程,如在VxWorks、C/OS-II、 Jbed、嵌入式Linux等嵌入式操作系統(tǒng)中。 5.3.3任務(wù)的實現(xiàn)n 1任務(wù)的層次結(jié)構(gòu)n任務(wù)的層次結(jié)構(gòu)如圖所示。在多道程序的嵌入式操作系統(tǒng)中,同時存在著多個任務(wù),嵌入式內(nèi)核啟動時,只有一個任務(wù)存在,然后由該任務(wù)派生出其他所有任務(wù),這些任務(wù)采用層狀結(jié)構(gòu),存在著父子關(guān)系。 n 2.任務(wù)的創(chuàng)建與終止n(1)任務(wù)的創(chuàng)建n在一個嵌入式操作系統(tǒng)中,在系統(tǒng)初始化、任務(wù)運行過程中、人機交互等過程中都可以創(chuàng)建任務(wù)。n在系統(tǒng)初始化時,一般都會創(chuàng)
38、建系統(tǒng)與用戶進行交互的一些前臺任務(wù),以及完成鍵盤掃描、系統(tǒng)狀態(tài)檢測、時間統(tǒng)計等一些特定功能的后臺任務(wù)。在任務(wù)運行過程中,也能夠使用相應(yīng)的系統(tǒng)調(diào)用來創(chuàng)建新的任務(wù),以幫助它完成自己的工作。在一些具有交互功能的嵌入式系統(tǒng)中,用戶可以通過輸入命令或單擊圖標(biāo)的方式,讓系統(tǒng)啟動一個新的任務(wù)。 n創(chuàng)建任務(wù)的基本方法是在一個已經(jīng)存在的任務(wù)當(dāng)中,通過調(diào)用相應(yīng)的系統(tǒng)函數(shù)來創(chuàng)建一個新的任務(wù)。 n(2)任務(wù)的終止n任務(wù)的終止可能有多種原因,正常退出、錯誤退出、被其他任務(wù)踢出等情況可以使任務(wù)終止。n當(dāng)一個任務(wù)完成了所有的工作,需要結(jié)束運行,提出退出要求,稱為正常退出。n當(dāng)一個任務(wù)在執(zhí)行過程中,出現(xiàn)了致命的錯誤(例如執(zhí)行
39、了非法指令、內(nèi)存訪問錯誤等),系統(tǒng)中止該任務(wù)的運行,強制性地讓該任務(wù)退出,稱為錯誤退出。n在一些操作系統(tǒng)中可以提供一些系統(tǒng)調(diào)用函數(shù),用來把一個任務(wù)從系統(tǒng)中清除出局,稱為被其他任務(wù)踢出。n在一些嵌入式系統(tǒng)中,某些任務(wù)被設(shè)計為“死循環(huán)”的模式,任務(wù)不會自行終止。 n 3任務(wù)的狀態(tài)n在多道程序系統(tǒng)中,任務(wù)是獨立運行的實體,需要競爭系統(tǒng)資源,而任務(wù)所擁有的資源是在不斷變化中的,使得任務(wù)的狀態(tài)也在不斷的變化。一般來說,任務(wù)具有運行(running)、就緒(ready)和阻塞(blocked)三種基本狀態(tài)。n任務(wù)在運行狀態(tài)時占有CPU并在CPU上運行,在任何一個時刻,處于運行狀態(tài)的任務(wù)個數(shù)必須小于或等于C
40、PU的數(shù)目。如果在一個系統(tǒng)中只有一個CPU的話,那么最多只能有一個任務(wù)處于運行狀態(tài)。n當(dāng)一個任務(wù)已具備運行條件,但由于CPU正在運行其他的任務(wù),暫時不能運行該任務(wù)時,稱為就緒狀態(tài)。不過,只要把CPU分給該任務(wù),它就能夠立刻執(zhí)行。 n任務(wù)因為正在等待某種事件的發(fā)生而暫時不能運行稱為阻塞狀態(tài),也叫等待狀態(tài)(waiting)。此時,即使CPU已經(jīng)空閑下來了,該任務(wù)也還是不能運行。n如圖所示,在一定條件下,任務(wù)會在不同的狀態(tài)之間來回轉(zhuǎn)換,存在運行阻塞、運行就緒、就緒運行、阻塞就緒四種轉(zhuǎn)換關(guān)系。 任務(wù)間的狀態(tài)轉(zhuǎn)換圖 n 4任務(wù)控制塊n TCB(Task Control Block,任務(wù)控制塊)是在操作系
41、統(tǒng)當(dāng)中用來描述和管理一個任務(wù)的數(shù)據(jù)結(jié)構(gòu)。通過對各個任務(wù)的TCB的操作來實現(xiàn)任務(wù)管理。利用TCB這個數(shù)據(jù)結(jié)構(gòu)可以描述任務(wù)的基本情況,以及它的運行變化過程??梢园裈CB看成是任務(wù)存在的唯一標(biāo)志。當(dāng)需要創(chuàng)建一個新任務(wù)的時候,就為它生成一個TCB,并初始化這個TCB的內(nèi)容;當(dāng)需要終止一個任務(wù)的時候,只要回收它的TCB即可。對任務(wù)的組織和管理可以通過對它們的TCB的組織和管理來實現(xiàn)。TCB主要包括任務(wù)的管理信息、CPU上下文信息、資源管理信息等內(nèi)容。 n(1)任務(wù)的管理信息n任務(wù)的管理信息包括任務(wù)的標(biāo)識ID、任務(wù)的狀態(tài)、任務(wù)的優(yōu)先級、任務(wù)的調(diào)度信息、任務(wù)的時間統(tǒng)計信息、各種隊列指針等。 n(2)CPU上
42、下文信息n CPU上下文信息包括通用寄存器、PC寄存器、程序狀態(tài)字、棧指針等各種CPU寄存器的當(dāng)前值。在實際的嵌入式系統(tǒng)中,CPU上下文信息不一定直接存放在TCB當(dāng)中,而是存放在任務(wù)的棧當(dāng)中,可以通過相應(yīng)的棧指針來訪問。n(3)資源管理信息n在操作系統(tǒng)中,任務(wù)表示的是進程,則還應(yīng)包含一些資源管理方面的信息,如段表地址、頁表地址等存儲管理方面的信息,根目錄、文件描述字等文件管理方面的信息。 n 5任務(wù)切換n任務(wù)切換(context switching)是指一個任務(wù)正在CPU上運行,由于某種原因,系統(tǒng)需要調(diào)度另一個任務(wù)去運行,那么這時就需要進行把當(dāng)前任務(wù)的運行上下文保存起來,并設(shè)置新任務(wù)的上下文,
43、這一過程稱為任務(wù)切換。n任務(wù)切換通常包含有以下幾個基本步驟:n(1)將處理器的運行上下文保存在當(dāng)前任務(wù)的TCB中;n(2)更新當(dāng)前任務(wù)的狀態(tài),從運行狀態(tài)變?yōu)榫途w狀態(tài)或阻塞狀態(tài)。 n(3)按照一定的策略,從所有處于就緒狀態(tài)的任務(wù)中選擇一個去運行。n(4)修改新任務(wù)的狀態(tài),從就緒狀態(tài)變成運行狀態(tài)。n(5)根據(jù)新任務(wù)的TCB的內(nèi)容,恢復(fù)它的運行上下文環(huán)境。 n 6任務(wù)隊列n在一個多任務(wù)的操作系統(tǒng)中,各個任務(wù)的狀態(tài)是經(jīng)常變化的,有時處于運行狀態(tài),有時處于就緒狀態(tài),有時又處于阻塞狀態(tài)。通常采用任務(wù)隊列的方式來組織它的所有任務(wù),以提高對這些任務(wù)的管理效率。n操作系統(tǒng)用一組隊列來表示系統(tǒng)當(dāng)中所有任務(wù)的當(dāng)前狀
44、態(tài)。例如,處于運行狀態(tài)的所有任務(wù)構(gòu)成了運行隊列,處于就緒狀態(tài)的所有任務(wù)構(gòu)成了就緒隊列,而對于處于阻塞狀態(tài)的任務(wù),則要根據(jù)它們阻塞的原因,分別構(gòu)成相應(yīng)的阻塞隊列。不同的狀態(tài)用不同的隊列來表示。然后,對于系統(tǒng)當(dāng)中的每一個任務(wù),根據(jù)它的狀態(tài)把它的TCB加入到相應(yīng)的隊列當(dāng)中去。如果一個任務(wù)的狀態(tài)發(fā)生變化,就要把它的TCB從一個狀態(tài)隊列中脫離出來,加入到另一個隊列當(dāng)中去。 5.3.4 任務(wù)的調(diào)度n 1任務(wù)調(diào)度概述n在多道程序操作系統(tǒng)中,當(dāng)有兩個或多個任務(wù)同時處于就緒狀態(tài)時,而系統(tǒng)中只有一個CPU而且這個CPU己經(jīng)空閑下來了,就會出現(xiàn)多個任務(wù)同時去競爭這個CPU的情況。通常利用調(diào)度器(scheduler)
45、選擇就緒隊列中的那些任務(wù)中的一個去運行,調(diào)度器是CPU這個資源的管理者。調(diào)度器在決策過程中所采用的算法稱為調(diào)度算法。 n一般來說,在一個新的任務(wù)被創(chuàng)建時、在一個任務(wù)運行結(jié)束時、在一個任務(wù)由于I/O操作、信號量或其他原因被阻塞時、在一個I/O中斷發(fā)生時、在一個時鐘中斷發(fā)生時這五種調(diào)度時機都可能會發(fā)生任務(wù)的調(diào)度。 n任務(wù)調(diào)度存在可搶占調(diào)度(preemptive)和不可搶占調(diào)度(nonpreemptive)兩種調(diào)度方式。n(1)在可搶占調(diào)度方式,當(dāng)一個任務(wù)正在運行的時候,出現(xiàn)調(diào)度時機當(dāng)中的五種情況之一,都有可能會發(fā)生調(diào)度。調(diào)度程序可以去打斷它,并安排另外的任務(wù)去運行。實時操作系統(tǒng)大都采用可搶占的調(diào)度
46、方式。n(2)在不可搶占調(diào)度方式,一個任務(wù)長時間地占用著CPU系統(tǒng)也不會強制它中止。當(dāng)出現(xiàn)新任務(wù)創(chuàng)建、任務(wù)運行結(jié)束及任務(wù)被阻塞的調(diào)度時機時,有可能會發(fā)生調(diào)度。而對于發(fā)生的各種中斷,并不會去調(diào)用調(diào)度程序,而是在中斷處理完成后,又會回到剛才被打斷的任務(wù)中繼續(xù)執(zhí)行。 n在嵌入式操作系統(tǒng)中,存在著許多的調(diào)度算法,每一種算法都有各自的優(yōu)點和缺點。可以根據(jù)響應(yīng)時間、周轉(zhuǎn)時間、調(diào)度開銷、公平性、均衡性、吞吐量等指標(biāo)來評價一個調(diào)度算法的好壞。其中:n 調(diào)度器為一個就緒任務(wù)進行上下文切換時所需的時間,以及任務(wù)在就緒隊列中的等待時間稱為響應(yīng)時間( response time )。n 一個任務(wù)從提交到完成所經(jīng)歷的時
47、間稱為周轉(zhuǎn)時間(turnaround time )。n 調(diào)度器在做出調(diào)度決策時所需要的時間和空間開銷稱為調(diào)度開銷(overhead)。 n 公平性(fairness )是指大致相當(dāng)?shù)膬蓚€任務(wù)所得到的CPU時間也應(yīng)該是大致相同的。另外,要防止饑餓(starvation)情況出現(xiàn),即某一個任務(wù)始終得不到處理器去運行。n 均衡性(balance)是指要盡可能使整個系統(tǒng)的各個部分(CPU,I/O)都忙起來,提高系統(tǒng)資源的使用效率。n 單位時間內(nèi)完成的任務(wù)數(shù)量稱為吞吐量(throughput )。n對于一個調(diào)度算法來說,這些指標(biāo)中一些是共存的,而另一些是相互牽制的,這些指標(biāo)不可能全部都實現(xiàn),而是需要根據(jù)
48、系統(tǒng)的要求,綜合權(quán)衡和折中選擇。 n 2先來先服務(wù)算法(First Come First Served,F(xiàn)CFS)n FCFS(First Come First Served,先來先服務(wù)算法)是一種最簡單的調(diào)度算法。 FCFS的基本思想就是按照任務(wù)到達的先后次序來進行調(diào)度,它是一種不可搶占的調(diào)度方式。FCFS也叫做FIFO(First In First Out,先進先出算法)。n FCFS的最大優(yōu)點就是簡單,易于理解也易于實現(xiàn)。缺點是一批任務(wù)的平均周轉(zhuǎn)時間取決于各個任務(wù)到達的順序,如果短任務(wù)位于長任務(wù)之后,那么將增大平均周轉(zhuǎn)時間。 n 3短作業(yè)優(yōu)先算法(Shortest Job First,S
49、JF)n在SJF(Shortest Job First,短作業(yè)優(yōu)先算法)中,在各個任務(wù)在開始執(zhí)行前,事先預(yù)計好各任務(wù)的執(zhí)行時間,調(diào)度算法根據(jù)這些預(yù)計時間,安排執(zhí)行時間較短的任務(wù)優(yōu)先執(zhí)行??梢宰C明,對于一批同時到達的任務(wù),采用SJF算法將得到一個最小的平均周轉(zhuǎn)時間。n SJF算法有不可搶占方式和可搶占方式兩種實現(xiàn)方案。在不可搶占方式,只有任務(wù)運行完畢或者是被阻塞時,才會讓出CPU進行新的調(diào)度。而在可搶占方式,當(dāng)前任務(wù)正在運行的時候,來了一個比它執(zhí)行時間更短的任務(wù),而且它的運行時間要小于當(dāng)前正在運行的任務(wù)的剩余時間,那么這個新任務(wù)就會搶占CPU去運行。這種方法也稱為SRTF(Shortest Re
50、maining Time First,最短剩余時間優(yōu)先算法) n 4時間片輪轉(zhuǎn)算法(Round Robin,RR)n RR算法如圖所示。在RR(Round Robin,時間片輪轉(zhuǎn)算法)中,把系統(tǒng)當(dāng)中的所有就緒任務(wù)按照先來先服務(wù)的原則進行排列,然后,在每次調(diào)度的時候,處理器分派給隊列當(dāng)中的第一個任務(wù)一小段CPU執(zhí)行時間(time slice,時間片)。當(dāng)這個時間片結(jié)束的時候,如果任務(wù)還沒有執(zhí)行完的話,將會發(fā)生時鐘中斷,調(diào)度器將會暫停當(dāng)前任務(wù)的執(zhí)行,并把這個任務(wù)送到就緒隊列的末尾,然后再執(zhí)行當(dāng)前的隊列的第一個任務(wù)。如果一個任務(wù)在分配給它的時間片結(jié)束前就已經(jīng)運行結(jié)束了或者是被阻塞了,那么它就會立即讓
51、出CPU給其他的任務(wù)。 n 5優(yōu)先級算法(priority)n在優(yōu)先級調(diào)度算法(priority)中,給每一個任務(wù)都設(shè)置一個優(yōu)先級,然后在任務(wù)調(diào)度的時候,在所有處于就緒狀態(tài)的任務(wù)中選擇優(yōu)先級最高的那個任務(wù)去運行。n優(yōu)先級算法可以分為可搶占和不可搶占兩種方式。在可搶占方式中,當(dāng)一個任務(wù)正在運行的時候,如果這時來了一個新的任務(wù),其優(yōu)先級更高,則立即搶占CPU去運行這個新任務(wù)。而不可搶占方式則是需要等當(dāng)前任務(wù)運行完后再決定。 n可以采用靜態(tài)方式和動態(tài)方式確定任務(wù)的優(yōu)先級。 5.4 嵌入式系統(tǒng)的存儲管理n 5.4.1嵌入式存儲管理方式的特點n 嵌入式系統(tǒng)的存儲管理方式與系統(tǒng)的實際應(yīng)用領(lǐng)域及硬件環(huán)境密切
52、相關(guān),不同的嵌入式系統(tǒng)采用不同的存儲管理方式,需要考慮硬件條件、實時性要求、系統(tǒng)規(guī)模、可靠性要求等因素。系統(tǒng)的實時性要求直接影響到存儲管理的實現(xiàn)方式,即必須在某個限定的時刻之前完成。在實時系統(tǒng)中,存儲管理方法就比較簡單,甚至不提供存儲管理功能。而對一些實時性要求不高,可靠性要求比較高、比較復(fù)雜的應(yīng)用系統(tǒng),需要實現(xiàn)對操作系統(tǒng)或任務(wù)的保護,在存儲管理方式上就相對較為復(fù)雜。 n在嵌入式微處理器中,MMU(Memory Management Unit, 存儲管理單元)提供了一種內(nèi)存保護的硬件機制。內(nèi)存保護用來防止地址越界和防止操作越權(quán)。采用內(nèi)存保護機制的每個應(yīng)用程序都有自己獨立的地址空間,當(dāng)一個應(yīng)用程
53、序要訪問某個內(nèi)存單元時,由硬件檢查該地址是否在限定的地址空間內(nèi),如果不是的話就要進行地址越界處理;二是防對于允許多個應(yīng)用程序共享的某塊存儲區(qū)域,每個應(yīng)用程序都有自己的訪問權(quán)限,如果違反了權(quán)限規(guī)定,則要進行操作越權(quán)處理。操作系統(tǒng)通常利用MMU來實現(xiàn)系統(tǒng)內(nèi)核與應(yīng)用程序的隔離,以及應(yīng)用程序與應(yīng)用程序之間的隔離 5.4.2存儲管理的實模式與保護模式n 實模式和保護模式是嵌入式操作系統(tǒng)中常見的兩個存儲管理方式。n 1實模式存儲管理 n在實模式存儲管理方式中,系統(tǒng)不使用MMU;不劃分“系統(tǒng)空間”和“用戶空間”,整個系統(tǒng)只有一個地址空間,即物理內(nèi)存地址空間;應(yīng)用程序和系統(tǒng)程序都能直接對所有的內(nèi)存單元進行隨意
54、訪問,無須進行地址映射;操作系統(tǒng)的內(nèi)核與外圍應(yīng)用程序在編譯連接后,兩者通常被集成在同一個系統(tǒng)文件中。n在實模式存儲管理方式中,系統(tǒng)的內(nèi)存地址空間一般可以分為text、data、bss、堆、棧五個部分。其中:.text:(代碼段)用來存放操作系統(tǒng)和應(yīng)用程序的所有代碼。.data:(數(shù)據(jù)段)用來存放操作系統(tǒng)和應(yīng)用程序當(dāng)中所有帶有初始值的全局變量。.bss:用來存放操作系統(tǒng)和應(yīng)用程序當(dāng)中所有未帶初始值的全局變量。堆為動態(tài)分配的內(nèi)存空間,在系統(tǒng)運行時,可以通過類似于malloc/free之類的函數(shù)來申請或釋放一段連續(xù)的內(nèi)存空間。棧用來保存運行上下文以及函數(shù)調(diào)用時的局部變量和運行參數(shù) 。 n對于實時系統(tǒng)
55、來說,實模式方案簡單、存儲管理的開銷確定,比較適合于規(guī)模較小、簡單和實時性要求較高的系統(tǒng)。其缺點是沒有存儲保護、安全性差,在應(yīng)用程序中出現(xiàn)的任何一個小錯誤或蓄意攻擊都有可能導(dǎo)致整個系統(tǒng)的崩潰。n 2保護模式存儲管理n在保護模式存儲管理方式中,微處理器必須具有MMU硬件并啟用它。在保護模式存儲管理方式中,系統(tǒng)內(nèi)核和用戶程序有各自獨立的地址空間,操作系統(tǒng)和MMU共同完成邏輯地址到物理地址的映射;每個應(yīng)用程序只能訪問自己的地址空間,對于共享的內(nèi)存區(qū)域,也必須按照規(guī)定的權(quán)限規(guī)則來訪問,具有存儲保護功能。 n保護模式存儲管理方式的安全性和可靠性較好,適合于規(guī)模較大、較復(fù)雜和實時性要求不太高的系統(tǒng)。 n分
56、區(qū)存儲管理n固定分區(qū)存儲管理n可變分區(qū)存儲管理n頁式存儲管理n虛擬頁式存儲管理 分區(qū)存儲管理n分區(qū)存儲管理適合在多道程序操作系統(tǒng)中應(yīng)用。分區(qū)存儲管理把整個內(nèi)存劃分為系統(tǒng)區(qū)和用戶區(qū)兩大區(qū)域,然后再把用戶區(qū)劃分為若干個分區(qū),可以同時有多個任務(wù)在系統(tǒng)中運行,每個任務(wù)都有各自的地址空間。n分區(qū)存儲管理又可以分為固定分區(qū)和可變分區(qū)兩類。n 1固定分區(qū)存儲管理n采用固定分區(qū)存儲管理方法時,各個用戶分區(qū)的個數(shù)、位置和大小一旦確定后,就固定不變,不能再修改了。為了滿足不同程序的存儲需要,各個分區(qū)的大小可以是相等的,也可以是不相等的。 n固定分區(qū)存儲管理方法的優(yōu)點是易于實現(xiàn),系統(tǒng)的開銷比較小,空閑空間的管理、內(nèi)
57、存的分配和回收算法都非常簡單。其缺點是內(nèi)存的利用率不高,在任務(wù)所占用的分區(qū)內(nèi)部未被利用的空間的碎片(內(nèi)碎片)會造成很大的浪費;分區(qū)的總數(shù)是固定的,限制了并行執(zhí)行的程序個數(shù),N個分區(qū)最多只能有N個任務(wù)在同時運行。 n 2.可變分區(qū)存儲管理n采用可變分區(qū)存儲管理方法時,各分區(qū)不是預(yù)先劃分好的固定區(qū)域,而是系統(tǒng)動態(tài)創(chuàng)建的。在系統(tǒng)生成后,操作系統(tǒng)會占用內(nèi)存的一部分空間,通常放在內(nèi)存地址的最低端,其余的空間則成為一個完整的大空閑區(qū)。在裝入一個程序時,系統(tǒng)將根據(jù)它的需求和內(nèi)存空間的使用情況,從這個空閑區(qū)當(dāng)中劃出一塊來,分配給它,當(dāng)程序運行結(jié)束后會釋放所占用的存儲區(qū)域。系統(tǒng)通過對內(nèi)存的分配和回收,將一個完整
58、的空閑區(qū)劃分成若干個占用區(qū)和空閑區(qū)。n與固定分區(qū)相比,可變分區(qū)存儲管理的分區(qū)的個數(shù)、位置和大小都是隨著任務(wù)的進出而動態(tài)變化的,非常靈活。每個分區(qū)都是按需分配的,分區(qū)的大小正好等于任務(wù)的大小。這樣就避免了在固定分區(qū)當(dāng)中由于分區(qū)的大小不當(dāng)所造成的內(nèi)碎片,從而提高了內(nèi)存的利用效率。但可變分區(qū)存儲管理也可能會存在外碎片。所謂的外碎片,就是在各個占用的分區(qū)之間,難以利用的一些空閑分區(qū)。外碎片通常是一些比較小的空閑分區(qū)。 n在具體實現(xiàn)可變分區(qū)存儲管理技術(shù)的時候,需要考慮內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)、內(nèi)存的分配算法以及內(nèi)存的回收算法三個方面的問題。 n在內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)上,系統(tǒng)會維護一個分區(qū)鏈表,來跟蹤記錄每一個內(nèi)
59、存分區(qū)的情況,包括該分區(qū)的狀態(tài)(已分配或空閑)、起始地址、長度等信息。n在內(nèi)存的分配算法上,當(dāng)一個新任務(wù)來到時,需要為它尋找一個空閑分區(qū),其大小必須大于或等于該任務(wù)的要求。若是大于要求,則將該分區(qū)分割成兩個小分區(qū),其中一個分區(qū)為要求的大小并標(biāo)記為“占用”,另一個分區(qū)為余下部分并標(biāo)記為“空閑”。選擇分區(qū)的先后次序一般是從內(nèi)存低端到高端。通常的分區(qū)分配算法有:最先匹配法(first-fit)、下次匹配法(next-fit)、最佳匹配法( best-fit)和最壞匹配法(worst-fit)。n在內(nèi)存的回收算法上,當(dāng)一個任務(wù)運行結(jié)束,并釋放它所占用的分區(qū)后,如果該分區(qū)的左右鄰居也是空閑分區(qū),則需要將
60、它們合并為一個大的空閑分區(qū)。與此相對應(yīng),在分區(qū)鏈表上,也要將相應(yīng)的鏈接節(jié)點進行合并,并對其內(nèi)容進行更新。 5.4.4地址映射n 1物理地址和邏輯地址n地址映射涉及到物理地址和邏輯地址兩個基本概念。n(1)物理地址(physical address)n物理地址也叫內(nèi)存地址、絕對地址或?qū)嵉刂?。將系統(tǒng)內(nèi)存分割成很多個大小相等的存儲單元,如字節(jié)或字,每個單元給它一個編號,這個編號就稱為物理地址。操作時只有通過物理地址,才能對內(nèi)存單元進行直接訪問。物理地址的集合就稱為物理地址空間,或者內(nèi)存地址空間。物理地址是一個一維的線性空間,例如,一個內(nèi)存的大小為256MB,那么它的內(nèi)存地址空間是從0 x0到0 x0
61、FFFFFFF。 n(2)邏輯地址(logical address)n邏輯地址也叫相對地址或虛地址。用戶的程序經(jīng)過匯編或編譯后形成目標(biāo)代碼,而這些目標(biāo)代碼通常采用的就是相對地址的形式,其首地址為0,其余指令中的地址都是相對于這個首地址來編址的。顯然,邏輯地址和物理地址是完全不同的,不能用邏輯地址來直接訪問內(nèi)存單元。n因此,為了保證CPU在執(zhí)行指令時可以正確地訪問存儲單元,系統(tǒng)在裝入一個用戶程序后,需要將用戶程序中的邏輯地址轉(zhuǎn)換為運行時由機器直接尋址的物理地址,這個過程就稱為地址映射。只有把程序當(dāng)中的邏輯地址轉(zhuǎn)換為物理地址,才能正常運行。 n 2. 地址映射方式n地址映射是由存儲管理單元MMU來
62、完成的。當(dāng)一條指令在CPU當(dāng)中執(zhí)行時,在需要訪問內(nèi)存時,CPU就發(fā)送一個邏輯地址給MMU,MMU負(fù)責(zé)把這個邏輯地址轉(zhuǎn)換為相應(yīng)的物理地址,并根據(jù)這個物理地址去訪問內(nèi)存。地址映射主要有靜態(tài)地址映射和動態(tài)地址映射兩種方式。n (1)靜態(tài)地址映射n用戶程序在裝入之前,代碼內(nèi)部使用的是邏輯地址。采用靜態(tài)地址映射方式時,當(dāng)用戶程序被裝入內(nèi)存時,直接對指令代碼進行修改,一次性地實現(xiàn)邏輯地址到物理地址的轉(zhuǎn)換。在具體實現(xiàn)時,在每一個可執(zhí)行文件中,要列出各個需要重定位的地址單元的位置,然后由一個加載程序來完成裝入及地址轉(zhuǎn)換的過程,將所有的邏輯地址都轉(zhuǎn)換成了物理地址。程序一旦裝入到內(nèi)存以后,就不能再移動了。 n(2
63、)動態(tài)地址映射n采用動態(tài)地址映射方式時,當(dāng)用戶程序被裝入內(nèi)存時,不對指令代碼做任何修改,而是在程序的運行過程中,當(dāng)它需要訪問內(nèi)存單元的時候,再來進行地址轉(zhuǎn)換。地址轉(zhuǎn)換一般是由硬件的地址映射機制來完成的,通常的做法是設(shè)置一個基地址寄存器(或者叫重定位寄存器),當(dāng)一個任務(wù)被調(diào)度運行時,就把它所在分區(qū)的起始地址裝入到這個寄存器中。然后,在程序的運行過程中,當(dāng)需要訪問某個內(nèi)存單元時,硬件就會自動地將其中的邏輯地址加上基地址寄存器當(dāng)中的內(nèi)容,從而得到實際的物理地址,并按照這個物理地址去執(zhí)行。 5.4.5頁式存儲管理n與分區(qū)存儲管理方式不同,頁式存儲管理方式打破存儲分配的連續(xù)性,一個程序的邏輯地址空間可以
64、分布在若干個離散的內(nèi)存塊上,以達到充分利用內(nèi)存,提高內(nèi)存利用率的目的。n在頁式存儲管理方式中,一方面,把物理內(nèi)存劃分為許多個固定大小的內(nèi)存塊,稱為物理頁面(physical page ),或頁框(page frame )。另一方面,把邏輯地址空間也劃分為大小相同的塊,稱為邏輯頁面(logical page )或簡稱為頁面(page)。頁面的大小為2n,一般在512個字節(jié)到8KB之間。當(dāng)一個用戶程序被裝入內(nèi)存時,不是以整個程序為單位,把它存放在一整塊連續(xù)的區(qū)域中,而是以頁面為單位來進行分配的。對于一個大小為N個頁面的程序,需要有N個空閑的物理頁面,這些物理頁面可以是不連續(xù)的。 n在實現(xiàn)頁式存儲管
65、理時,需要解決數(shù)據(jù)結(jié)構(gòu)、內(nèi)存的分配與回收、地址映射等問題。 n 1數(shù)據(jù)結(jié)構(gòu)n在頁式存儲管理中,最主要的數(shù)據(jù)結(jié)構(gòu)有頁表(page table )和物理頁面表兩個。頁表給出了任務(wù)的邏輯頁面號與內(nèi)存中的物理頁面號之間的對應(yīng)關(guān)系。物理頁面表用來描述內(nèi)存空間當(dāng)中,各個物理頁面的使用分配狀況。物理頁面表可以采用位示圖或空閑頁面鏈表等方法來實現(xiàn)。 n 2. 內(nèi)存的分配與回收n當(dāng)一個任務(wù)到來時,需要考慮如何給它分配內(nèi)存空間?當(dāng)一個任務(wù)運行結(jié)束后,需要考慮如何來回收它所占用的內(nèi)存空間?內(nèi)存的分配與回收算法與物理頁面表的實現(xiàn)方法是密切相關(guān)的。n當(dāng)一個任務(wù)到來時,首先需要計算它所需要的頁面數(shù)N,查詢是否還有N個空閑
66、的物理頁面;如果有足夠的空閑物理頁面,則需要申請一個頁表,其長度為N,并把頁表的起始地址填入到該任務(wù)的任務(wù)控制塊TCB當(dāng)中;然后分配N個空閑的物理頁面并編號,把它們的編號填入到頁表中,建立邏輯頁面與物理頁面之間的對應(yīng)關(guān)系,并對剛剛被占用的那些物理頁面進行標(biāo)記。n當(dāng)一個任務(wù)運行結(jié)束,釋放了它所占用的內(nèi)存空間后,需要對這些物理頁面進行回收。 n 3地址映射n 在頁式存儲管理方式中,當(dāng)一個任務(wù)被加載到內(nèi)存后,連續(xù)的邏輯地址空間被劃分為一個個的邏輯頁面,這些邏輯頁面被裝入到不同的物理頁面當(dāng)中。在這種情況下,為了保證程序能夠正確地運行,需要把程序中使用的邏輯地址轉(zhuǎn)換為內(nèi)存訪問時的物理地址,完成地址映射。n地址映射是以頁面為單位來進行處理的。在進行地址映射時,首先分析邏輯地址,對于給定的一個邏輯地址,找到它所在的邏輯頁面,以及它在頁面內(nèi)的偏移地址;然后進行頁表查找,根據(jù)邏輯頁面號,從頁表中找到它所對應(yīng)的物理頁面號;最后進行物理地址合成,根據(jù)物理頁面號及頁內(nèi)偏移地址,確定最終的物理地址。 n應(yīng)注意的是,采用頁式存儲管理方式,程序必須全部裝入內(nèi)存,才能夠運行。如果一個程序的規(guī)模大于當(dāng)前的空閑空間的總和
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案