嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)_第1頁(yè)
嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)_第2頁(yè)
嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)_第3頁(yè)
嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)_第4頁(yè)
嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩89頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第8章嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)主講人:吳貴芳3/4/20231嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第1頁(yè)!8.1嵌入式軟件基礎(chǔ)8.1.1嵌入式軟件的特點(diǎn)應(yīng)用在嵌入式計(jì)算機(jī)系統(tǒng)當(dāng)中的各種軟件統(tǒng)稱為嵌入式軟件,作為嵌入式系統(tǒng)的一個(gè)組成部分,目前嵌入式軟件的種類和規(guī)模都得到了極大的發(fā)展,形成了一個(gè)完整、獨(dú)立的體系。除了具有通用軟件的一般特性,同時(shí)還具有一些與嵌入式系統(tǒng)密切相關(guān)的特點(diǎn),如:(l)規(guī)模較小在一般情況下,嵌入式系統(tǒng)的資源多是比較有限的,要求嵌入式軟件必須盡可能地精簡(jiǎn),多數(shù)的嵌入式軟件都在幾MB以內(nèi)。2嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第2頁(yè)!(2)開(kāi)發(fā)難度大嵌入式系統(tǒng)由于硬件資源的有限,使得嵌入式軟件在時(shí)間和空間上都受到嚴(yán)格的限制,需要開(kāi)發(fā)人員對(duì)編程語(yǔ)言、編譯器和操作系統(tǒng)有深刻的了解,才有可能開(kāi)發(fā)出運(yùn)行速度快、存儲(chǔ)空間少、維護(hù)成本低的軟件。嵌入式軟件一般都要涉及到底層軟件的開(kāi)發(fā),應(yīng)用軟件的開(kāi)發(fā)也是直接基于操作系統(tǒng)的,這就要求開(kāi)發(fā)人員具有扎實(shí)的軟、硬件基礎(chǔ),能靈活運(yùn)用不同的開(kāi)發(fā)手段和工具,具有較豐富的開(kāi)發(fā)經(jīng)驗(yàn)。嵌入式軟件的運(yùn)行環(huán)境和開(kāi)發(fā)環(huán)境比PC機(jī)復(fù)雜,嵌入式軟件是在目標(biāo)系統(tǒng)上運(yùn)行的,而嵌入式軟件的開(kāi)發(fā)工作則是在另外的開(kāi)發(fā)系統(tǒng)中進(jìn)行,當(dāng)應(yīng)用軟件調(diào)試無(wú)誤后,再把它放到目標(biāo)系統(tǒng)上去。3嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第3頁(yè)!8.1.2嵌入式軟件的分類1.系統(tǒng)軟件系統(tǒng)軟件控制和管理嵌入式系統(tǒng)資源,為嵌入式應(yīng)用提供支持的各種軟件,如設(shè)備驅(qū)動(dòng)程序、嵌入式操作系統(tǒng)、嵌入式中間件等。2.應(yīng)用軟件應(yīng)用軟件是嵌入式系統(tǒng)中的上層軟件,它定義了嵌入式設(shè)備的主要功能和用途,并負(fù)責(zé)與用戶進(jìn)行交互。應(yīng)用軟件是嵌入式系統(tǒng)功能的體現(xiàn),如飛行控制軟件、手機(jī)軟件、MP3播放軟件、電子地圖軟件等,一般面向于特定的應(yīng)用領(lǐng)域,。3.支撐軟件支撐軟件指輔助軟件開(kāi)發(fā)的工具軟件,如系統(tǒng)分析設(shè)計(jì)工具、在線仿真工具、交叉編譯器、源程序模擬器和配置管理工具等。在嵌入式系統(tǒng)當(dāng)中,系統(tǒng)軟件和應(yīng)用軟件運(yùn)行在目標(biāo)平臺(tái)的(即嵌入式設(shè)備上),而對(duì)于各種軟件開(kāi)發(fā)工具來(lái)說(shuō),它們大部分都運(yùn)行在開(kāi)發(fā)平臺(tái)(PC機(jī))上,運(yùn)行Windows或Linux操作系統(tǒng)。4嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第4頁(yè)!循環(huán)輪轉(zhuǎn)方式的程序簡(jiǎn)單、直觀、開(kāi)銷小、可預(yù)測(cè)。軟件的開(kāi)發(fā)可以按照自頂向下、逐步求精的方式,將系統(tǒng)要完成的功能逐級(jí)劃分成若干個(gè)小的功能模塊進(jìn)行編程,最后組合在一起。循環(huán)輪轉(zhuǎn)方式的軟件系統(tǒng)只有一條執(zhí)行流程和一個(gè)地址空間,不需要任務(wù)之間的調(diào)度和切換,其程序的代碼都是固定的,函數(shù)之間的調(diào)用關(guān)系也是明確的,整個(gè)系統(tǒng)的執(zhí)行過(guò)程是可預(yù)測(cè)的。循環(huán)輪轉(zhuǎn)方式的缺點(diǎn)是程序必須按順序執(zhí)行,無(wú)法處理異步事件,缺乏并行處理的能力。缺乏硬件上的時(shí)間控制機(jī)制,無(wú)法實(shí)現(xiàn)定時(shí)功能。5嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第5頁(yè)!2.有操作系統(tǒng)的嵌入式軟件從20世紀(jì)80年代開(kāi)始,操作系統(tǒng)出現(xiàn)在嵌入式系統(tǒng)上。如今,嵌入式操作系統(tǒng)在嵌入式系統(tǒng)中廣泛應(yīng)用,尤其是在功能復(fù)雜、系統(tǒng)龐大的應(yīng)用中顯得愈來(lái)愈重要。在應(yīng)用軟件開(kāi)發(fā)時(shí),程序員不是直接面對(duì)嵌入式硬件設(shè)備,而是采用一些嵌入式軟件開(kāi)發(fā)環(huán)境,在操作系統(tǒng)的基礎(chǔ)上編寫程序。在控制系統(tǒng)中,采用前后臺(tái)系統(tǒng)體系結(jié)構(gòu)的軟件,在遇到強(qiáng)干擾時(shí),可能會(huì)使應(yīng)用程序產(chǎn)生異常、出錯(cuò),甚至死循環(huán)的現(xiàn)象,從而造成系統(tǒng)的崩潰。而采用嵌入式操作系統(tǒng)管理的系統(tǒng),在遇到強(qiáng)干擾時(shí),可能只會(huì)引起系統(tǒng)中的某一個(gè)進(jìn)程被破壞,但這可以通過(guò)系統(tǒng)的監(jiān)控進(jìn)程對(duì)其進(jìn)行修復(fù),系統(tǒng)具有自愈能力,不會(huì)造成系統(tǒng)崩潰。6嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第6頁(yè)!嵌入式軟件的體系結(jié)構(gòu)圖如圖8.1.2所示,最底層的是嵌入式硬件系統(tǒng),包括嵌入式微處理器、存儲(chǔ)器、鍵盤、LCD顯示器等輸入/輸出設(shè)備。在硬件層之上的是設(shè)備驅(qū)動(dòng)層,它負(fù)責(zé)與硬件直接打交道,并為操作系統(tǒng)層軟件提供所需的驅(qū)動(dòng)支持。操作系統(tǒng)層可以分為基本部分和擴(kuò)展部分,基本部分是操作系統(tǒng)的核心,負(fù)責(zé)整個(gè)系統(tǒng)的任務(wù)調(diào)度、存儲(chǔ)管理、時(shí)鐘管理和中斷管理等功能;擴(kuò)展部分為用戶提供網(wǎng)絡(luò)、文件系統(tǒng)、圖形用戶界面GUI、數(shù)據(jù)庫(kù)等擴(kuò)展功能,擴(kuò)展部分的內(nèi)容可以根據(jù)系統(tǒng)的需要來(lái)進(jìn)行剪裁。在操作系統(tǒng)的上面是一些中間件軟件。最上層是網(wǎng)絡(luò)瀏覽器、MP3播放器、文本編輯器、電子郵件客戶端、電子游戲等各種應(yīng)用軟件,實(shí)現(xiàn)嵌入式系統(tǒng)的功能。7嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第7頁(yè)!8.1.4嵌入式系統(tǒng)的設(shè)備驅(qū)動(dòng)嵌入式系統(tǒng)的設(shè)備驅(qū)動(dòng)層用來(lái)完成嵌入式系統(tǒng)硬件設(shè)備所需要的一些軟件初始化和管理。設(shè)備驅(qū)動(dòng)層直接對(duì)硬件進(jìn)行管理和控制,并為上層軟件提供所需的驅(qū)動(dòng)支持。1.板級(jí)支持包設(shè)備驅(qū)動(dòng)層也稱為BSP(BoardSupportPackage,板級(jí)支持包),在BSP中把所有與硬件相關(guān)的代碼都封裝起來(lái),為操作系統(tǒng)提供一個(gè)虛擬的硬件平臺(tái),操作系統(tǒng)運(yùn)行在這個(gè)虛擬的硬件平臺(tái)上。在BSP當(dāng)中,使用一組定義好的編程接口來(lái)與BSP進(jìn)行交互,并通過(guò)BSP來(lái)訪問(wèn)真正的硬件。在嵌入式系統(tǒng)中,BSP類似于PC系統(tǒng)中的BIOS和驅(qū)動(dòng)程序。BSP把嵌入式操作系統(tǒng)與具體的硬件平臺(tái)隔離開(kāi)來(lái)。8嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第8頁(yè)!2.BootLoaderBootLoader(引導(dǎo)加載程序)是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一小段程序。通過(guò)這段程序,初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境設(shè)置到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核做好準(zhǔn)備。BootLoader用來(lái)完成整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)。通常在系統(tǒng)上電或復(fù)位時(shí),BootLoader程序從地址0x00000000處開(kāi)始執(zhí)行。BootLoader的功能與嵌入式系統(tǒng)的硬件平臺(tái)直接相關(guān),不同的CPU體系結(jié)構(gòu)和板級(jí)設(shè)備配置,BootLoader的功能不同。一般來(lái)說(shuō),BootLoader主要包含片級(jí)初始化、板級(jí)初始化和加載內(nèi)核等一些基本功能。9嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第9頁(yè)!3.設(shè)備驅(qū)動(dòng)程序在一個(gè)嵌入式系統(tǒng)中,可以沒(méi)有操作系統(tǒng),但設(shè)備驅(qū)動(dòng)程序是必不可少的。設(shè)備驅(qū)動(dòng)程序是一組庫(kù)函數(shù),用來(lái)對(duì)硬件進(jìn)行初始化和管理,并向上層軟件提供訪問(wèn)接口。不同功能的硬件設(shè)備,它們的設(shè)備驅(qū)動(dòng)程序是不同的。但大多數(shù)的設(shè)備驅(qū)動(dòng)程序都具有硬件啟動(dòng)(初始化)、硬件關(guān)閉(關(guān)機(jī))、硬件停用(暫停)、硬件啟用(重新啟用)、讀操作(讀取數(shù)據(jù))、寫操作(寫入數(shù)據(jù))等基本功能。設(shè)備驅(qū)動(dòng)程序通??梢酝瓿梢恍┨囟ǖ墓δ?,這些功能一般采用函數(shù)的形式來(lái)實(shí)現(xiàn),這些函數(shù)有分層結(jié)構(gòu)和混合結(jié)構(gòu)兩種組織結(jié)構(gòu)形式。10嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第10頁(yè)!8.1.5嵌入式中間件中間件是一種軟件平臺(tái)技術(shù),在銀行、證券、電信等行業(yè)的大型計(jì)算機(jī)應(yīng)用系統(tǒng)中廣泛應(yīng)用。近年來(lái),中間件技術(shù)也被引入到嵌入式系統(tǒng)的設(shè)計(jì)中,并與實(shí)時(shí)多任務(wù)操作系統(tǒng)緊密結(jié)合。利用中間件技術(shù)可以使用戶把精力集中到系統(tǒng)功能的實(shí)現(xiàn)上,實(shí)現(xiàn)嵌入式系統(tǒng)的軟硬件協(xié)同設(shè)計(jì)。嵌入式中間件是指不包括操作系統(tǒng)內(nèi)核、設(shè)備驅(qū)動(dòng)程序和應(yīng)用軟件在內(nèi)的所有系統(tǒng)軟件。嵌入式中間件把原本屬于應(yīng)用軟件層的一些通用的功能模塊抽取出來(lái),形成獨(dú)立的一層軟件,為應(yīng)用軟件提供一個(gè)靈活、安全、移植性好、相互通信、協(xié)同工作的平臺(tái)。嵌入式中間件可以分為消息中間件、對(duì)象中間件、遠(yuǎn)程過(guò)程調(diào)用(RemoteProcedureCalls,RPC)、數(shù)據(jù)庫(kù)訪問(wèn)中間件、安全中間件等不同的類型。一些公司可提供嵌入式中間件集成解決方案,如Sun公司的嵌入式Java,微軟公司的.NETCompactFrame-work,OMG(ObjectManagementGroup)的嵌入式CORBA等。11嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第11頁(yè)!運(yùn)行在嵌入式環(huán)境中的EOS其目標(biāo)是為了完成某一項(xiàng)或有限項(xiàng)功能,而非通用型的操作系統(tǒng),因此在性能和實(shí)時(shí)性方面有嚴(yán)格的限制,能耗、成本和可靠性通常是影響設(shè)計(jì)的重要因素,要求占用資源少,適合在有限存儲(chǔ)空間運(yùn)行,要求系統(tǒng)功能可以根據(jù)產(chǎn)品的設(shè)計(jì)要求進(jìn)行剪裁、調(diào)整。所有的EOS都有一個(gè)內(nèi)核(kernel),內(nèi)核是系統(tǒng)當(dāng)中的一個(gè)組件,它包含了任務(wù)管理、存儲(chǔ)管理、輸入/輸出(I/O)設(shè)備管理和文件系統(tǒng)管理四個(gè)功能模塊。其中:●任務(wù)管理:對(duì)嵌入式系統(tǒng)中的運(yùn)行軟件進(jìn)行描述和管理,并完成處理機(jī)資源的分配與調(diào)度;●存儲(chǔ)管理:用來(lái)提高內(nèi)存的利用率,方便用戶的使用,并提供足夠的存儲(chǔ)空間;●I/O設(shè)備管理:方便設(shè)備的使用,提高CPU和輸入/輸出設(shè)備的利用率;●文件管理:解決文件資源的存儲(chǔ)、共享、保密和保護(hù)等問(wèn)題。注意:不同的嵌入式系統(tǒng)的EOS所包含的組件可能各不相同,內(nèi)核設(shè)計(jì)也可能各不相同的,完全取決于系統(tǒng)的設(shè)計(jì)以及實(shí)際的應(yīng)用需求。12嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第12頁(yè)!2.按響應(yīng)時(shí)間分類按照系統(tǒng)對(duì)響應(yīng)時(shí)間的敏感程度,EOS可以分為RTOS(RealTimeOperatingSystems,實(shí)時(shí)操作系統(tǒng))和非實(shí)時(shí)操作系統(tǒng)兩大類:。RTOS對(duì)響應(yīng)時(shí)間有非常嚴(yán)格的要求,當(dāng)某一個(gè)外部事件或請(qǐng)求發(fā)生時(shí),相應(yīng)的任務(wù)必須在規(guī)定的時(shí)間內(nèi)完成相應(yīng)的處理。RTOS可以分為硬實(shí)時(shí)和軟實(shí)時(shí)兩種情形。(1)硬實(shí)時(shí)系統(tǒng)硬實(shí)時(shí)系統(tǒng)對(duì)響應(yīng)時(shí)間有嚴(yán)格的要求,如果響應(yīng)時(shí)間不能滿足可能會(huì)引起系統(tǒng)的崩潰或致命的錯(cuò)誤。(2)軟實(shí)時(shí)系統(tǒng)軟實(shí)時(shí)系統(tǒng)對(duì)響應(yīng)時(shí)間有要求,如果響應(yīng)時(shí)間不能滿足,將需要支付能夠接受的額外代價(jià)。非實(shí)時(shí)系統(tǒng)對(duì)響應(yīng)時(shí)間沒(méi)有嚴(yán)格的要求,各個(gè)進(jìn)程分享處理器,以獲得各自所需要的運(yùn)行時(shí)間。13嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第13頁(yè)!圖8.2.1單體結(jié)構(gòu)

圖8.2.2分層結(jié)構(gòu)

14嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第14頁(yè)!OS-9、CExecutive、VxWorks,CMX-RTX、NucleusPlus和QNX等EOS采用的都是微內(nèi)核結(jié)構(gòu)。圖8.2.3微內(nèi)核結(jié)構(gòu)15嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第15頁(yè)!在VxWorks操作系統(tǒng)中,主要包含有實(shí)時(shí)微內(nèi)核Wind、I/O處理系統(tǒng)、文件系統(tǒng)、網(wǎng)絡(luò)處理模塊、虛擬內(nèi)存模塊VxVMI、板級(jí)支持包BSP等功能模塊。其中:實(shí)時(shí)微內(nèi)核Wind包括基于優(yōu)先級(jí)的任務(wù)調(diào)度、任務(wù)間的通信、同步和互斥、中斷處理、定時(shí)器和內(nèi)存管理機(jī)制等功能。與ANSIC兼容的I/O系統(tǒng)包括UNIX標(biāo)準(zhǔn)的緩沖I/O和POSIX標(biāo)準(zhǔn)的異步I/O。文件系統(tǒng)主要包括與MS-DOS兼容的文件系統(tǒng)、與RT-11兼容的文件系統(tǒng)、RawDisk文件系統(tǒng)和SCSI磁帶設(shè)備。網(wǎng)絡(luò)處理模塊能與如TCP/IP、NFS、UDP、SNMP、FTP等許多運(yùn)行其他協(xié)議的網(wǎng)絡(luò)進(jìn)行通信。虛擬內(nèi)存模塊VxVMI主要用于對(duì)指定內(nèi)存區(qū)的保護(hù),以加強(qiáng)系統(tǒng)的安全性。板級(jí)支持包BSP由初始化和驅(qū)動(dòng)程序兩部分組成,用來(lái)管理硬件的功能模塊,對(duì)各種板卡的硬件功能提供統(tǒng)一的接口。16嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第16頁(yè)!●支持x86、ARM、MIPS、Alpha、PowerPC等多種體系結(jié)構(gòu),支持各種主流硬件設(shè)備和最新硬件技術(shù)?!駧缀趺恳环N通用程序在Linux上都能找到,具有豐富的軟件資源?!瘭藽linux主要針對(duì)沒(méi)有MMU的微處理器;RT-Linux是最早實(shí)現(xiàn)硬實(shí)時(shí)支持的Linux版本;Embedix采用模塊化的設(shè)計(jì)方案,方便系統(tǒng)剪裁;HardHatLinux是一個(gè)嵌入式實(shí)時(shí)系統(tǒng),可以針對(duì)硬件環(huán)境進(jìn)行配置,以獲得最佳的性能和最小的容量。3.WindowsCEWindowsCE是一個(gè)基于優(yōu)先級(jí)的多任務(wù)嵌入式操作系統(tǒng),提供了256個(gè)優(yōu)先級(jí)別,基本內(nèi)核需要至少200KB的ROM,支持Win32API子集、支持多種用戶界面硬件、支持多種串行和網(wǎng)絡(luò)通信技術(shù)。WindowsCE不是一個(gè)硬實(shí)時(shí)系統(tǒng)。17嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第17頁(yè)!4.C/OS-IIC/OS-II是一種免費(fèi)、開(kāi)放源代碼、結(jié)構(gòu)小巧、基于可搶占優(yōu)先級(jí)調(diào)度的實(shí)時(shí)操作系統(tǒng),其內(nèi)核提供任務(wù)調(diào)度與管理、時(shí)間管理、任務(wù)間同步與通信、內(nèi)存管理和中斷服務(wù)等功能。名稱C/OS-II來(lái)源于術(shù)語(yǔ)Micro-ControllerOperatingSystem(微控制器操作系統(tǒng)),它通常也稱為MUCOS或者UCOS。C/OS-II內(nèi)核在2KB~10KB數(shù)量級(jí),具有執(zhí)行效率高、占用空間小、實(shí)時(shí)性能優(yōu)良和可擴(kuò)展性強(qiáng)等特點(diǎn),主要面向中小型嵌入式系統(tǒng)。μC/OS-II內(nèi)核提供最基本的系統(tǒng)服務(wù),例如信號(hào)量、郵箱、消息隊(duì)列、內(nèi)存管理、中斷管理等。μC/OS-II內(nèi)核本身并不支持文件系統(tǒng),但它具有良好的擴(kuò)展性能,可以根據(jù)需要自行加入。C/OS-II具有良好的可移植性。C/OS-II的大部分代碼都是用C語(yǔ)言寫成的,只有與處理器的硬件相關(guān)的一部分代碼采用匯編語(yǔ)言編寫。C/OS-II并不是一個(gè)商業(yè)實(shí)時(shí)操作系統(tǒng),但C/OS-II的穩(wěn)定性和實(shí)用性卻被數(shù)百個(gè)商業(yè)級(jí)的應(yīng)用所驗(yàn)證,C/OS-II不已在眾多的商業(yè)領(lǐng)域中獲得了廣泛的應(yīng)用。C/OS-II支持ARM、PowerPC、MIPS、68k/ColdFire和x86等多種體系結(jié)構(gòu)。18嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第18頁(yè)!2.多道程序設(shè)計(jì)類型采用多道程序設(shè)計(jì)的操作系統(tǒng)允許多個(gè)程序同時(shí)存在并運(yùn)行,采用多道程序技術(shù)可以有效提高系統(tǒng)資源的利用率。在多道程序設(shè)計(jì)的環(huán)境下,允許多個(gè)程序同時(shí)運(yùn)行,當(dāng)一個(gè)程序在訪問(wèn)I/O設(shè)備時(shí),會(huì)主動(dòng)把CPU交出來(lái),讓另一個(gè)程序去運(yùn)行,從而提高系統(tǒng)資源的使用效率。如圖8.3.1所示,從t0到t1,甲在使用I/O設(shè)備,乙處于等待狀態(tài)。在到達(dá)了t1時(shí)刻后,甲釋放剛剛占用的I/O設(shè)備,交給程序乙去使用。因此,在t1到t2期間,程序甲在使用CPU,程序乙在使用I/O設(shè)備。在到達(dá)t2時(shí)刻后,乙釋放剛剛占用的I/O設(shè)備,交給程序甲去使用。因此,在t2到t3期間,甲和乙兩個(gè)程序相互交換資源,繼續(xù)執(zhí)行。同樣的情形也發(fā)生在t3時(shí)刻和t4時(shí)刻。但是在t5時(shí)刻,甲已經(jīng)使用完了I/O設(shè)備,而乙仍然在使用CPU,所以甲只能處于等待狀態(tài),等到t6時(shí)刻再交換資源。這樣一直進(jìn)行下去,在t7時(shí)刻,甲執(zhí)行完畢,在t8時(shí)刻,乙也執(zhí)行完畢。從圖8.3.1可見(jiàn),由于CPU和I/O設(shè)備的使用是并行進(jìn)行的,在總的執(zhí)行時(shí)間上要明顯少于單道程序系統(tǒng)。19嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第19頁(yè)!8.3.2進(jìn)程、線程和任務(wù)1.進(jìn)程進(jìn)程(process)是在描述多道系統(tǒng)中并發(fā)活動(dòng)過(guò)程引入的一個(gè)概念。進(jìn)程和程序是兩個(gè)既有聯(lián)系又有區(qū)別的概念,兩者不能混為一談。例如:一個(gè)程序主要由代碼和數(shù)據(jù)兩部分內(nèi)容組成。而進(jìn)程是正在執(zhí)行的程序,它是由程序和該程序的運(yùn)行上下文兩部分內(nèi)容組成。程序是靜態(tài)的,而進(jìn)程是一個(gè)動(dòng)態(tài)的,變化的。進(jìn)程和程序之間并不是一一對(duì)應(yīng)的。一個(gè)進(jìn)程在運(yùn)行的時(shí)候可以啟動(dòng)一個(gè)或多個(gè)程序,同一個(gè)程序也可能由多個(gè)進(jìn)程同時(shí)執(zhí)行。程序可以以文件的形式存放在硬盤或光盤上,作為一種軟件資源長(zhǎng)期保存。而進(jìn)程則是一次執(zhí)行過(guò)程,它是暫時(shí)的,是動(dòng)態(tài)地產(chǎn)生和終止的。一個(gè)進(jìn)程通常包含有以下幾個(gè)方面的內(nèi)容:相應(yīng)的程序:進(jìn)程是一個(gè)正在運(yùn)行的程序,有相應(yīng)程序的代碼和數(shù)據(jù)。20嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第20頁(yè)!2.線程線程(thread)是一個(gè)比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位。所謂的線程,就是進(jìn)程當(dāng)中的一條執(zhí)行流程。從資源組合的角度來(lái)看,進(jìn)程把一組相關(guān)的資源組合起來(lái),構(gòu)成了一個(gè)資源平臺(tái)(資源環(huán)境),其中包括運(yùn)行上下文、內(nèi)存地址空間、打開(kāi)的文件等,在圖8.3.2中用深色的方框來(lái)表示。從程序運(yùn)行的角度來(lái)看,進(jìn)程就是一個(gè)正在運(yùn)行的程序,在圖8.3.2中用一條帶有箭頭的線段來(lái)表示。從圖8.3.2可見(jiàn),可以把進(jìn)程看成是程序代碼在這個(gè)資源平臺(tái)上的一條執(zhí)行流程(線程),也就是可以認(rèn)為進(jìn)程等于線程加上資源平臺(tái)。如圖8.3.2所示,在一個(gè)進(jìn)程當(dāng)中,或者說(shuō)在一個(gè)資源平臺(tái)上,可以同時(shí)存在多個(gè)線程。可以用線程來(lái)作為CPU的基本調(diào)度單位,使得各個(gè)線程之間可以并發(fā)執(zhí)行。對(duì)于同一個(gè)進(jìn)程當(dāng)中的各個(gè)線程來(lái)說(shuō),運(yùn)行在相同的資源平臺(tái)上,可以共享該進(jìn)程的大部分資源(如內(nèi)存地址空間、代碼、數(shù)據(jù)、文件等),但也有一小部分資源是不能共享的,每個(gè)線程都必須擁有各自獨(dú)立的一份(如CPU運(yùn)行上下文(如PC寄存器、PSW寄存器、通用寄存器和棧指針等)和棧)。21嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第21頁(yè)!3.任務(wù)在一些嵌入式系統(tǒng)中,把能夠獨(dú)立運(yùn)行的實(shí)體稱為“任務(wù)”(task),并沒(méi)有使用“進(jìn)程”或“線程”這兩個(gè)概念。任務(wù)到底是進(jìn)程還是線程,在研究一個(gè)具體的嵌入式操作系統(tǒng)的時(shí)候,要注意加以區(qū)分。在任務(wù)的創(chuàng)建過(guò)程需要定義的主要參數(shù)有任務(wù)的優(yōu)先級(jí)、棧空間的大小和函數(shù)名。任務(wù)具有獨(dú)立的優(yōu)先級(jí)和??臻g,CPU上下文一般也是存放在??臻g中。對(duì)于不同的任務(wù),它們也能夠訪問(wèn)相同的全局變量,在這些任務(wù)之間,可以很方便地、直接地去使用共享的內(nèi)存,而不需要經(jīng)過(guò)系統(tǒng)內(nèi)核來(lái)進(jìn)行通信。通常認(rèn)為,在嵌入式操作系統(tǒng)中“任務(wù)”就是線程,如在VxWorks、μC/OS-II、Jbed、嵌入式Linux等嵌入式操作系統(tǒng)中。22嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第22頁(yè)!圖8.3.3任務(wù)的層次結(jié)構(gòu)23嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第23頁(yè)!兩種模型創(chuàng)建任務(wù)的過(guò)程非常相似,包括為新任務(wù)分配相應(yīng)的數(shù)據(jù)結(jié)構(gòu),存放各種管理信息,分配內(nèi)存空間,存放任務(wù)的代碼和數(shù)據(jù)。當(dāng)這個(gè)新任務(wù)準(zhǔn)備就緒后,就可以啟動(dòng)它運(yùn)行了。在fork/exec模型,首先調(diào)用fork函數(shù)為新任務(wù)創(chuàng)建一份與父任務(wù)完全相同的內(nèi)存空間,然后再調(diào)用exec函數(shù)裝入新任務(wù)的代碼,并用它來(lái)覆蓋原有的屬于父任務(wù)的內(nèi)容。對(duì)于新創(chuàng)建的子任務(wù)來(lái)說(shuō),它可以從父任務(wù)那里繼承代碼、數(shù)據(jù)等各種屬性。而spawn模型在創(chuàng)建新任務(wù)的時(shí),直接為它分配一個(gè)全新的地址空間,然后將新任務(wù)的代碼裝入并運(yùn)行。(2)任務(wù)的終止任務(wù)的終止可能有多種原因,正常退出、錯(cuò)誤退出、被其他任務(wù)踢出等情況可以使任務(wù)終止。當(dāng)一個(gè)任務(wù)完成了所有的工作,需要結(jié)束運(yùn)行,提出退出要求,稱為正常退出。當(dāng)一個(gè)任務(wù)在執(zhí)行過(guò)程中,出現(xiàn)了致命的錯(cuò)誤(例如執(zhí)行了非法指令、內(nèi)存訪問(wèn)錯(cuò)誤等),系統(tǒng)中止該任務(wù)的運(yùn)行,強(qiáng)制性地讓該任務(wù)退出,稱為錯(cuò)誤退出。24嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第24頁(yè)!任務(wù)因?yàn)檎诘却撤N事件的發(fā)生而暫時(shí)不能運(yùn)行稱為阻塞狀態(tài),也叫等待狀態(tài)(waiting)。此時(shí),即使CPU已經(jīng)空閑下來(lái)了,該任務(wù)也還是不能運(yùn)行。如圖8.3.4所示,在一定條件下,任務(wù)會(huì)在不同的狀態(tài)之間來(lái)回轉(zhuǎn)換,存在運(yùn)行→阻塞、運(yùn)行→就緒、就緒→運(yùn)行、阻塞→就緒四種轉(zhuǎn)換關(guān)系。圖8.3.4任務(wù)間的狀態(tài)轉(zhuǎn)換圖25嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第25頁(yè)!(2)CPU上下文信息CPU上下文信息包括通用寄存器、PC寄存器、程序狀態(tài)字、棧指針等各種CPU寄存器的當(dāng)前值。在實(shí)際的嵌入式系統(tǒng)中,CPU上下文信息不一定直接存放在TCB當(dāng)中,而是存放在任務(wù)的棧當(dāng)中,可以通過(guò)相應(yīng)的棧指針來(lái)訪問(wèn)。(3)資源管理信息在操作系統(tǒng)中,任務(wù)表示的是進(jìn)程,則還應(yīng)包含一些資源管理方面的信息,如段表地址、頁(yè)表地址等存儲(chǔ)管理方面的信息,根目錄、文件描述字等文件管理方面的信息。26嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第26頁(yè)!6.任務(wù)隊(duì)列在一個(gè)多任務(wù)的操作系統(tǒng)中,各個(gè)任務(wù)的狀態(tài)是經(jīng)常變化的,有時(shí)處于運(yùn)行狀態(tài),有時(shí)處于就緒狀態(tài),有時(shí)又處于阻塞狀態(tài)。通常采用任務(wù)隊(duì)列的方式來(lái)組織它的所有任務(wù),以提高對(duì)這些任務(wù)的管理效率。操作系統(tǒng)用一組隊(duì)列來(lái)表示系統(tǒng)當(dāng)中所有任務(wù)的當(dāng)前狀態(tài)。例如,處于運(yùn)行狀態(tài)的所有任務(wù)構(gòu)成了運(yùn)行隊(duì)列,處于就緒狀態(tài)的所有任務(wù)構(gòu)成了就緒隊(duì)列,而對(duì)于處于阻塞狀態(tài)的任務(wù),則要根據(jù)它們阻塞的原因,分別構(gòu)成相應(yīng)的阻塞隊(duì)列。不同的狀態(tài)用不同的隊(duì)列來(lái)表示。然后,對(duì)于系統(tǒng)當(dāng)中的每一個(gè)任務(wù),根據(jù)它的狀態(tài)把它的TCB加入到相應(yīng)的隊(duì)列當(dāng)中去。如果一個(gè)任務(wù)的狀態(tài)發(fā)生變化,就要把它的TCB從一個(gè)狀態(tài)隊(duì)列中脫離出來(lái),加入到另一個(gè)隊(duì)列當(dāng)中去。27嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第27頁(yè)!(2)在不可搶占調(diào)度方式,一個(gè)任務(wù)長(zhǎng)時(shí)間地占用著CPU系統(tǒng)也不會(huì)強(qiáng)制它中止。當(dāng)出現(xiàn)新任務(wù)創(chuàng)建、任務(wù)運(yùn)行結(jié)束及任務(wù)被阻塞的調(diào)度時(shí)機(jī)時(shí),有可能會(huì)發(fā)生調(diào)度。而對(duì)于發(fā)生的各種中斷,并不會(huì)去調(diào)用調(diào)度程序,而是在中斷處理完成后,又會(huì)回到剛才被打斷的任務(wù)中繼續(xù)執(zhí)行。在嵌入式操作系統(tǒng)中,存在著許多的調(diào)度算法,每一種算法都有各自的優(yōu)點(diǎn)和缺點(diǎn)??梢愿鶕?jù)響應(yīng)時(shí)間、周轉(zhuǎn)時(shí)間、調(diào)度開(kāi)銷、公平性、均衡性、吞吐量等指標(biāo)來(lái)評(píng)價(jià)一個(gè)調(diào)度算法的好壞。其中:●調(diào)度器為一個(gè)就緒任務(wù)進(jìn)行上下文切換時(shí)所需的時(shí)間,以及任務(wù)在就緒隊(duì)列中的等待時(shí)間稱為響應(yīng)時(shí)間(responsetime)?!褚粋€(gè)任務(wù)從提交到完成所經(jīng)歷的時(shí)間稱為周轉(zhuǎn)時(shí)間(turnaroundtime)?!裾{(diào)度器在做出調(diào)度決策時(shí)所需要的時(shí)間和空間開(kāi)銷稱為調(diào)度開(kāi)銷(overhead)。28嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第28頁(yè)!2.先來(lái)先服務(wù)算法(FirstComeFirstServed,F(xiàn)CFS)FCFS(FirstComeFirstServed,先來(lái)先服務(wù)算法)是一種最簡(jiǎn)單的調(diào)度算法。FCFS的基本思想就是按照任務(wù)到達(dá)的先后次序來(lái)進(jìn)行調(diào)度,它是一種不可搶占的調(diào)度方式。FCFS也叫做FIFO(FirstInFirstOut,先進(jìn)先出算法)。FCFS的最大優(yōu)點(diǎn)就是簡(jiǎn)單,易于理解也易于實(shí)現(xiàn)。缺點(diǎn)是一批任務(wù)的平均周轉(zhuǎn)時(shí)間取決于各個(gè)任務(wù)到達(dá)的順序,如果短任務(wù)位于長(zhǎng)任務(wù)之后,那么將增大平均周轉(zhuǎn)時(shí)間。29嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第29頁(yè)!不可搶占的SJF算法如圖8.3.5所示,由于任務(wù)T3的執(zhí)行時(shí)間最短,所以首先被調(diào)度運(yùn)行,其次是T1和T2。圖8.3.5SJF算法示意圖30嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第30頁(yè)!圖8.3.6RR算法示意圖31嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第31頁(yè)!8.3.5實(shí)時(shí)系統(tǒng)調(diào)度許多嵌入式操作系統(tǒng)都是實(shí)時(shí)操作系統(tǒng)(RTOS),實(shí)時(shí)系統(tǒng)的調(diào)度追求的是實(shí)時(shí)性,RTOS調(diào)度器要讓每個(gè)任務(wù)都在其最終時(shí)間期限(deadline)之前完成,而各任務(wù)之間的公平性并不是最重要的指標(biāo)。RTOS調(diào)度器多采用基于優(yōu)先級(jí)的可搶占調(diào)度算法。1.RTOS任務(wù)模型RTOS任務(wù)模型如圖8.3.7所示,在RTOS任務(wù)模型中,每一個(gè)任務(wù)用一個(gè)三元組來(lái)表示(執(zhí)行時(shí)間、周期、時(shí)間期限)。其中:執(zhí)行時(shí)間(executiontime)E(i)是指對(duì)于第i個(gè)任務(wù),當(dāng)它所需要的資源都己具備時(shí),它的執(zhí)行所需要的最長(zhǎng)時(shí)間。周期(period)P(i)是指第i個(gè)任務(wù)的連續(xù)兩次運(yùn)行之間的最小時(shí)間間隔。時(shí)間期限(deadline)是指D(i)第i個(gè)任務(wù)所允許的最大響應(yīng)時(shí)間(從任務(wù)啟動(dòng)到運(yùn)行結(jié)束所需的時(shí)間)。一般來(lái)說(shuō),一個(gè)任務(wù)的周期時(shí)間同時(shí)也是它的時(shí)間期限,因?yàn)樵撊蝿?wù)必須在它的下一個(gè)周期開(kāi)始之前,完成此次運(yùn)行。啟動(dòng)時(shí)間t(i)是指第i個(gè)任務(wù)的第i次執(zhí)行的開(kāi)始時(shí)間。32嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第32頁(yè)!2.單調(diào)速率調(diào)度算法(RateMonotonicScheduling,RMS)RMS(RateMonotonicScheduling,單調(diào)速率調(diào)度算法)是一種靜態(tài)優(yōu)先級(jí)調(diào)度算法。RMS算法假設(shè):所有的任務(wù)都是周期性任務(wù);任務(wù)的時(shí)間期限等于它的周期;任務(wù)在每個(gè)周期內(nèi)的執(zhí)行時(shí)間是一個(gè)常量;任務(wù)之間不進(jìn)行通信,也不需要同步;任務(wù)可以在任何位置被搶占,不存在臨界區(qū)的問(wèn)題。RMS算法的基本思路是任務(wù)的優(yōu)先級(jí)與它的周期表現(xiàn)為單調(diào)函數(shù)的關(guān)系,任務(wù)的周期越短,優(yōu)先級(jí)越高;任務(wù)的周期越長(zhǎng),優(yōu)先級(jí)越低。RMS算法是一種最優(yōu)調(diào)度算法。如果存在一種基于靜態(tài)優(yōu)先級(jí)的調(diào)度順序,使得每個(gè)任務(wù)都能在其期限時(shí)間內(nèi)完成,那么RMS算法總能找到這樣的一種可行的調(diào)度方案。在任務(wù)比較多的情況下,RMS可調(diào)度的CPU使用率上限為ln2=0.69,CPU使用率如此低,對(duì)于大多數(shù)系統(tǒng)來(lái)說(shuō)是不可接受的。另外,在一個(gè)實(shí)際的系統(tǒng)中,任務(wù)之間通常都需要進(jìn)行通信和同步。33嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第33頁(yè)!8.4嵌入式系統(tǒng)的存儲(chǔ)管理8.4.1嵌入式存儲(chǔ)管理方式的特點(diǎn)嵌入式系統(tǒng)的存儲(chǔ)管理方式與系統(tǒng)的實(shí)際應(yīng)用領(lǐng)域及硬件環(huán)境密切相關(guān),不同的嵌入式系統(tǒng)采用不同的存儲(chǔ)管理方式,需要考慮硬件條件、實(shí)時(shí)性要求、系統(tǒng)規(guī)模、可靠性要求等因素。系統(tǒng)的實(shí)時(shí)性要求直接影響到存儲(chǔ)管理的實(shí)現(xiàn)方式,為了確保系統(tǒng)的實(shí)時(shí)性,快速和確定是內(nèi)存管理的基本要求,即在存儲(chǔ)管理方面的開(kāi)銷不能太大,對(duì)于每一項(xiàng)工作都要有明確的實(shí)時(shí)約束,即必須在某個(gè)限定的時(shí)刻之前完成。在實(shí)時(shí)系統(tǒng)中,存儲(chǔ)管理方法就比較簡(jiǎn)單,甚至不提供存儲(chǔ)管理功能。而對(duì)一些實(shí)時(shí)性要求不高,可靠性要求比較高、比較復(fù)雜的應(yīng)用系統(tǒng),需要實(shí)現(xiàn)對(duì)操作系統(tǒng)或任務(wù)的保護(hù),在存儲(chǔ)管理方式上就相對(duì)較為復(fù)雜。34嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第34頁(yè)!8.4.2存儲(chǔ)管理的實(shí)模式與保護(hù)模式實(shí)模式和保護(hù)模式是嵌入式操作系統(tǒng)中常見(jiàn)的兩個(gè)存儲(chǔ)管理方式。

1.實(shí)模式存儲(chǔ)管理在實(shí)模式存儲(chǔ)管理方式中,系統(tǒng)不使用MMU;不劃分“系統(tǒng)空間”和“用戶空間”,整個(gè)系統(tǒng)只有一個(gè)地址空間,即物理內(nèi)存地址空間;應(yīng)用程序和系統(tǒng)程序都能直接對(duì)所有的內(nèi)存單元進(jìn)行隨意訪問(wèn),無(wú)須進(jìn)行地址映射;操作系統(tǒng)的內(nèi)核與外圍應(yīng)用程序在編譯連接后,兩者通常被集成在同一個(gè)系統(tǒng)文件中;系統(tǒng)中的“任務(wù)”或“進(jìn)程”均是內(nèi)核線程,只有運(yùn)行上下文和棧是獨(dú)享的,其他資源都是共享的。在實(shí)模式存儲(chǔ)管理方式中,系統(tǒng)的內(nèi)存地址空間一般可以分為text、data、bss、堆、棧五個(gè)部分。其中:.text:(代碼段)用來(lái)存放操作系統(tǒng)和應(yīng)用程序的所有代碼。.data:(數(shù)據(jù)段)用來(lái)存放操作系統(tǒng)和應(yīng)用程序當(dāng)中所有帶有初始值的全局變量。.bss:用來(lái)存放操作系統(tǒng)和應(yīng)用程序當(dāng)中所有未帶初始值的全局變量。堆為動(dòng)態(tài)分配的內(nèi)存空間,在系統(tǒng)運(yùn)行時(shí),可以通過(guò)類似于malloc/free之類的函數(shù)來(lái)申請(qǐng)或釋放一段連續(xù)的內(nèi)存空間。棧用來(lái)保存運(yùn)行上下文以及函數(shù)調(diào)用時(shí)的局部變量和運(yùn)行參數(shù)。35嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第35頁(yè)!8.4.3分區(qū)存儲(chǔ)管理分區(qū)存儲(chǔ)管理適合在多道程序操作系統(tǒng)中應(yīng)用。分區(qū)存儲(chǔ)管理把整個(gè)內(nèi)存劃分為系統(tǒng)區(qū)和用戶區(qū)兩大區(qū)域,然后再把用戶區(qū)劃分為若干個(gè)分區(qū),可以同時(shí)有多個(gè)任務(wù)在系統(tǒng)中運(yùn)行,每個(gè)任務(wù)都有各自的地址空間。分區(qū)存儲(chǔ)管理又可以分為固定分區(qū)和可變分區(qū)兩類。

1.固定分區(qū)存儲(chǔ)管理采用固定分區(qū)存儲(chǔ)管理方法時(shí),各個(gè)用戶分區(qū)的個(gè)數(shù)、位置和大小一旦確定后,就固定不變,不能再修改了。為了滿足不同程序的存儲(chǔ)需要,各個(gè)分區(qū)的大小可以是相等的,也可以是不相等的。固定分區(qū)存儲(chǔ)管理方法的優(yōu)點(diǎn)是易于實(shí)現(xiàn),系統(tǒng)的開(kāi)銷比較小,空閑空間的管理、內(nèi)存的分配和回收算法都非常簡(jiǎn)單。其缺點(diǎn)是內(nèi)存的利用率不高,在任務(wù)所占用的分區(qū)內(nèi)部未被利用的空間的碎片(內(nèi)碎片)會(huì)造成很大的浪費(fèi);分區(qū)的總數(shù)是固定的,限制了并行執(zhí)行的程序個(gè)數(shù),N個(gè)分區(qū)最多只能有N個(gè)任務(wù)在同時(shí)運(yùn)行。36嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第36頁(yè)!在內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)上,系統(tǒng)會(huì)維護(hù)一個(gè)分區(qū)鏈表,來(lái)跟蹤記錄每一個(gè)內(nèi)存分區(qū)的情況,包括該分區(qū)的狀態(tài)(已分配或空閑)、起始地址、長(zhǎng)度等信息。在內(nèi)存的分配算法上,當(dāng)一個(gè)新任務(wù)來(lái)到時(shí),需要為它尋找一個(gè)空閑分區(qū),其大小必須大于或等于該任務(wù)的要求。若是大于要求,則將該分區(qū)分割成兩個(gè)小分區(qū),其中一個(gè)分區(qū)為要求的大小并標(biāo)記為“占用”,另一個(gè)分區(qū)為余下部分并標(biāo)記為“空閑”。選擇分區(qū)的先后次序一般是從內(nèi)存低端到高端。通常的分區(qū)分配算法有:最先匹配法(first-fit)、下次匹配法(next-fit)、最佳匹配法(best-fit)和最壞匹配法(worst-fit)。在內(nèi)存的回收算法上,當(dāng)一個(gè)任務(wù)運(yùn)行結(jié)束,并釋放它所占用的分區(qū)后,如果該分區(qū)的左右鄰居也是空閑分區(qū),則需要將它們合并為一個(gè)大的空閑分區(qū)。與此相對(duì)應(yīng),在分區(qū)鏈表上,也要將相應(yīng)的鏈接節(jié)點(diǎn)進(jìn)行合并,并對(duì)其內(nèi)容進(jìn)行更新。

37嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第37頁(yè)!(2)邏輯地址(logicaladdress)邏輯地址也叫相對(duì)地址或虛地址。用戶的程序經(jīng)過(guò)匯編或編譯后形成目標(biāo)代碼,而這些目標(biāo)代碼通常采用的就是相對(duì)地址的形式,其首地址為0,其余指令中的地址都是相對(duì)于這個(gè)首地址來(lái)編址的。顯然,邏輯地址和物理地址是完全不同的,不能用邏輯地址來(lái)直接訪問(wèn)內(nèi)存單元。因此,為了保證CPU在執(zhí)行指令時(shí)可以正確地訪問(wèn)存儲(chǔ)單元,系統(tǒng)在裝入一個(gè)用戶程序后,需要將用戶程序中的邏輯地址轉(zhuǎn)換為運(yùn)行時(shí)由機(jī)器直接尋址的物理地址,這個(gè)過(guò)程就稱為地址映射。只有把程序當(dāng)中的邏輯地址轉(zhuǎn)換為物理地址,才能正常運(yùn)行。38嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第38頁(yè)!(2)動(dòng)態(tài)地址映射采用動(dòng)態(tài)地址映射方式時(shí),當(dāng)用戶程序被裝入內(nèi)存時(shí),不對(duì)指令代碼做任何修改,而是在程序的運(yùn)行過(guò)程中,當(dāng)它需要訪問(wèn)內(nèi)存單元的時(shí)候,再來(lái)進(jìn)行地址轉(zhuǎn)換。地址轉(zhuǎn)換一般是由硬件的地址映射機(jī)制來(lái)完成的,通常的做法是設(shè)置一個(gè)基地址寄存器(或者叫重定位寄存器),當(dāng)一個(gè)任務(wù)被調(diào)度運(yùn)行時(shí),就把它所在分區(qū)的起始地址裝入到這個(gè)寄存器中。然后,在程序的運(yùn)行過(guò)程中,當(dāng)需要訪問(wèn)某個(gè)內(nèi)存單元時(shí),硬件就會(huì)自動(dòng)地將其中的邏輯地址加上基地址寄存器當(dāng)中的內(nèi)容,從而得到實(shí)際的物理地址,并按照這個(gè)物理地址去執(zhí)行。39嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第39頁(yè)!1.?dāng)?shù)據(jù)結(jié)構(gòu)在頁(yè)式存儲(chǔ)管理中,最主要的數(shù)據(jù)結(jié)構(gòu)有頁(yè)表(pagetable)和物理頁(yè)面表兩個(gè)。頁(yè)表給出了任務(wù)的邏輯頁(yè)面號(hào)與內(nèi)存中的物理頁(yè)面號(hào)之間的對(duì)應(yīng)關(guān)系。物理頁(yè)面表用來(lái)描述內(nèi)存空間當(dāng)中,各個(gè)物理頁(yè)面的使用分配狀況。物理頁(yè)面表可以采用位示圖或空閑頁(yè)面鏈表等方法來(lái)實(shí)現(xiàn)。40嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第40頁(yè)!3.地址映射在頁(yè)式存儲(chǔ)管理方式中,當(dāng)一個(gè)任務(wù)被加載到內(nèi)存后,連續(xù)的邏輯地址空間被劃分為一個(gè)個(gè)的邏輯頁(yè)面,這些邏輯頁(yè)面被裝入到不同的物理頁(yè)面當(dāng)中。在這種情況下,為了保證程序能夠正確地運(yùn)行,需要把程序中使用的邏輯地址轉(zhuǎn)換為內(nèi)存訪問(wèn)時(shí)的物理地址,完成地址映射。地址映射是以頁(yè)面為單位來(lái)進(jìn)行處理的。在進(jìn)行地址映射時(shí),首先分析邏輯地址,對(duì)于給定的一個(gè)邏輯地址,找到它所在的邏輯頁(yè)面,以及它在頁(yè)面內(nèi)的偏移地址;然后進(jìn)行頁(yè)表查找,根據(jù)邏輯頁(yè)面號(hào),從頁(yè)表中找到它所對(duì)應(yīng)的物理頁(yè)面號(hào);最后進(jìn)行物理地址合成,根據(jù)物理頁(yè)面號(hào)及頁(yè)內(nèi)偏移地址,確定最終的物理地址。應(yīng)注意的是,采用頁(yè)式存儲(chǔ)管理方式,程序必須全部裝入內(nèi)存,才能夠運(yùn)行。如果一個(gè)程序的規(guī)模大于當(dāng)前的空閑空間的總和,那么它就無(wú)法運(yùn)行。操作系統(tǒng)必須為每一個(gè)任務(wù)都維護(hù)一張頁(yè)表,開(kāi)銷比較大,當(dāng)簡(jiǎn)單的頁(yè)表結(jié)構(gòu)不能滿足應(yīng)用要求時(shí),必須設(shè)計(jì)出更為復(fù)雜的頁(yè)表結(jié)構(gòu),如多級(jí)頁(yè)表結(jié)構(gòu)、哈希頁(yè)表結(jié)構(gòu)、反置頁(yè)表等。41嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第41頁(yè)!采用虛擬頁(yè)式存儲(chǔ)管理方式,對(duì)于每一個(gè)頁(yè)表項(xiàng)來(lái)說(shuō),除了需要邏輯頁(yè)面號(hào)和與之相對(duì)應(yīng)的物理頁(yè)面號(hào)信息外,還需要增加包括駐留位、保護(hù)位、修改位和訪問(wèn)位等信息。42嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第42頁(yè)!1.I/O獨(dú)立編址在I/O獨(dú)立編址方式中,給設(shè)備控制器中的每一個(gè)寄存器,分配一個(gè)唯一的I/O端口地址,然后采用專門的I/O指令來(lái)對(duì)這些端口進(jìn)行操作。這些端口地址所構(gòu)成的地址空間是完全獨(dú)立的,與內(nèi)存的地址空間沒(méi)有任何關(guān)系,I/O設(shè)備不會(huì)去占用內(nèi)存的地址空間。而且在編寫程序時(shí),它們的指令形式是不一樣的,很容易區(qū)分內(nèi)存訪問(wèn)和I/O端口訪問(wèn)。

2.內(nèi)存映像編址在內(nèi)存映像編址方式中,把設(shè)備控制器當(dāng)中的每一個(gè)寄存器都映射為一個(gè)內(nèi)存單元,這些內(nèi)存單元專門用于I/O操作,而不能作為普通的內(nèi)存單元來(lái)使用。端口地址空間與內(nèi)存地址空間是統(tǒng)一編址的,端口地址空間是內(nèi)存地址空間的一部分。編程非常方便,無(wú)須專門的I/O指令。43嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第43頁(yè)!8.5.2I/O控制方式

I/O設(shè)備的控制方式主要有程序循環(huán)檢測(cè)、中斷驅(qū)動(dòng)和直接內(nèi)存訪問(wèn)三種形式。1.程序循環(huán)檢測(cè)方式采用程序循環(huán)檢測(cè)方式的I/O設(shè)備驅(qū)動(dòng)程序,在進(jìn)行I/O操作之前,CPU要循環(huán)地去檢測(cè)該I/O設(shè)備是否已經(jīng)就緒。如果是,CPU就向I/O設(shè)備控制器發(fā)出一條命令,啟動(dòng)這一次的I/O操作。然后,在這個(gè)操作的進(jìn)行過(guò)程中,CPU也要循環(huán)地去檢測(cè)I/O設(shè)備的當(dāng)前狀態(tài),看它是否己經(jīng)完成。在I/O操作的整個(gè)過(guò)程中,控制I/O設(shè)備的所有工作都是由CPU來(lái)完成的,一直占用著CPU,非常浪費(fèi)CPU的時(shí)間。程序循環(huán)檢測(cè)方式也稱為繁忙等待方式或輪詢方式。44嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第44頁(yè)!8.5.3I/O軟件為了管理好嵌入式系統(tǒng)中的各式各樣的I/O設(shè)備,在I/O軟件上通常采用分層的體系結(jié)構(gòu),一般來(lái)說(shuō),可以分中斷處理程序、I/O設(shè)備驅(qū)動(dòng)程序、設(shè)備獨(dú)立的I/O軟件和用戶空間的I/O軟件四個(gè)層次。其中,低層軟件是面向I/O硬件的,與I/O硬件特性密切相關(guān),它把I/O硬件同上層的軟件有效隔離開(kāi)來(lái)。而較高層的軟件是面向用戶的,為用戶提供一個(gè)友好、清晰、統(tǒng)一的編程接口。1.中斷處理程序中斷處理程序與I/O設(shè)備驅(qū)動(dòng)程序密切配合,用來(lái)完成特定的I/O操作。當(dāng)一個(gè)用戶程序需要某種I/O服務(wù)時(shí),它會(huì)去調(diào)用相應(yīng)的系統(tǒng)函數(shù),而這個(gè)函數(shù)又會(huì)去調(diào)用相應(yīng)的I/O設(shè)備驅(qū)動(dòng)程序。然后,在I/O設(shè)備驅(qū)動(dòng)程序中啟動(dòng)I/O操作,并且被阻塞起來(lái),直到這個(gè)I/O操作完成后,將產(chǎn)生一個(gè)中斷,并跳轉(zhuǎn)到相應(yīng)的中斷處理程序。之后在中斷處理程序中,將會(huì)喚醒被阻塞的I/O設(shè)備驅(qū)動(dòng)程序。在中斷處理過(guò)程中,需要執(zhí)行保存CPU的運(yùn)行上下文、為中斷服務(wù)子程序設(shè)置一個(gè)運(yùn)行環(huán)境、向中斷控制器發(fā)出應(yīng)答信號(hào)、執(zhí)行相應(yīng)的中斷服務(wù)子程序等操作,需要一定的時(shí)間開(kāi)銷。45嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第45頁(yè)!I/O系統(tǒng)通常會(huì)提供一個(gè)統(tǒng)一的調(diào)用接口,包含了一些常用的設(shè)備操作,如設(shè)備初始化、打開(kāi)設(shè)備、關(guān)閉設(shè)備、讀操作、寫操作、設(shè)備控制等。在I/O設(shè)備的命名規(guī)則上,可以采用統(tǒng)一命名的方式,然后由設(shè)備獨(dú)立的I/O軟件來(lái)負(fù)責(zé)把設(shè)備的符號(hào)名映射到相應(yīng)的設(shè)備驅(qū)動(dòng)程序。設(shè)備驅(qū)動(dòng)程序的管理通過(guò)驅(qū)動(dòng)程序地址表來(lái)實(shí)現(xiàn)。驅(qū)動(dòng)程序地址表中存放了各個(gè)設(shè)備驅(qū)動(dòng)程序的入口地址,可以通過(guò)此表來(lái)實(shí)現(xiàn)設(shè)備驅(qū)動(dòng)的動(dòng)態(tài)安裝與卸載。在實(shí)現(xiàn)數(shù)據(jù)的I/O操作時(shí),為了緩解CPU與外部設(shè)備之間速度不匹配的矛盾,提高資源的利用率,可以在內(nèi)存當(dāng)中開(kāi)辟一個(gè)存儲(chǔ)空間,作為緩沖區(qū),即采用緩沖技術(shù)。當(dāng)讀取I/O設(shè)備數(shù)據(jù)時(shí),不用去訪問(wèn)I/O外設(shè),直接到緩沖區(qū)中去查找。同樣,在往I/O設(shè)備中寫入數(shù)據(jù)時(shí),也是先寫到緩沖區(qū)中。這樣,I/O外設(shè)需要用到這些數(shù)據(jù)時(shí),可以直接從緩沖區(qū)中去取。緩沖技術(shù)可以分為單緩沖、雙緩沖、多緩沖和環(huán)形緩沖等形式。46嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第46頁(yè)!第8章思考題與習(xí)題1.嵌入式軟件有哪些特點(diǎn)?可以分為哪幾類?2.試分析無(wú)操作系統(tǒng)的嵌入式軟件和有操作系統(tǒng)的嵌入式軟件的同異。3.簡(jiǎn)述BootLoader的功能。4.簡(jiǎn)述嵌入式中間件的功能。5.簡(jiǎn)述嵌入式操作系統(tǒng)(EOS)的概念。6.嵌入式操作系統(tǒng)(EOS)可以分為哪幾類?7.簡(jiǎn)述VxWorks的功能與特點(diǎn)。8.簡(jiǎn)述嵌入式Linux的功能與特點(diǎn)。9.簡(jiǎn)述WindowsCE的功能與特點(diǎn)。10.簡(jiǎn)述μC/OS-II的功能與特點(diǎn)。47嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第47頁(yè)!21.什么是物理地址和邏輯地址?什么是地址映射?22.頁(yè)式存儲(chǔ)管理方式與分區(qū)存儲(chǔ)管理方式有什么不同?23.虛擬頁(yè)式存儲(chǔ)管理與頁(yè)式存儲(chǔ)管理有什么不同?24.查閱有關(guān)資料,了解OPT、LRU、LFU、FIFO等常用的頁(yè)面置換算法。25.I/O設(shè)備有幾種編址形式?各有什么特點(diǎn)。26.程序循環(huán)檢測(cè)、中斷驅(qū)動(dòng)和直接內(nèi)存訪問(wèn)三種I/O設(shè)備的控制方式有什么不同?27.簡(jiǎn)述I/O軟件的體系結(jié)構(gòu)。28.簡(jiǎn)述中斷處理程序、I/O設(shè)備驅(qū)動(dòng)程序、設(shè)備獨(dú)立的I/O軟件和用戶空間的I/O軟件的功能。48嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第48頁(yè)!(3)高實(shí)時(shí)性和可靠性要求具有實(shí)時(shí)處理的能力是許多嵌入式系統(tǒng)的基本要求,實(shí)時(shí)性要求軟件對(duì)外部事件做出反應(yīng)的時(shí)間必須要快,在某些情況下還要求是確定的、可重復(fù)實(shí)現(xiàn)的,不管系統(tǒng)當(dāng)時(shí)的內(nèi)部狀態(tài)如何,都是可以預(yù)測(cè)的。同時(shí),對(duì)于事件的處理一定要在限定的時(shí)間期限之前完成,否則就有可能引起系統(tǒng)的崩潰。在航天控制、核電站、工業(yè)機(jī)器人等實(shí)時(shí)系統(tǒng)對(duì)嵌入式軟件的可靠性要求是非常高的,一旦軟件出了問(wèn)題,其后果是非常嚴(yán)重的。(4)軟件固化存儲(chǔ)為了提高系統(tǒng)的啟動(dòng)速度、執(zhí)行速度和可靠性,嵌入式系統(tǒng)中的軟件一般都固化在存儲(chǔ)器芯片或微處理器中。49嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第49頁(yè)!8.1.3嵌入式軟件的體系結(jié)構(gòu)1.無(wú)操作系統(tǒng)的嵌入式軟件早期在嵌入式系統(tǒng)的應(yīng)用范圍主要集中在控制領(lǐng)域,硬件的配置比較低,嵌入式軟件的設(shè)計(jì)主要是以應(yīng)用為核心,應(yīng)用軟件直接建立在硬件上,沒(méi)有專門的操作系統(tǒng),軟件的規(guī)模也很小。無(wú)操作系統(tǒng)的嵌入式軟件主要采用循環(huán)輪轉(zhuǎn)和中斷(前后臺(tái))兩種實(shí)現(xiàn)方式。(1)循環(huán)輪轉(zhuǎn)方式循環(huán)輪轉(zhuǎn)方式的基本設(shè)計(jì)思想是:把系統(tǒng)的功能分解為若干個(gè)不同的任務(wù),放置在一個(gè)永不結(jié)束的循環(huán)語(yǔ)句當(dāng)中,按照時(shí)間順序逐一執(zhí)行。當(dāng)程序執(zhí)行完一輪后,又回到程序的開(kāi)頭重新執(zhí)行,循環(huán)不斷。50嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第50頁(yè)!(2)中斷方式中斷方式又稱為前后臺(tái)系統(tǒng)形式,系統(tǒng)在循環(huán)輪轉(zhuǎn)方式的基礎(chǔ)上增加了中斷處理功能。ISR(InterruptServiceRoutine,中斷服務(wù)程序)負(fù)責(zé)處理異步事件,即前臺(tái)程序(foreground),也稱為事件處理級(jí)程序。而后臺(tái)程序(background)是一個(gè)系統(tǒng)管理調(diào)度程序,一般采用的是一個(gè)無(wú)限的循環(huán)形式,負(fù)責(zé)掌管整個(gè)嵌入式系統(tǒng)軟、硬件資源的分配、管理以及任務(wù)的調(diào)度。后臺(tái)程序也稱為任務(wù)級(jí)程序。一般情形下,后臺(tái)程序會(huì)檢查每個(gè)任務(wù)是否具備運(yùn)行條件,通過(guò)一定的調(diào)度算法來(lái)完成相應(yīng)的操作。而一些對(duì)實(shí)時(shí)性有要求的操作通常由中斷服務(wù)程序來(lái)完成,大多數(shù)的中斷服務(wù)程序只做一些最基本的操作,如標(biāo)記中斷事件的發(fā)生等,其余的事情會(huì)延遲到后臺(tái)程序去完成。51嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第51頁(yè)!在嵌入式操作系統(tǒng)環(huán)境下,開(kāi)發(fā)一個(gè)復(fù)雜的應(yīng)用程序,通常可以按照軟件工程的思想,將整個(gè)程序分解為多個(gè)任務(wù)模塊,每個(gè)任務(wù)模塊的調(diào)試、修改幾乎不影響其他模塊。利用商業(yè)軟件提供的多任務(wù)調(diào)試環(huán)境,可大大提高系統(tǒng)軟件的開(kāi)發(fā)效率,降低開(kāi)發(fā)成本,縮短開(kāi)發(fā)周期。嵌入式操作系統(tǒng)本身是可以剪裁的,嵌入式系統(tǒng)外設(shè)、相關(guān)應(yīng)用也可以配置,所開(kāi)發(fā)的應(yīng)用軟件可以在不同的應(yīng)用環(huán)境、不同的處理器芯片之間移植,軟件構(gòu)件可復(fù)用,有利于系統(tǒng)的擴(kuò)展和移植。52嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第52頁(yè)!圖8.1.2嵌入式軟件體系結(jié)構(gòu)53嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第53頁(yè)!一般來(lái)說(shuō),BSP是針對(duì)某個(gè)特定的單板而設(shè)計(jì)的,系統(tǒng)都會(huì)提供相應(yīng)的演示版本的BSP(最小系統(tǒng)BSP)。BSP對(duì)于用戶(指系統(tǒng)開(kāi)發(fā)人員)是開(kāi)放的,用戶可以根據(jù)不同的硬件需求對(duì)其進(jìn)行改動(dòng)或二次開(kāi)發(fā)。在實(shí)際開(kāi)發(fā)一個(gè)嵌入式系統(tǒng)的時(shí)候,通??梢哉业揭粋€(gè)與自己的硬件系統(tǒng)相近的演示版本的BSP,并以此為基礎(chǔ),進(jìn)行修改和完善,以適應(yīng)不同單板的需求。BSP主要包括BootLoader(引導(dǎo)加載程序)和設(shè)備驅(qū)動(dòng)程序兩個(gè)方面的內(nèi)容。對(duì)于不同的嵌入式操作系統(tǒng),BSP的具體結(jié)構(gòu)和組成是不相同的。54嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第54頁(yè)!(1)片級(jí)初始化片級(jí)初始化是一個(gè)純硬件的初始化過(guò)程,把微處理器從上電時(shí)的默認(rèn)狀態(tài)逐步設(shè)置成系統(tǒng)所要求的工作狀態(tài)。片級(jí)初始化主要完成設(shè)置微處理器的核心寄存器和控制寄存器、微處理器的核心工作模式及其局部總線模式等初始化。(2)板級(jí)初始化板級(jí)初始化是一個(gè)同時(shí)包含有軟件和硬件在內(nèi)的初始化過(guò)程,通過(guò)正確地設(shè)置各種寄存器的內(nèi)容來(lái)完成微處理器以外的其他硬件設(shè)備的初始化。例如,初始化LED顯示設(shè)備、定時(shí)器、串口通信和內(nèi)存控制器,建立內(nèi)存空間的地址映射,設(shè)置中斷控制寄存器和某些軟件的數(shù)據(jù)結(jié)構(gòu)和參數(shù)等。(3)加載內(nèi)核將操作系統(tǒng)和應(yīng)用程序的映像從Flash存儲(chǔ)器復(fù)制到系統(tǒng)的內(nèi)存當(dāng)中,然后跳轉(zhuǎn)到系統(tǒng)內(nèi)核的條指令處繼續(xù)執(zhí)行。55嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第55頁(yè)!在分層結(jié)構(gòu)中,設(shè)備驅(qū)動(dòng)程序中的函數(shù)分為硬件接口和調(diào)用接口兩種類型。硬件接口直接跟硬件打交道的,直接去操作和控制硬件設(shè)備;調(diào)用接口不直接與硬件打交道,它們調(diào)用硬件接口當(dāng)中的函數(shù),與上層軟件(包括操作系統(tǒng)、中間件和應(yīng)用軟件)打交道的。分層結(jié)構(gòu)把所有與硬件有關(guān)的細(xì)節(jié)都封裝在硬件接口當(dāng)中,在硬件要升級(jí)時(shí),只需要改動(dòng)硬件接口當(dāng)中的函數(shù)即可,而上層接口當(dāng)中的函數(shù)不用做任何修改。在混合結(jié)構(gòu)中,上層接口和硬件接口的函數(shù)是混在一起、相互調(diào)用的,之間沒(méi)有明確的層次關(guān)系。56嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第56頁(yè)!8.2嵌入式操作系統(tǒng)基礎(chǔ)8.2.1嵌入式操作系統(tǒng)的功能在嵌入式系統(tǒng)中工作的操作系統(tǒng)稱為EOS(EmbeddedOperatingSystem,嵌入式操作系統(tǒng)),EOS的基本功能主要體現(xiàn)在以下兩個(gè)方面:1.構(gòu)成一個(gè)易于編程的虛擬機(jī)平臺(tái)EOS構(gòu)成一個(gè)虛擬機(jī)平臺(tái),EOS把底層的硬件細(xì)節(jié)封裝起來(lái),為運(yùn)行在它上面的軟件(如中間件軟件和各種應(yīng)用軟件)提供了一個(gè)抽象的編程接口。軟件開(kāi)發(fā)在這個(gè)編程接口的上進(jìn)行,而不直接與機(jī)器硬件層打交道。EOS所提供的編程接口實(shí)際上就是操作系統(tǒng)對(duì)外提供的系統(tǒng)調(diào)用函數(shù)。2.系統(tǒng)資源的管理者EOS是一個(gè)系統(tǒng)資源的管理者,負(fù)責(zé)管理系統(tǒng)當(dāng)中的各種軟硬件資源,如處理器、內(nèi)存、各種I/O設(shè)備、文件和數(shù)據(jù)等,使得整個(gè)系統(tǒng)能夠高效、可靠地運(yùn)轉(zhuǎn)。57嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第57頁(yè)!8.2.2嵌入式操作系統(tǒng)的分類EOS可以按照系統(tǒng)的類型、響應(yīng)時(shí)間和軟件結(jié)構(gòu)等不同的標(biāo)準(zhǔn)來(lái)分類。1.按系統(tǒng)的類型分類按照系統(tǒng)的類型,可以把EOS分為商業(yè)化系統(tǒng)、專用系統(tǒng)和開(kāi)放源代碼系統(tǒng)三大類。(1)商業(yè)化系統(tǒng)商業(yè)化的EOS有風(fēng)河公司(WindRiver)的VxWorks,微軟公司的WindowsCE,Palm公司的PalmOS等等,其特點(diǎn)是功能強(qiáng)大,性能穩(wěn)定,輔助軟件工具齊全,應(yīng)用范圍廣泛,但成本較高。(2)專用系統(tǒng)專用系統(tǒng)是一些專業(yè)廠家為本公司產(chǎn)品特制的嵌入式操作系統(tǒng),一般不提供給應(yīng)用開(kāi)發(fā)者使用。(3)開(kāi)放源代碼系統(tǒng)開(kāi)放源代碼的嵌入式操作系統(tǒng)有μC/OS和各類嵌入式Linux系統(tǒng)等,具有免費(fèi)、開(kāi)源、性能優(yōu)良、資源豐富、技術(shù)支持強(qiáng)等優(yōu)點(diǎn),是近年來(lái)發(fā)展迅速的一類操作系統(tǒng)。58嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第58頁(yè)!3.按軟件結(jié)構(gòu)分類按照軟件的體系結(jié)構(gòu),EOS可以分為單體結(jié)構(gòu)、分層結(jié)構(gòu)和微內(nèi)核結(jié)構(gòu)三大類,如8.2.1~8.2.3所示。(1)單體結(jié)構(gòu)單體結(jié)構(gòu)是一種常見(jiàn)的組織結(jié)構(gòu),嵌入式Linux操作系統(tǒng)、JbedRTOS、μC/OS-II和PDOS都屬于單體內(nèi)核系統(tǒng)。在單體結(jié)構(gòu)(monolithic)的操作系統(tǒng)中,中間件和設(shè)備驅(qū)動(dòng)程序通常就集成在系統(tǒng)內(nèi)核當(dāng)中,整個(gè)系統(tǒng)通常只有一個(gè)可執(zhí)行文件,里面包含了所有的功能組件。單體結(jié)構(gòu)的操作系統(tǒng)由一組功能模塊組成,系統(tǒng)的各個(gè)模塊之間可以相互調(diào)用,通信開(kāi)銷比較小,系統(tǒng)高度集成和相互關(guān)聯(lián),系統(tǒng)剪裁、修改、調(diào)試和維護(hù)不方便。59嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第59頁(yè)!采用分層結(jié)構(gòu)(layered)的操作系統(tǒng)內(nèi)部分為若干個(gè)層次(0~N),各個(gè)層次之間的調(diào)用關(guān)系是單向的,即某一層次上的代碼只能調(diào)用比它低層的代碼。分層結(jié)構(gòu)要求在每個(gè)層次上都要提供一組API接口函數(shù),增加了系統(tǒng)的額外開(kāi)銷,但系統(tǒng)的開(kāi)發(fā)和維護(hù)較為簡(jiǎn)單。典型代表有MS-DOS,其結(jié)構(gòu)就是一個(gè)有代表性的、組織良好的分層結(jié)構(gòu)。(3)微內(nèi)核結(jié)構(gòu)微內(nèi)核(microkernel)結(jié)構(gòu)把操作系統(tǒng)的大部分功能都剝離出去,在內(nèi)核中只保留最核心的功能單元(如進(jìn)程管理和存儲(chǔ)管理),大部分的系統(tǒng)功能都位于內(nèi)核之外,例如,將所有的設(shè)備驅(qū)動(dòng)程序都被置于內(nèi)核之外,如圖8.2.3所示。在微內(nèi)核操作系統(tǒng)中,大部分的系統(tǒng)功能被放置在內(nèi)核之外,客戶單元和服務(wù)器單元的內(nèi)存地址空間是相互獨(dú)立的,系統(tǒng)具有更高的安全性。新的功能組件也可以被動(dòng)態(tài)地添加進(jìn)來(lái),擴(kuò)展、調(diào)試、移植方便。在微內(nèi)核操作系統(tǒng)中,核內(nèi)組件與核外組件之間的通信方式是消息傳遞,而不是直接的函數(shù)調(diào)用,運(yùn)行速度可能會(huì)慢一些。另外,由于它們的內(nèi)存地址空間是相互獨(dú)立的,在切換的時(shí)候,也會(huì)增加額外的開(kāi)銷。60嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第60頁(yè)!8.2.3常見(jiàn)的嵌入式操作系統(tǒng)簡(jiǎn)介嵌入式操作系統(tǒng)是操作系統(tǒng)研究領(lǐng)域中的一個(gè)重要分支,有許多公司在從事相關(guān)方面的研究,開(kāi)發(fā)了數(shù)以百計(jì)的各具特色的嵌入式操作系統(tǒng)產(chǎn)品,其中比較有影響的系統(tǒng)有VxWorks、嵌入式Linux、WindowsCE、μC/OS-II和PalmOS等。1.VxWorks美國(guó)WindRiverSystem公司開(kāi)發(fā)的嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks采用基于微內(nèi)核的體系結(jié)構(gòu),整個(gè)系統(tǒng)由四百多個(gè)相對(duì)獨(dú)立、短小精練的目標(biāo)模塊組成,用戶可以根據(jù)自己的需要選擇適當(dāng)?shù)哪K,進(jìn)行裁減和配置。VxWorks采用GNU類型的編譯和調(diào)試器,專有的API函數(shù),支持x86、MotorolaMC68xxx、Coldfire、PowerPC、MIPS、ARM、i960等主流的32位處理器,具有良好的可靠性和卓越的實(shí)時(shí)性,是目前嵌入式系統(tǒng)領(lǐng)域中使用最廣泛、市場(chǎng)占有率最高的商業(yè)系統(tǒng)之一。61嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第61頁(yè)!2.嵌入式Linux嵌入式Linux(EmbeddedLinux)是指對(duì)標(biāo)準(zhǔn)Linux進(jìn)行小型化剪裁處理之后,可固化在存儲(chǔ)器或單片機(jī)中,適合于特定嵌入式應(yīng)用場(chǎng)合的專用Linux操作系統(tǒng)。常見(jiàn)的嵌入式Linux有μClinux、RT-Linux、Embedix和HardHatLinux等,具有如下特點(diǎn):●具有高性能、可裁剪的內(nèi)核,其獨(dú)特的模塊機(jī)制使用戶可以根據(jù)自己的需要,實(shí)時(shí)地將某些模塊插入到內(nèi)核或從內(nèi)核中移走,很適合于嵌入式系統(tǒng)的小型化的需要?!窬哂型晟频木W(wǎng)絡(luò)通信和文件管理機(jī)制,支持所有標(biāo)準(zhǔn)的Internet網(wǎng)絡(luò)協(xié)議,支持ext2,fat16,fat32,romfs等文件系統(tǒng)?!窨商峁┩暾墓ぞ哝湥═oolChain),利用GNU的gcc做編譯器,用gdb,kgdb,xgdb做調(diào)試工具,能夠方便地實(shí)現(xiàn)從操作系統(tǒng)到應(yīng)用軟件各個(gè)級(jí)別的調(diào)試?!袂度胧絃inux是開(kāi)放源碼的自由操作系統(tǒng),用戶可以根據(jù)自己的應(yīng)用需要方便地對(duì)內(nèi)核進(jìn)行修改和優(yōu)化。62嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第62頁(yè)!WindowsCE主要包含內(nèi)核模塊、內(nèi)核系統(tǒng)調(diào)用接口模塊、文件系統(tǒng)模塊、圖形窗口和事件子系統(tǒng)模塊和通信模塊五個(gè)功能模塊。其中:內(nèi)核模塊支持進(jìn)程和線程處理及內(nèi)存管理等基本服務(wù)。內(nèi)核系統(tǒng)調(diào)用接口模塊允許應(yīng)用軟件訪問(wèn)操作系統(tǒng)提供的服務(wù)。文件系統(tǒng)模塊支持DOS等格式的文件系統(tǒng)。圖形窗口和事件子系統(tǒng)模塊控制圖形顯示,并提供WindowsGUI圖形界面。通信模塊允許同其他的設(shè)備進(jìn)行信息交換。WindowsCE操作系統(tǒng)集成了大量的WindowsXPProfessional的特性,能提供與PC機(jī)類似的桌面、任務(wù)欄、窗口、圖標(biāo)、控件等圖形界面和各種應(yīng)用程序。熟悉Windows操作系統(tǒng)的用戶可以很快地使用基于WindowsCE的嵌入式設(shè)備。另外,微軟公司提供了VisualStudio.NET、EmbeddedVisualC++、EmbeddedVisualBasic等一組功能強(qiáng)大的應(yīng)用程序開(kāi)發(fā)工具,專門用于對(duì)WindowsCE操作系統(tǒng)的開(kāi)發(fā)。63嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第63頁(yè)!8.3嵌入式系統(tǒng)的任務(wù)管理8.3.1單道程序設(shè)計(jì)和多道程序設(shè)計(jì)嵌入式操作系統(tǒng)可以分為單道程序設(shè)計(jì)和多道程序設(shè)計(jì)(mufti-programming)兩種類型。1.單道程序設(shè)計(jì)類型采用單道程序設(shè)計(jì)的操作系統(tǒng)在任何時(shí)候只能有一個(gè)程序在運(yùn)行。例如:有兩個(gè)程序甲和乙,它們?cè)谶\(yùn)行過(guò)程中都要用到CPU和I/O設(shè)備。如圖8.3.1所示,圖中我們采用不同的方框來(lái)表示這兩個(gè)程序?qū)煞N資源的使用情況,方框的長(zhǎng)度表示使用的時(shí)間。在單道程序設(shè)計(jì)的環(huán)境下,在任何時(shí)候,系統(tǒng)中只能有一個(gè)程序在運(yùn)行,因此,甲和乙這兩個(gè)程序只能一個(gè)接一個(gè)的執(zhí)行。如圖8.3.1所示,首先執(zhí)行程序甲,從t0時(shí)刻開(kāi)始,到t6時(shí)刻結(jié)束。然后再執(zhí)行程序乙,從t6時(shí)刻開(kāi)始,一直到它所有的工作都已完成。64嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第64頁(yè)!圖8.3.1單道程序與多道程序的運(yùn)行過(guò)程65嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第65頁(yè)!CPU上下文:程序在運(yùn)行時(shí),CPU中含有PC(ProgramCounter,程序計(jì)數(shù)器)、PSW(ProgramStatusWord,程序狀態(tài)字)、通用寄存器、段寄存器、棧指針寄存器等各種寄存器的當(dāng)前值內(nèi)容,例如:在PC中記錄的將要取出的指令的地址,在PSW中用于記錄處理器的運(yùn)行狀態(tài)信息,通用寄存器存放的數(shù)據(jù)或地址;段寄存器存放的程序中各個(gè)段的地址;棧指針寄存器記錄的棧頂?shù)漠?dāng)前位置。一組系統(tǒng)資源:包括操作系統(tǒng)用來(lái)管理進(jìn)程的數(shù)據(jù)結(jié)構(gòu)、進(jìn)程的內(nèi)存地址空間、進(jìn)程正在使用的文件等。總而言之,進(jìn)程包含了正在運(yùn)行的一個(gè)程序的所有狀態(tài)信息。進(jìn)程具有動(dòng)態(tài)性,進(jìn)程是一個(gè)正在運(yùn)行的程序,程序的運(yùn)行狀態(tài)都在不斷地變化,如PC寄存器的值、堆和棧的內(nèi)容、通用寄存器存放數(shù)據(jù)和地址等。進(jìn)程具有獨(dú)立性,一個(gè)進(jìn)程是一個(gè)獨(dú)立的實(shí)體,占有計(jì)算機(jī)的系統(tǒng)資源,每個(gè)進(jìn)程都有自己的運(yùn)行上下文和內(nèi)部狀態(tài),在它運(yùn)行的時(shí)候獨(dú)立于其他的進(jìn)程。進(jìn)程具有并發(fā)性,在系統(tǒng)中同時(shí)有多個(gè)進(jìn)程存在,它們相互獨(dú)立地運(yùn)行。66嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第66頁(yè)!圖8.3.2線程與進(jìn)程的資源關(guān)系67嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第67頁(yè)!8.3.3任務(wù)的實(shí)現(xiàn)1.任務(wù)的層次結(jié)構(gòu)任務(wù)的層次結(jié)構(gòu)如圖8.3.3所示。在多道程序的嵌入式操作系統(tǒng)中,同時(shí)存在著多個(gè)任務(wù),嵌入式內(nèi)核啟動(dòng)時(shí),只有一個(gè)任務(wù)存在,然后由該任務(wù)派生出其他所有任務(wù),這些任務(wù)采用層狀結(jié)構(gòu),存在著父子關(guān)系。68嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第68頁(yè)!2.任務(wù)的創(chuàng)建與終止(1)任務(wù)的創(chuàng)建在一個(gè)嵌入式操作系統(tǒng)中,在系統(tǒng)初始化、任務(wù)運(yùn)行過(guò)程中、人機(jī)交互等過(guò)程中都可以創(chuàng)建任務(wù)。在系統(tǒng)初始化時(shí),一般都會(huì)創(chuàng)建系統(tǒng)與用戶進(jìn)行交互的一些前臺(tái)任務(wù),以及完成鍵盤掃描、系統(tǒng)狀態(tài)檢測(cè)、時(shí)間統(tǒng)計(jì)等一些特定功能的后臺(tái)任務(wù)。在任務(wù)運(yùn)行過(guò)程中,也能夠使用相應(yīng)的系統(tǒng)調(diào)用來(lái)創(chuàng)建新的任務(wù),以幫助它完成自己的工作。在一些具有交互功能的嵌入式系統(tǒng)中,用戶可以通過(guò)輸入命令或單擊圖標(biāo)的方式,讓系統(tǒng)啟動(dòng)一個(gè)新的任務(wù)。創(chuàng)建任務(wù)的基本方法是在一個(gè)已經(jīng)存在的任務(wù)當(dāng)中,通過(guò)調(diào)用相應(yīng)的系統(tǒng)函數(shù)來(lái)創(chuàng)建一個(gè)新的任務(wù)。在嵌入式操作系統(tǒng)當(dāng)中,任務(wù)的創(chuàng)建主要采用fork/exec和spawn兩種模型。fork/exec模型源于IEEE/ISOPOSIX1003.1標(biāo)準(zhǔn),而spawn模型是從它派生出來(lái)的。69嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第69頁(yè)!在一些操作系統(tǒng)中可以提供一些系統(tǒng)調(diào)用函數(shù),用來(lái)把一個(gè)任務(wù)從系統(tǒng)中清除出局,稱為被其他任務(wù)踢出。在一些嵌入式系統(tǒng)中,某些任務(wù)被設(shè)計(jì)為“死循環(huán)”的模式,任務(wù)不會(huì)自行終止。3.任務(wù)的狀態(tài)在多道程序系統(tǒng)中,任務(wù)是獨(dú)立運(yùn)行的實(shí)體,需要競(jìng)爭(zhēng)系統(tǒng)資源,而任務(wù)所擁有的資源是在不斷變化中的,使得任務(wù)的狀態(tài)也在不斷的變化。一般來(lái)說(shuō),任務(wù)具有運(yùn)行(running)、就緒(ready)和阻塞(blocked)三種基本狀態(tài)。任務(wù)在運(yùn)行狀態(tài)時(shí)占有CPU并在CPU上運(yùn)行,在任何一個(gè)時(shí)刻,處于運(yùn)行狀態(tài)的任務(wù)個(gè)數(shù)必須小于或等于CPU的數(shù)目。如果在一個(gè)系統(tǒng)中只有一個(gè)CPU的話,那么最多只能有一個(gè)任務(wù)處于運(yùn)行狀態(tài)。當(dāng)一個(gè)任務(wù)已具備運(yùn)行條件,但由于CPU正在運(yùn)行其他的任務(wù),暫時(shí)不能運(yùn)行該任務(wù)時(shí),稱為就緒狀態(tài)。不過(guò),只要把CPU分給該任務(wù),它就能夠立刻執(zhí)行。70嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第70頁(yè)!4.任務(wù)控制塊TCB(TaskControlBlock,任務(wù)控制塊)是在操作系統(tǒng)當(dāng)中用來(lái)描述和管理一個(gè)任務(wù)的數(shù)據(jù)結(jié)構(gòu)。通過(guò)對(duì)各個(gè)任務(wù)的TCB的操作來(lái)實(shí)現(xiàn)任務(wù)管理。利用TCB這個(gè)數(shù)據(jù)結(jié)構(gòu)可以描述任務(wù)的基本情況,以及它的運(yùn)行變化過(guò)程??梢园裈CB看成是任務(wù)存在的唯一標(biāo)志。當(dāng)需要?jiǎng)?chuàng)建一個(gè)新任務(wù)的時(shí)候,就為它生成一個(gè)TCB,并初始化這個(gè)TCB的內(nèi)容;當(dāng)需要終止一個(gè)任務(wù)的時(shí)候,只要回收它的TCB即可。對(duì)任務(wù)的組織和管理可以通過(guò)對(duì)它們的TCB的組織和管理來(lái)實(shí)現(xiàn)。TCB主要包括任務(wù)的管理信息、CPU上下文信息、資源管理信息等內(nèi)容。(1)任務(wù)的管理信息任務(wù)的管理信息包括任務(wù)的標(biāo)識(shí)ID、任務(wù)的狀態(tài)、任務(wù)的優(yōu)先級(jí)、任務(wù)的調(diào)度信息、任務(wù)的時(shí)間統(tǒng)計(jì)信息、各種隊(duì)列指針等。71嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第71頁(yè)!5.任務(wù)切換任務(wù)切換(contextswitching)是指一個(gè)任務(wù)正在CPU上運(yùn)行,由于某種原因,系統(tǒng)需要調(diào)度另一個(gè)任務(wù)去運(yùn)行,那么這時(shí)就需要進(jìn)行把當(dāng)前任務(wù)的運(yùn)行上下文保存起來(lái),并設(shè)置新任務(wù)的上下文,這一過(guò)程稱為任務(wù)切換。任務(wù)切換通常包含有以下幾個(gè)基本步驟:(1)將處理器的運(yùn)行上下文保存在當(dāng)前任務(wù)的TCB中;(2)更新當(dāng)前任務(wù)的狀態(tài),從運(yùn)行狀態(tài)變?yōu)榫途w狀態(tài)或阻塞狀態(tài)。(3)按照一定的策略,從所有處于就緒狀態(tài)的任務(wù)中選擇一個(gè)去運(yùn)行。(4)修改新任務(wù)的狀態(tài),從就緒狀態(tài)變成運(yùn)行狀態(tài)。(5)根據(jù)新任務(wù)的TCB的內(nèi)容,恢復(fù)它的運(yùn)行上下文環(huán)境。72嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第72頁(yè)!8.3.4任務(wù)的調(diào)度1.任務(wù)調(diào)度概述在多道程序操作系統(tǒng)中,當(dāng)有兩個(gè)或多個(gè)任務(wù)同時(shí)處于就緒狀態(tài)時(shí),而系統(tǒng)中只有一個(gè)CPU而且這個(gè)CPU己經(jīng)空閑下來(lái)了,就會(huì)出現(xiàn)多個(gè)任務(wù)同時(shí)去競(jìng)爭(zhēng)這個(gè)CPU的情況。通常利用調(diào)度器(scheduler)選擇就緒隊(duì)列中的那些任務(wù)中的一個(gè)去運(yùn)行,調(diào)度器是CPU這個(gè)資源的管理者。調(diào)度器在決策過(guò)程中所采用的算法稱為調(diào)度算法。一般來(lái)說(shuō),在一個(gè)新的任務(wù)被創(chuàng)建時(shí)、在一個(gè)任務(wù)運(yùn)行結(jié)束時(shí)、在一個(gè)任務(wù)由于I/O操作、信號(hào)量或其他原因被阻塞時(shí)、在一個(gè)I/O中斷發(fā)生時(shí)、在一個(gè)時(shí)鐘中斷發(fā)生時(shí)這五種調(diào)度時(shí)機(jī)都可能會(huì)發(fā)生任務(wù)的調(diào)度。任務(wù)調(diào)度存在可搶占調(diào)度(preemptive)和不可搶占調(diào)度(nonpreemptive)兩種調(diào)度方式。(1)在可搶占調(diào)度方式,當(dāng)一個(gè)任務(wù)正在運(yùn)行的時(shí)候,出現(xiàn)調(diào)度時(shí)機(jī)當(dāng)中的五種情況之一,都有可能會(huì)發(fā)生調(diào)度。調(diào)度程序可以去打斷它,并安排另外的任務(wù)去運(yùn)行。實(shí)時(shí)操作系統(tǒng)大都采用可搶占的調(diào)度方式。73嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第73頁(yè)!●公平性(fairness)是指大致相當(dāng)?shù)膬蓚€(gè)任務(wù)所得到的CPU時(shí)間也應(yīng)該是大致相同的。另外,要防止饑餓(starvation)情況出現(xiàn),即某一個(gè)任務(wù)始終得不到處理器去運(yùn)行。●均衡性(balance)是指要盡可能使整個(gè)系統(tǒng)的各個(gè)部分(CPU,I/O)都忙起來(lái),提高系統(tǒng)資源的使用效率?!駟挝粫r(shí)間內(nèi)完成的任務(wù)數(shù)量稱為吞吐量(throughput)。對(duì)于一個(gè)調(diào)度算法來(lái)說(shuō),這些指標(biāo)中一些是共存的,而另一些是相互牽制的,這些指標(biāo)不可能全部都實(shí)現(xiàn),而是需要根據(jù)系統(tǒng)的要求,綜合權(quán)衡和折中選擇。74嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第74頁(yè)!3.短作業(yè)優(yōu)先算法(ShortestJobFirst,SJF)在SJF(ShortestJobFirst,短作業(yè)優(yōu)先算法)中,在各個(gè)任務(wù)在開(kāi)始執(zhí)行前,事先預(yù)計(jì)好各任務(wù)的執(zhí)行時(shí)間,調(diào)度算法根據(jù)這些預(yù)計(jì)時(shí)間,安排執(zhí)行時(shí)間較短的任務(wù)優(yōu)先執(zhí)行??梢宰C明,對(duì)于一批同時(shí)到達(dá)的任務(wù),采用SJF算法將得到一個(gè)最小的平均周轉(zhuǎn)時(shí)間。SJF算法有不可搶占方式和可搶占方式兩種實(shí)現(xiàn)方案。在不可搶占方式,只有任務(wù)運(yùn)行完畢或者是被阻塞時(shí),才會(huì)讓出CPU進(jìn)行新的調(diào)度。而在可搶占方式,當(dāng)前任務(wù)正在運(yùn)行的時(shí)候,來(lái)了一個(gè)比它執(zhí)行時(shí)間更短的任務(wù),而且它的運(yùn)行時(shí)間要小于當(dāng)前正在運(yùn)行的任務(wù)的剩余時(shí)間,那么這個(gè)新任務(wù)就會(huì)搶占CPU去運(yùn)行。這種方法也稱為SRTF(ShortestRemainingTimeFirst,最短剩余時(shí)間優(yōu)先算法)75嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第75頁(yè)!4.時(shí)間片輪轉(zhuǎn)算法(RoundRobin,RR)RR算法如圖8.3.6所示。在RR(RoundRobin,時(shí)間片輪轉(zhuǎn)算法)中,把系統(tǒng)當(dāng)中的所有就緒任務(wù)按照先來(lái)先服務(wù)的原則進(jìn)行排列,然后,在每次調(diào)度的時(shí)候,處理器分派給隊(duì)列當(dāng)中的個(gè)任務(wù)一小段CPU執(zhí)行時(shí)間(timeslice,時(shí)間片)。當(dāng)這個(gè)時(shí)間片結(jié)束的時(shí)候,如果任務(wù)還沒(méi)有執(zhí)行完的話,將會(huì)發(fā)生時(shí)鐘中斷,調(diào)度器將會(huì)暫停當(dāng)前任務(wù)的執(zhí)行,并把這個(gè)任務(wù)送到就緒隊(duì)列的末尾,然后再執(zhí)行當(dāng)前的隊(duì)列的個(gè)任務(wù)。如果一個(gè)任務(wù)在分配給它的時(shí)間片結(jié)束前就已經(jīng)運(yùn)行結(jié)束了或者是被阻塞了,那么它就會(huì)立即讓出CPU給其他的任務(wù)。采用RR算法,各個(gè)就緒任務(wù)平均地分配CPU的使用時(shí)間,例如有n個(gè)就緒任務(wù),那么每個(gè)任務(wù)將得到1/n的CPU時(shí)間。采用RR算法時(shí),時(shí)間片q既不能太大,也不能太小。q太大,每個(gè)任務(wù)都在一個(gè)時(shí)間片內(nèi)完成,這就失去了RR算法的意義。如果q太小,每個(gè)任務(wù)都需要更多的時(shí)間片才能運(yùn)行完,增加了在任務(wù)之間的切換次數(shù),增大了系統(tǒng)的管理開(kāi)銷,降低了CPU的使用效率。

76嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第76頁(yè)!5.優(yōu)先級(jí)算法(priority)在優(yōu)先級(jí)調(diào)度算法(priority)中,給每一個(gè)任務(wù)都設(shè)置一個(gè)優(yōu)先級(jí),然后在任務(wù)調(diào)度的時(shí)候,在所有處于就緒狀態(tài)的任務(wù)中選擇優(yōu)先級(jí)最高的那個(gè)任務(wù)去運(yùn)行。例如,在短作業(yè)優(yōu)先算法中,以時(shí)間為優(yōu)先級(jí),運(yùn)行時(shí)間越短,優(yōu)先級(jí)越高。優(yōu)先級(jí)算法可以分為可搶占和不可搶占兩種方式。在可搶占方式中,當(dāng)一個(gè)任務(wù)正在運(yùn)行的時(shí)候,如果這時(shí)來(lái)了一個(gè)新的任務(wù),其優(yōu)先級(jí)更高,則立即搶占CPU去運(yùn)行這個(gè)新任務(wù)。而不可搶占方式則是需要等當(dāng)前任務(wù)運(yùn)行完后再?zèng)Q定。可以采用靜態(tài)方式和動(dòng)態(tài)方式確定任務(wù)的優(yōu)先級(jí)。靜態(tài)優(yōu)先級(jí)方式根據(jù)任務(wù)的類型或重要性,在創(chuàng)建任務(wù)的時(shí)候就確定任務(wù)的優(yōu)先級(jí),并且一直保持不變直到任務(wù)結(jié)束。動(dòng)態(tài)優(yōu)先級(jí)方式在創(chuàng)建任務(wù)的時(shí)候確定任務(wù)的優(yōu)先級(jí),但是該優(yōu)先級(jí)可以在任務(wù)的運(yùn)行過(guò)程中動(dòng)態(tài)改變,以便獲得更好的調(diào)度性能。動(dòng)態(tài)優(yōu)先級(jí)方式可以克服在靜態(tài)優(yōu)先級(jí)方式中高優(yōu)先級(jí)的任務(wù)一直占用著CPU,而那些低優(yōu)先級(jí)的任務(wù)可能會(huì)長(zhǎng)時(shí)間地得不到CPU的情況。在優(yōu)先級(jí)算法中,對(duì)于優(yōu)先級(jí)相同的兩個(gè)任務(wù),通常是把任務(wù)按照不同的優(yōu)先級(jí)進(jìn)行分組,然后在不同組的任務(wù)之間使用優(yōu)先級(jí)算法,而在同一組的各個(gè)任務(wù)之間使用時(shí)間片輪轉(zhuǎn)法。77嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第77頁(yè)!圖8.3.7RTOS任務(wù)模型78嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第78頁(yè)!3.最早期限優(yōu)先算法(EarliestDeadlineFirst,EDF)EDF(EarliestDeadlineFirst,最早期限優(yōu)先)調(diào)度算法是一種動(dòng)態(tài)優(yōu)先級(jí)調(diào)度算法。EDF算法的基本思路是:根據(jù)任務(wù)的截止時(shí)間來(lái)確定其優(yōu)先級(jí),對(duì)于時(shí)間期限最近的任務(wù),分配最高的優(yōu)先級(jí)。當(dāng)有一個(gè)新的任務(wù)處于就緒狀態(tài)時(shí),各個(gè)任務(wù)的優(yōu)先級(jí)就有可能要進(jìn)行調(diào)整。EDF算法假設(shè)條件除了它不要求系統(tǒng)中的任務(wù)都必須是周期任務(wù)外,其他的假設(shè)條件與RMS相同。EDF算法可調(diào)度上限為100%。對(duì)于給定的一組任務(wù),只要它們的CPU使用率小于或等于1,EDF就能找到合適的調(diào)度順序,使得每個(gè)任務(wù)都能在自己的時(shí)間期限內(nèi)完成。79嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第79頁(yè)!在嵌入式微處理器中,MMU(MemoryManagementUnit,存儲(chǔ)管理單元)提供了一種內(nèi)存保護(hù)的硬件機(jī)制。內(nèi)存保護(hù)用來(lái)防止地址越界和防止操作越權(quán)。采用內(nèi)存保護(hù)機(jī)制的每個(gè)應(yīng)用程序都有自己獨(dú)立的地址空間,當(dāng)一個(gè)應(yīng)用程序要訪問(wèn)某個(gè)內(nèi)存單元時(shí),由硬件檢查該地址是否在限定的地址空間內(nèi),如果不是的話就要進(jìn)行地址越界處理;二是防對(duì)于允許多個(gè)應(yīng)用程序共享的某塊存儲(chǔ)區(qū)域,每個(gè)應(yīng)用程序都有自己的訪問(wèn)權(quán)限,如果違反了權(quán)限規(guī)定,則要進(jìn)行操作越權(quán)處理。操作系統(tǒng)通常利用MMU來(lái)實(shí)現(xiàn)系統(tǒng)內(nèi)核與應(yīng)用程序的隔離,以及應(yīng)用程序與應(yīng)用程序之間的隔離。防止應(yīng)用程序去破壞操作系統(tǒng)和其他應(yīng)用程序的代碼和數(shù)據(jù),防止應(yīng)用程序?qū)τ布闹苯釉L問(wèn)。MMU通常只在一些對(duì)安全性和可靠性的要求比較高、系統(tǒng)比較復(fù)雜的嵌入式系統(tǒng)中存在。80嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第80頁(yè)!對(duì)于實(shí)時(shí)系統(tǒng)來(lái)說(shuō),實(shí)模式方案簡(jiǎn)單、存儲(chǔ)管理的開(kāi)銷確定,比較適合于規(guī)模較小、簡(jiǎn)單和實(shí)時(shí)性要求較高的系統(tǒng)。其缺點(diǎn)是沒(méi)有存儲(chǔ)保護(hù)、安全性差,在應(yīng)用程序中出現(xiàn)的任何一個(gè)小錯(cuò)誤或蓄意攻擊都有可能導(dǎo)致整個(gè)系統(tǒng)的崩潰。2.保護(hù)模式存儲(chǔ)管理在保護(hù)模式存儲(chǔ)管理方式中,微處理器必須具有MMU硬件并啟用它。在保護(hù)模式存儲(chǔ)管理方式中,系統(tǒng)內(nèi)核和用戶程序有各自獨(dú)立的地址空間,操作系統(tǒng)和MMU共同完成邏輯地址到物理地址的映射;每個(gè)應(yīng)用程序只能訪問(wèn)自己的地址空間,對(duì)于共享的內(nèi)存區(qū)域,也必須按照規(guī)定的權(quán)限規(guī)則來(lái)訪問(wèn),具有存儲(chǔ)保護(hù)功能。保護(hù)模式存儲(chǔ)管理方式的安全性和可靠性較好,適合于規(guī)模較大、較復(fù)雜和實(shí)時(shí)性要求不太高的系統(tǒng)。81嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ)共94頁(yè),您現(xiàn)在瀏覽的是第81頁(yè)!

2.可變分區(qū)存儲(chǔ)管理采用可變分區(qū)存儲(chǔ)管理方法時(shí),各分區(qū)不是預(yù)先劃分好的固定區(qū)域,而是系統(tǒng)動(dòng)態(tài)創(chuàng)建的。在系統(tǒng)生成后,操作系統(tǒng)會(huì)占用內(nèi)存的一部分空間,通常放在內(nèi)存地址的最低端,其余的空間則成為一個(gè)完整的大空閑區(qū)。在裝入一個(gè)程序時(shí),系統(tǒng)將根據(jù)它的需求和內(nèi)存空間的使用情況,從這個(gè)空閑區(qū)當(dāng)中劃出一塊來(lái),分配給它,當(dāng)程序運(yùn)行結(jié)束后會(huì)釋放所占用的存儲(chǔ)區(qū)域。系統(tǒng)通過(guò)對(duì)內(nèi)存的分配和回收,將一個(gè)完整的空閑區(qū)劃分成若干個(gè)占用區(qū)和空閑區(qū)。與固定分區(qū)相比,可變分區(qū)存儲(chǔ)管理的分區(qū)的個(gè)數(shù)、位置和大小都是隨著任務(wù)的進(jìn)出而動(dòng)態(tài)變化的,非常靈活。每個(gè)分區(qū)都是按需分配的,分區(qū)的大小正好等于任務(wù)的大小。這樣就避免了在固定

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論