嵌入式系統(tǒng)技術:第九講 嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎_第1頁
嵌入式系統(tǒng)技術:第九講 嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎_第2頁
嵌入式系統(tǒng)技術:第九講 嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎_第3頁
嵌入式系統(tǒng)技術:第九講 嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎_第4頁
嵌入式系統(tǒng)技術:第九講 嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

CHAPTER

9嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎2022/12/242內容提要嵌入式軟件基礎嵌入式操作系統(tǒng)基礎嵌入式系統(tǒng)的任務管理嵌入式系統(tǒng)的存儲管理I/O設備管理2022/12/243內容提要嵌入式軟件基礎嵌入式操作系統(tǒng)基礎嵌入式系統(tǒng)的任務管理嵌入式系統(tǒng)的存儲管理I/O設備管理2022/12/244嵌入式軟件的特點應用在嵌入式計算機系統(tǒng)當中的各種軟件統(tǒng)稱為嵌入式軟件,作為嵌入式系統(tǒng)的一個組成部分,目前嵌入式軟件的種類和規(guī)模都得到了極大的發(fā)展,形成了一個完整、獨立的體系。除了具有通用軟件的一般特性,同時還具有一些與嵌入式系統(tǒng)密切相關的特點:(1)規(guī)模較小嵌入式系統(tǒng)的資源有限,要求嵌入式軟件必須盡可能地精簡。(2)開發(fā)難度大硬件資源的限制、涉及到底層軟件的開發(fā)、運行環(huán)境和開發(fā)環(huán)境復雜(3)高實時性和可靠性要求具有實時處理的能力是許多嵌入式系統(tǒng)的基本要求(4)軟件固化存儲嵌入式系統(tǒng)中的軟件一般都固化在存儲器芯片或微處理器中2022/12/245嵌入式軟件的分類1.系統(tǒng)軟件控制和管理嵌入式系統(tǒng)資源,為嵌入式應用提供支持的各種軟件,如設備驅動程序、嵌入式操作系統(tǒng)、嵌入式中間件等。2.應用軟件應用軟件是嵌入式系統(tǒng)功能的體現(xiàn),它定義了嵌入式設備的主要功能和用途,并負責與用戶進行交互。如手機軟件、MP3播放軟件、電子地圖軟件等,一般面向于特定的應用領域。3.支撐軟件支撐軟件指輔助軟件開發(fā)的工具軟件,如系統(tǒng)分析設計工具、在線仿真工具、交叉編譯器、源程序模擬器和配置管理工具等。在嵌入式系統(tǒng)當中,系統(tǒng)軟件和應用軟件運行在目標平臺的(即嵌入式設備上),而對于各種軟件開發(fā)工具來說,它們大部分都運行在開發(fā)平臺(PC機)上,運行Windows或Linux操作系統(tǒng)。2022/12/246嵌入式軟件的體系結構1.無操作系統(tǒng)的嵌入式軟件早期在嵌入式系統(tǒng)的應用范圍主要集中在控制領域,硬件的配置比較低,嵌入式軟件的設計主要是以應用為核心,應用軟件直接建立在硬件上,沒有專門的操作系統(tǒng),軟件的規(guī)模也很小。主要有循環(huán)輪轉和中斷(前后臺)兩種實現(xiàn)方式。(1)循環(huán)輪轉方式把系統(tǒng)的功能分解為若干個不同的任務,放置在一個永不結束的循環(huán)語句當中,按照時間順序逐一執(zhí)行。當程序執(zhí)行完一輪后,又回到程序的開頭重新執(zhí)行,循環(huán)不斷。循環(huán)輪轉方式的程序簡單、直觀、開銷小、可預測。不需要任務之間的調度和切換,其程序的代碼都是固定的,函數(shù)之間的調用關系也是明確的,整個系統(tǒng)的執(zhí)行過程是可預測的。循環(huán)輪轉方式的缺點是程序必須按順序執(zhí)行,無法處理異步事件,缺乏并行處理的能力。缺乏硬件上的時間控制機制,無法實現(xiàn)定時功能。2022/12/247嵌入式軟件的體系結構1.無操作系統(tǒng)的嵌入式軟件(2)中斷方式中斷方式又稱為前后臺系統(tǒng)形式,系統(tǒng)在循環(huán)輪轉方式的基礎上增加了中斷處理功能。ISR(InterruptServiceRoutine,中斷服務程序)負責處理異步事件,即前臺程序(foreground),也稱為事件處理級程序。而后臺程序(background)是一個系統(tǒng)管理調度程序,一般采用的是一個無限的循環(huán)形式,負責掌管整個嵌入式系統(tǒng)軟、硬件資源的分配、管理以及任務的調度。后臺程序也稱為任務級程序。一般情形下,后臺程序會檢查每個任務是否具備運行條件,通過一定的調度算法來完成相應的操作。而一些對實時性有要求的操作通常由中斷服務程序來完成,大多數(shù)的中斷服務程序只做一些最基本的操作,如標記中斷事件的發(fā)生等,其余的事情會延遲到后臺程序去完成。2022/12/248嵌入式軟件的體系結構2.有操作系統(tǒng)的嵌入式軟件從20世紀80年代開始,操作系統(tǒng)出現(xiàn)在嵌入式系統(tǒng)上。如今,嵌入式操作系統(tǒng)在嵌入式系統(tǒng)中廣泛應用,尤其是在功能復雜、系統(tǒng)龐大的應用中顯得愈來愈重要。在應用軟件開發(fā)時,程序員不是直接面對嵌入式硬件設備,而是采用一些嵌入式軟件開發(fā)環(huán)境,在操作系統(tǒng)的基礎上編寫程序。在控制系統(tǒng)中,采用前后臺系統(tǒng)體系結構的軟件,在遇到強干擾時,可能會使應用程序產生異常、出錯,甚至死循環(huán)的現(xiàn)象,從而造成系統(tǒng)的崩潰。而采用嵌入式操作系統(tǒng)管理的系統(tǒng),在遇到強干擾時,可能只會引起系統(tǒng)中的某一個進程被破壞,但這可以通過系統(tǒng)的監(jiān)控進程對其進行修復,系統(tǒng)具有自愈能力,不會造成系統(tǒng)崩潰。嵌入式操作系統(tǒng)本身是可以剪裁的,嵌入式系統(tǒng)外設、相關應用也可以配置,所開發(fā)的應用軟件可以在不同的應用環(huán)境、不同的處理器芯片之間移植,軟件構件可復用,有利于系統(tǒng)的擴展和移植。2022/12/249嵌入式軟件的體系結構2.有操作系統(tǒng)的嵌入式軟件嵌入式軟件的體系結構圖如圖所示。2022/12/2410嵌入式系統(tǒng)的設備驅動嵌入式系統(tǒng)的設備驅動層用來完成嵌入式系統(tǒng)硬件設備所需要的一些軟件初始化和管理。直接對硬件進行管理和控制,并為上層軟件提供所需驅動支持。1.板級支持包設備驅動層也稱為BSP(BoardSupportPackage),在BSP中把所有與硬件相關的代碼都封裝起來,為操作系統(tǒng)提供一個虛擬的硬件平臺。BSP中,使用一組定義好的編程接口進行交互,并通過BSP來訪問真正的硬件。BSP類似于PC系統(tǒng)中的BIOS和驅動程序,把嵌入式操作系統(tǒng)與具體的硬件平臺隔離開。一般來說,BSP是針對某個特定的單板而設計的,系統(tǒng)都會提供相應的演示版本的BSP(最小系統(tǒng)BSP)。BSP對于用戶是開放的,用戶可以根據(jù)不同的硬件需求對其進行改動或二次開發(fā)。在實際開發(fā)一個嵌入式系統(tǒng)的時候,通常可以找到一個與自己的硬件系統(tǒng)相近的演示版本的BSP,并以此為基礎,進行修改和完善,以適應不同單板的需求。BSP主要包括BootLoader(引導加載程序)和設備驅動程序兩個方面的內容。對于不同的嵌入式操作系統(tǒng),BSP的具體結構和組成是不相同的。2022/12/2411嵌入式系統(tǒng)的設備驅動2.BootLoader(引導加載程序)BootLoader是在操作系統(tǒng)內核運行之前運行的一小段程序。通過這段程序,初始化硬件設備、建立內存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境設置到一個合適的狀態(tài),以便為最終調用操作系統(tǒng)內核做好準備。即用來完成整個系統(tǒng)的加載啟動任務。通常在系統(tǒng)上電或復位時,BootLoader程序從地址0x00000000處開始執(zhí)行。BootLoader的功能與嵌入式系統(tǒng)的硬件平臺直接相關,不同的CPU體系結構和板級設備配置,BootLoader的功能不同。一般來說,主要包含片級初始化、板級初始化和加載內核等基本功能。(1)片級初始化片級初始化是一個純硬件的初始化過程,把微處理器從上電時的默認狀態(tài)逐步設置成系統(tǒng)所要求的工作狀態(tài)。片級初始化主要完成設置微處理器的核心寄存器和控制寄存器、微處理器的核心工作模式及其局部總線模式等初始化。(2)板級初始化板級初始化是一個同時包含有軟件和硬件在內的初始化過程,通過正確地設置各種寄存器的內容來完成微處理器以外的其他硬件設備的初始化。例如,初始化LED顯示設備、定時器、串口通信和內存控制器,建立內存空間的地址映射,設置中斷控制寄存器和某些軟件的數(shù)據(jù)結構和參數(shù)等。(3)加載內核將操作系統(tǒng)和應用程序的映像從Flash存儲器復制到系統(tǒng)的內存當中,然后跳轉到系統(tǒng)內核的第一條指令處繼續(xù)執(zhí)行。2022/12/2412嵌入式系統(tǒng)的設備驅動3.設備驅動程序在一個嵌入式系統(tǒng)中,可以沒有操作系統(tǒng),但設備驅動程序是必不可少的。設備驅動程序是一組庫函數(shù),用來對硬件進行初始化和管理,并向上層軟件提供訪問接口。不同功能的硬件設備,它們的設備驅動程序是不同的。但大多數(shù)的設備驅動程序都具有硬件啟動(初始化)、硬件關閉(關機)、硬件停用(暫停)、硬件啟用(重新啟用)、讀操作(讀取數(shù)據(jù))、寫操作(寫入數(shù)據(jù))等基本功能。設備驅動程序通常可以完成一些特定的功能,這些功能一般采用函數(shù)的形式來實現(xiàn),這些函數(shù)有分層結構和混合結構兩種組織結構形式。在分層結構中,設備驅動程序中的函數(shù)分為硬件接口和調用接口兩種類型。硬件接口直接跟硬件打交道的,直接操作和控制硬件設備;調用接口調用硬件接口當中的函數(shù),與上層軟件(包括操作系統(tǒng)、中間件和應用軟件)打交道的。分層結構把所有與硬件有關的細節(jié)都封裝在硬件接口當中,在硬件要升級時,只需要改動硬件接口當中的函數(shù)即可,而上層接口當中的函數(shù)不用做任何修改。在混合結構中,上層接口和硬件接口的函數(shù)是混在一起、相互調用的,之間沒有明確的層次關系。2022/12/2413嵌入式中間件中間件是一種軟件平臺技術,在銀行、證券、電信等行業(yè)的大型計算機應用系統(tǒng)中廣泛應用。近年來,中間件技術也被引入到嵌入式系統(tǒng)的設計中,并與實時多任務操作系統(tǒng)緊密結合。利用中間件技術可以使用戶把精力集中到系統(tǒng)功能的實現(xiàn)上,實現(xiàn)嵌入式系統(tǒng)的軟硬件協(xié)同設計。嵌入式中間件是指不包括操作系統(tǒng)內核、設備驅動程序和應用軟件在內的所有系統(tǒng)軟件。嵌入式中間件把原本屬于應用軟件層的一些通用的功能模塊抽取出來,形成獨立的一層軟件,為應用軟件提供一個靈活、安全、移植性好、相互通信、協(xié)同工作的平臺。嵌入式中間件可以分為消息中間件、對象中間件、遠程過程調用(RemoteProcedureCalls,RPC)、數(shù)據(jù)庫訪問中間件、安全中間件等不同的類型。一些公司可提供嵌入式中間件集成解決方案,如Sun公司的嵌入式Java,微軟公司的.NETCompactFrame-work,OMG(ObjectManagementGroup)的嵌入式CORBA等。2022/12/2414內容提要嵌入式軟件基礎嵌入式操作系統(tǒng)基礎嵌入式系統(tǒng)的任務管理嵌入式系統(tǒng)的存儲管理I/O設備管理2022/12/2415嵌入式操作系統(tǒng)的功能嵌入式系統(tǒng)的操作系統(tǒng)稱為EOS(EmbeddedOperatingSystem,嵌入式操作系統(tǒng)),EOS的基本功能主要體現(xiàn)在以下兩個方面:1.構成一個易于編程的虛擬機平臺EOS構成一個虛擬機平臺,EOS把底層的硬件細節(jié)封裝起來,為運行在它上面的軟件(如中間件軟件和各種應用軟件)提供了一個抽象的編程接口。軟件開發(fā)在這個編程接口的上進行,而不直接與機器硬件層打交道。EOS所提供的編程接口實際上就是操作系統(tǒng)對外提供的系統(tǒng)調用函數(shù)。2.系統(tǒng)資源的管理者負責管理系統(tǒng)當中的各種軟硬件資源,如處理器、內存、各種I/O設備、文件和數(shù)據(jù)等,使得整個系統(tǒng)高效、可靠運轉。2022/12/2416嵌入式操作系統(tǒng)的功能運行在嵌入式環(huán)境中的EOS其目標是為了完成某一項或有限項功能,而非通用型的操作系統(tǒng),因此在性能和實時性方面有嚴格的限制,能耗、成本和可靠性通常是影響設計的重要因素,要求占用資源少,適合在有限存儲空間運行,要求系統(tǒng)功能可以根據(jù)產品的設計要求進行剪裁、調整。所有的EOS都有一個內核(kernel),內核是系統(tǒng)當中的一個組件,它包含了任務管理、存儲管理、輸入/輸出(I/O)設備管理和文件系統(tǒng)管理四個功能模塊。其中:任務管理:對嵌入式系統(tǒng)中的運行軟件進行描述和管理,并完成處理機資源的分配與調度;存儲管理:用來提高內存的利用率,方便用戶的使用,并提供足夠的存儲空間;I/O設備管理:方便設備的使用,提高CPU和輸入/輸出設備的利用率;文件管理:解決文件資源的存儲、共享、保密和保護等問題。注意:不同的嵌入式系統(tǒng)的EOS所包含的組件可能各不相同,內核設計也可能各不相同的,完全取決于系統(tǒng)的設計以及實際的應用需求。2022/12/2417嵌入式操作系統(tǒng)的分類EOS可以按照系統(tǒng)的類型、響應時間和軟件結構等不同的來分類。1.按系統(tǒng)的類型分類(1)商業(yè)化系統(tǒng)VxWorks、WindowsCE、PalmOS等。(2)專用系統(tǒng)(3)開放源代碼系統(tǒng)μC/OS和各類嵌入式Linux系統(tǒng)。2.按響應時間分類分為RTOS(RealTimeOperatingSystems

,實時操作系統(tǒng))和非實時操作系統(tǒng)。RTOS對響應時間有非常嚴格的要求,當某一個外部事件或請求發(fā)生時,相應的任務必須在規(guī)定的時間內完成相應的處理。RTOS可以分為硬實時和軟實時兩種情形。非實時系統(tǒng)對響應時間沒有嚴格的要求,各個進程分享處理器,以獲得各自所需要的運行時間。2022/12/2418嵌入式操作系統(tǒng)的分類3.按軟件結構分類EOS可以分為單體結構、分層結構和微內核結構三大類單體結構

分層結構

微內核結構2022/12/2419常見嵌入式操作系統(tǒng)簡介嵌入式操作系統(tǒng)是操作系統(tǒng)研究領域中的一個重要分支,有許多公司在從事相關方面的研究,開發(fā)了數(shù)以百計的各具特色的嵌入式操作系統(tǒng)產品,其中比較有影響的系統(tǒng)有VxWorks、嵌入式Linux、WindowsCE、μC/OS-II和PalmOS等。1.VxWorks美國WindRiver

System公司開發(fā)的嵌入式實時操作系統(tǒng)VxWorks采用基于微內核的體系結構,整個系統(tǒng)由四百多個相對獨立、短小精練的目標模塊組成,用戶可以根據(jù)自己的需要選擇適當?shù)哪K,進行裁減和配置。VxWorks采用GNU類型的編譯和調試器,專有的API函數(shù),支持x86、MotorolaMC68xxx、Coldfire、PowerPC、MIPS、ARM、i960等主流的32位處理器,具有良好的可靠性和卓越的實時性,是目前嵌入式系統(tǒng)領域中使用最廣泛、市場占有率最高的商業(yè)系統(tǒng)之一。在VxWorks操作系統(tǒng)中,主要包含有實時微內核Wind、I/O處理系統(tǒng)、文件系統(tǒng)、網絡處理模塊、虛擬內存模塊VxVMI、板級支持包BSP等功能模塊。2022/12/2420常見嵌入式操作系統(tǒng)簡介2.嵌入式Linux嵌入式Linux(EmbeddedLinux)是指對標準Linux進行小型化剪裁處理之后,可固化在存儲器或單片機中,適合于特定嵌入式應用場合的專用Linux操作系統(tǒng)。常見的嵌入式Linux有μClinux、RT-Linux、Embedix和Hard

Hat

Linux等,具有如下特點:具有高性能、可裁剪的內核,用戶可以根據(jù)自己的需要,實時地將某些模塊插入到內核或從內核中移走,很適合于嵌入式系統(tǒng)的小型化的需要。具有完善的網絡通信和文件管理機制,支持所有標準的Internet網絡協(xié)議,支持ext2,fat16,fat32,romfs等文件系統(tǒng)??商峁┩暾墓ぞ哝湥═oolChain),利用GNU的gcc做編譯器,用gdb,kgdb,xgdb做調試工具,能方便地實現(xiàn)從操作系統(tǒng)到應用軟件各級別的調試。嵌入式Linux是開放源碼的自由操作系統(tǒng),用戶可以根據(jù)自己的應用需要方便地對內核進行修改和優(yōu)化。支持x86、ARM、MIPS、Alpha、PowerPC等多種體系結構,支持各種主流硬件設備和最新硬件技術。幾乎每一種通用程序在Linux上都能找到,具有豐富的軟件資源。μClinux主要針對沒有MMU的微處理器;RT-Linux是最早實現(xiàn)硬實時支持的Linux版本;Embedix采用模塊化的設計方案,方便系統(tǒng)剪裁;Hard

Hat

Linux是一個嵌入式實時系統(tǒng),可以針對硬件環(huán)境進行配置,以獲得最佳的性能和最小的容量。2022/12/2421常見嵌入式操作系統(tǒng)簡介3.WindowsCEWindows

CE是一個基于優(yōu)先級的多任務嵌入式操作系統(tǒng),提供了256個優(yōu)先級別,基本內核需要至少200KB的ROM,支持Win32API子集、支持多種用戶界面硬件、支持多種串行和網絡通信技術。Windows

CE不是一個硬實時系統(tǒng)。WindowsCE主要包含內核模塊、內核系統(tǒng)調用接口模塊、文件系統(tǒng)模塊、圖形窗口和事件子系統(tǒng)模塊和通信模塊五個功能模塊。其中:內核模塊支持進程和線程處理及內存管理等基本服務。內核系統(tǒng)調用接口模塊允許應用軟件訪問操作系統(tǒng)提供的服務。文件系統(tǒng)模塊支持DOS等格式的文件系統(tǒng)。圖形窗口和事件子系統(tǒng)模塊控制圖形顯示,并提供Windows

GUI圖形界面。通信模塊允許同其他的設備進行信息交換。Windows

CE操作系統(tǒng)集成了大量的Windows

XP

Professional的特性,能提供與PC機類似的桌面、任務欄、窗口、圖標、控件等圖形界面和各種應用程序。熟悉Windows操作系統(tǒng)的用戶可以很快地使用基于Windows

CE的嵌入式設備。另外,微軟公司提供了VisualStudio.NET、EmbeddedVisualC++、EmbeddedVisualBasic等一組功能強大的應用程序開發(fā)工具,專門用于對WindowsCE操作系統(tǒng)的開發(fā)。2022/12/2422常見嵌入式操作系統(tǒng)簡介4.C/OS-IIC/OS-II是一種免費、開放源代碼、結構小巧、基于可搶占優(yōu)先級調度的實時操作系統(tǒng),其內核提供任務調度與管理、時間管理、任務間同步與通信、內存管理和中斷服務等功能。名稱C/OS-II來源于術語Micro-ControllerOperatingSystem(微控制器操作系統(tǒng)),它通常也稱為MUCOS或者UCOS。C/OS-II內核在2KB~10KB數(shù)量級,具有執(zhí)行效率高、占用空間小、實時性能優(yōu)良和可擴展性強等特點,主要面向中小型嵌入式系統(tǒng)。μC/OS-II內核提供最基本的系統(tǒng)服務,例如信號量、郵箱、消息隊列、內存管理、中斷管理等。μC/OS-II內核本身并不支持文件系統(tǒng),但它具有良好的擴展性能,可以根據(jù)需要自行加入。C/OS-II具有良好的可移植性。C/OS-II的大部分代碼都是用C語言寫成的,只有與處理器的硬件相關的一部分代碼采用匯編語言編寫。C/OS-II并不是一個商業(yè)實時操作系統(tǒng),但C/OS-II的穩(wěn)定性和實用性卻被數(shù)百個商業(yè)級的應用所驗證,C/OS-II已在眾多的商業(yè)領域中獲得了廣泛的應用。C/OS-II支持ARM、PowerPC、MIPS、68k/ColdFire和x86等多種體系結構。。2022/12/2423內容提要嵌入式軟件基礎嵌入式操作系統(tǒng)基礎嵌入式系統(tǒng)的任務管理嵌入式系統(tǒng)的存儲管理I/O設備管理2022/12/2424單道程序設計和多道程序設計嵌入式操作系統(tǒng)可分為單道程序設計和多道程序設計。1.單道程序設計類型采用單道程序設計的操作系統(tǒng)在任何時候只能有一個程序在運行。2.多道程序設計類型采用多道程序設計的操作系統(tǒng)允許多個程序同時存在并運行,采用多道程序技術可以有效提高系統(tǒng)資源的利用率。2022/12/2425單道程序設計和多道程序設計單道程序與多道程序的運行過程2022/12/2426進程、線程和任務1.進程(process)進程是在描述多道系統(tǒng)中并發(fā)活動過程引入的一個概念。進程和程序是兩個既有聯(lián)系又有區(qū)別的概念。一個進程通常包含有以下幾個方面的內容:相應的程序:進程是一個正在運行的程序,有相應程序的代碼和數(shù)據(jù)。CPU上下文:程序在運行時,CPU中含有PC、PSW、通用寄存器、段寄存器、棧指針寄存器等各種寄存器的當前值內容一組系統(tǒng)資源:包括操作系統(tǒng)用來管理進程的數(shù)據(jù)結構、進程的內存地址空間、進程正在使用的文件等??偠灾?,進程包含了正在運行的一個程序的所有狀態(tài)信息。進程具有動態(tài)性,進程是一個正在運行的程序,程序的運行狀態(tài)都在不斷地變化,如PC寄存器的值、堆和棧的內容、通用寄存器存放數(shù)據(jù)和地址等。進程具有獨立性,一個進程是一個獨立的實體,占有計算機的系統(tǒng)資源,每個進程都有自己的運行上下文和內部狀態(tài),在它運行的時候獨立于其他的進程。進程具有并發(fā)性,在系統(tǒng)中同時有多個進程存在,它們相互獨立地運行。2022/12/2427進程、線程和任務2.線程(thread)線程是一個比進程更小的能獨立運行的基本單位。所謂的線程,就是進程當中的一條執(zhí)行流程。從資源組合的角度來看,進程把一組相關的資源組合起來,構成了一個資源平臺(資源環(huán)境。從程序運行的角度來看,進程就是一個正在運行的程序??梢园堰M程看成是程序代碼在這個資源平臺上的一條執(zhí)行流程(線程),也就是可以認為進程等于線程加資源平臺。2022/12/2428進程、線程和任務3.任務(task)在一些嵌入式系統(tǒng)中,把能夠獨立運行的實體稱為“任務”,并沒有使用“進程”或“線程”這兩個概念。任務到底是進程還是線程,在研究一個具體的嵌入式操作系統(tǒng)的時候,要注意加以區(qū)分。在任務的創(chuàng)建過程需要定義的主要參數(shù)有任務的優(yōu)先級、??臻g的大小和函數(shù)名。任務具有獨立的優(yōu)先級和??臻g,CPU上下文一般也是存放在棧空間中。對于不同的任務,它們也能夠訪問相同的全局變量,在這些任務之間,可以很方便地、直接地去使用共享的內存,而不需要經過系統(tǒng)內核來進行通信。通常認為,在嵌入式操作系統(tǒng)中“任務”就是線程,如在VxWorks、μC/OS-II、Jbed、嵌入式Linux等嵌入式操作系統(tǒng)中。2022/12/2429任務的實現(xiàn)1.任務的層次結構任務的層次結構如圖所示。在多道程序的嵌入式操作系統(tǒng)中,同時存在著多個任務,嵌入式內核啟動時,只有一個任務存在,然后由該任務派生出其他所有任務,這些任務采用層狀結構,存在著父子關系。2022/12/2430任務的實現(xiàn)2.任務的創(chuàng)建與終止(1)任務的創(chuàng)建在系統(tǒng)初始化、任務運行中、人機交互等過程中都可以創(chuàng)建任務。在系統(tǒng)初始化時,一般都會創(chuàng)建系統(tǒng)與用戶進行交互的一些前臺任務,以及完成鍵盤掃描、系統(tǒng)狀態(tài)檢測、時間統(tǒng)計等一些特定功能的后臺任務。在任務運行過程中,使用相應的系統(tǒng)調用來創(chuàng)建新的任務,以幫助它完成自己的工作。在一些具有交互功能的嵌入式系統(tǒng)中,用戶可以通過輸入命令或單擊圖標的方式,讓系統(tǒng)啟動一個新的任務。創(chuàng)建任務的基本方法是在一個已經存在的任務當中,通過調用相應的系統(tǒng)函數(shù)來創(chuàng)建一個新的任務。在嵌入式操作系統(tǒng)當中,任務的創(chuàng)建主要采用fork/exec和spawn兩種模型。兩種模型創(chuàng)建任務的過程非常相似,包括為新任務分配相應的數(shù)據(jù)結構,存放各種管理信息,分配內存空間,存放任務的代碼和數(shù)據(jù)。當這個新任務準備就緒后,就可以啟動它運行了。2022/12/2431任務的實現(xiàn)2.任務的創(chuàng)建與終止(2)任務的終止任務的終止可能有多種原因,正常退出、錯誤退出、被其他任務踢出等情況可以使任務終止。當一個任務完成了所有的工作,需要結束運行,提出退出要求,稱為正常退出。當一個任務在執(zhí)行過程中,出現(xiàn)了致命的錯誤(例如執(zhí)行了非法指令、內存訪問錯誤等),系統(tǒng)中止該任務的運行,強制性地讓該任務退出,稱為錯誤退出。在一些操作系統(tǒng)中可以提供一些系統(tǒng)調用函數(shù),用來把一個任務從系統(tǒng)中清除出局,稱為被其他任務踢出。在一些嵌入式系統(tǒng)中,某些任務被設計為“死循環(huán)”的模式,任務不會自行終止。2022/12/2432任務的實現(xiàn)3.任務的狀態(tài)在多道程序系統(tǒng)中,任務是獨立運行的實體,需要競爭系統(tǒng)資源,而任務所擁有的資源是在不斷變化中的,使得任務的狀態(tài)也在不斷的變化。一般來說,任務具有運行(running)、就緒(ready)和阻塞(blocked)三種基本狀態(tài)。任務在運行狀態(tài)時占有CPU并在CPU上運行,在任何一個時刻,處于運行狀態(tài)的任務個數(shù)必須小于或等于CPU的數(shù)目。當一個任務已具備運行條件,但由于CPU正在運行其他的任務,暫時不能運行該任務時,稱為就緒狀態(tài)。任務因為正在等待某種事件的發(fā)生而暫時不能運行稱為阻塞狀態(tài),也叫等待狀態(tài)(waiting)2022/12/2433任務的實現(xiàn)4.任務控制塊TCB(TaskControlBlock)TCB是在操作系統(tǒng)當中用來描述和管理一個任務的數(shù)據(jù)結構。通過對各個任務的TCB的操作來實現(xiàn)任務管理。利用TCB這個數(shù)據(jù)結構可以描述任務的基本情況,以及它的運行變化過程。當需要創(chuàng)建一個新任務的時候,就為它生成一個TCB,并初始化這個TCB的內容;當需要終止一個任務的時候,只要回收它的TCB即可。TCB主要包括任務的管理信息、CPU上下文信息、資源管理信息等內容。(1)任務的管理信息任務的管理信息包括任務的標識ID、任務的狀態(tài)、任務的優(yōu)先級、任務的調度信息、任務的時間統(tǒng)計信息、各種隊列指針等。(2)CPU上下文信息CPU上下文信息包括通用寄存器、PC寄存器、程序狀態(tài)字、棧指針等寄存器的當前值。在實際的嵌入式系統(tǒng)中,CPU上下文信息不一定直接存放在TCB當中,而存放在任務的棧中,可以通過相應的棧指針來訪問。(3)資源管理信息任務表示的是進程,包含一些資源管理方面的信息,如段表地址、頁表地址等存儲管理信息,根目錄、文件描述字等文件管理方面的信息。2022/12/2434任務的實現(xiàn)5.任務切換(contextswitching)任務切換是指一個任務正在CPU上運行,由于某種原因,系統(tǒng)需要調度另一個任務去運行,那么這時就需要進行把當前任務的運行上下文保存起來,并設置新任務的上下文,這一過程稱為任務切換。任務切換通常包含有以下幾個基本步驟:(1)將處理器的運行上下文保存在當前任務的TCB中;(2)更新當前任務的狀態(tài),從運行狀態(tài)變?yōu)榫途w狀態(tài)或阻塞狀態(tài)。(3)按照一定的策略,從所有處于就緒狀態(tài)的任務中選擇一個去運行。(4)修改新任務的狀態(tài),從就緒狀態(tài)變成運行狀態(tài)。(5)根據(jù)新任務的TCB的內容,恢復它的運行上下文環(huán)境。2022/12/2435任務的實現(xiàn)6.任務隊列在一個多任務的操作系統(tǒng)中,各個任務的狀態(tài)是經常變化的,有時處于運行狀態(tài),有時處于就緒狀態(tài),有時又處于阻塞狀態(tài)。通常采用任務隊列的方式來組織它的所有任務,以提高對這些任務的管理效率。操作系統(tǒng)用一組隊列來表示系統(tǒng)當中所有任務的當前狀態(tài)。例如,處于運行狀態(tài)的所有任務構成了運行隊列,處于就緒狀態(tài)的所有任務構成了就緒隊列,而對于處于阻塞狀態(tài)的任務,則要根據(jù)它們阻塞的原因,分別構成相應的阻塞隊列。不同的狀態(tài)用不同的隊列來表示。然后,對于系統(tǒng)當中的每一個任務,根據(jù)它的狀態(tài)把它的TCB加入到相應的隊列當中去。如果一個任務的狀態(tài)發(fā)生變化,就要把它的TCB從一個狀態(tài)隊列中脫離出來,加入到另一個隊列當中去。2022/12/2436任務的調度1.任務調度概述在多道程序操作系統(tǒng)中,當有兩個或多個任務同時處于就緒狀態(tài)時,而系統(tǒng)中只有一個CPU而且這個CPU己經空閑下來了,就會出現(xiàn)多個任務同時去競爭這個CPU的情況。通常利用調度器(scheduler)選擇就緒隊列中的那些任務中的一個去運行。調度器在決策過程中所采用的算法稱為調度算法。一般來說,在一個新的任務被創(chuàng)建時、在一個任務運行結束時、在一個任務由于I/O操作、信號量或其他原因被阻塞時、在一個I/O中斷發(fā)生時、在一個時鐘中斷發(fā)生時這五種調度時機都可能會發(fā)生任務的調度。任務調度存在可搶占調度(preemptive)和不可搶占調度(nonpreemptive)兩種調度方式。(1)在可搶占調度方式,當一個任務正在運行的時候,出現(xiàn)調度時機當中的五種情況之一,都有可能會發(fā)生調度。調度程序可以去打斷它,并安排另外的任務去運行。實時操作系統(tǒng)大都采用可搶占的調度方式。(2)在不可搶占調度方式,一個任務長時間地占用著CPU系統(tǒng)也不會強制它中止。當出現(xiàn)新任務創(chuàng)建、任務運行結束及任務被阻塞的調度時機時,有可能會發(fā)生調度。而對于發(fā)生的各種中斷,并不會去調用調度程序,而是在中斷處理完成后,又會回到剛才被打斷的任務中繼續(xù)執(zhí)行。2022/12/2437任務的調度1.任務調度概述在嵌入式操作系統(tǒng)中,存在著許多的調度算法,每一種算法都有各自的優(yōu)點和缺點。可以根據(jù)響應時間、周轉時間、調度開銷、公平性、均衡性、吞吐量等指標來評價一個調度算法的好壞。其中:調度器為一個就緒任務進行上下文切換時所需的時間,以及任務在就緒隊列中的等待時間稱為響應時間(responsetime

)。一個任務從提交到完成所經歷的時間稱為周轉時間(turnaroundtime

)。調度器在做出調度決策時所需要的時間和空間開銷稱為調度開銷(overhead)。公平性(fairness

)是指大致相當?shù)膬蓚€任務所得到的CPU時間也應該是大致相同的。另外,要防止饑餓(starvation)情況出現(xiàn),即某一個任務始終得不到處理器去運行。均衡性(balance)是指要盡可能使整個系統(tǒng)的各個部分(CPU,I/O)都忙起來,提高系統(tǒng)資源的使用效率。單位時間內完成的任務數(shù)量稱為吞吐量(throughput

)。對于一個調度算法來說,這些指標中一些是共存的,而另一些是相互牽制的,這些指標不可能全部都實現(xiàn),而是需要根據(jù)系統(tǒng)的要求,綜合權衡和折中選擇。2022/12/2438任務的調度2.先來先服務算法(FirstComeFirstServed,F(xiàn)CFS)FCFS是一種最簡單的調度算法。FCFS的基本思想就是按照任務到達的先后次序來進行調度,它是一種不可搶占的調度方式。FCFS也叫做FIFO(FirstInFirstOut,先進先出算法)。FCFS的最大優(yōu)點就是簡單,易于理解也易于實現(xiàn)。缺點是一批任務的平均周轉時間取決于各個任務到達的順序,如果短任務位于長任務之后,那么將增大平均周轉時間。2022/12/2439任務的調度3.短作業(yè)優(yōu)先算法(ShortestJobFirst,SJF)在SJF中,在各個任務在開始執(zhí)行前,事先預計好各任務的執(zhí)行時間,調度算法根據(jù)這些預計時間,安排執(zhí)行時間較短的任務優(yōu)先執(zhí)行??梢宰C明,對于一批同時到達的任務,采用SJF算法將得到一個最小的平均周轉時間。SJF算法有不可搶占方式和可搶占方式兩種實現(xiàn)方案。在不可搶占方式,只有任務運行完畢或者是被阻塞時,才會讓出CPU進行新的調度。而在可搶占方式,當前任務正在運行的時候,來了一個比它執(zhí)行時間更短的任務,而且它的運行時間要小于當前正在運行的任務的剩余時間,那么這個新任務就會搶占CPU去運行。這種方法也稱為SRTF(ShortestRemainingTimeFirst,最短剩余時間優(yōu)先算法)2022/12/2440任務的調度4.時間片輪轉算法(RoundRobin,RR)RR算法如圖所示。其把系統(tǒng)當中的所有就緒任務按照先來先服務的原則進行排列,然后,在每次調度的時候,處理器分派給隊列當中的第一個任務一小段CPU執(zhí)行時間(timeslice,時間片)。當這個時間片結束的時候,如果任務還沒有執(zhí)行完的話,將會發(fā)生時鐘中斷,調度器將會暫停當前任務的執(zhí)行,并把這個任務送到就緒隊列的末尾,然后再執(zhí)行當前的隊列的第一個任務。如果一個任務在分配給它的時間片結束前就已經運行結束了或者是被阻塞了,那么它就會立即讓出CPU給其他的任務。采用RR算法,各個就緒任務平均地分配CPU的使用時間,例如有n個就緒任務,那么每個任務將得到1/n的CPU時間。采用RR算法時,時間片q既不能太大,也不能太小。2022/12/2441任務的調度5.優(yōu)先級算法(priority)給每一個任務設置一個優(yōu)先級,然后在任務調度時,在所有處于就緒狀態(tài)的任務中選擇優(yōu)先級最高的那個任務運行。例如在短作業(yè)優(yōu)先算法中,以時間為優(yōu)先級,運行時間越短,優(yōu)先級越高。優(yōu)先級算法可以分為可搶占和不可搶占兩種方式。在可搶占方式中,當一個任務正在運行的時候,如果這時來了一個新的任務,其優(yōu)先級更高,則立即搶占CPU去運行這個新任務。而不可搶占方式則是需要等當前任務運行完后再決定??梢圆捎渺o態(tài)方式和動態(tài)方式確定任務的優(yōu)先級。靜態(tài)優(yōu)先級方式根據(jù)任務的類型或重要性,在創(chuàng)建任務的時候就確定任務的優(yōu)先級,并且一直保持不變直到任務結束。動態(tài)優(yōu)先級方式在創(chuàng)建任務的時候確定任務的優(yōu)先級,但是該優(yōu)先級可以在任務的運行過程中動態(tài)改變,以便獲得更好的調度性能。動態(tài)優(yōu)先級方式可以克服在靜態(tài)優(yōu)先級方式中高優(yōu)先級的任務一直占用著CPU,而那些低優(yōu)先級的任務可能會長時間地得不到CPU的情況。在優(yōu)先級算法中,對于優(yōu)先級相同的兩個任務,通常是把任務按照不同的優(yōu)先級進行分組,然后在不同組的任務之間使用優(yōu)先級算法,而在同一組的各個任務之間使用時間片輪轉法。2022/12/2442實時系統(tǒng)調度許多嵌入式操作系統(tǒng)都是實時操作系統(tǒng)(RTOS),實時系統(tǒng)的調度追求的是實時性,RTOS調度器要讓每個任務都在其最終時間期限(deadline)之前完成,而各任務之間的公平性并不是最重要的指標。RTOS調度器多采用基于優(yōu)先級的可搶占調度算法。1.RTOS任務模型RTOS任務模型如圖所示,在RTOS任務模型中,每一個任務用一個三元組來表示(執(zhí)行時間、周期、時間期限)。一般來說,一個任務的周期時間同時也是它的時間期限,因為該任務必須在它的下一個周期開始之前,完成此次運行。2022/12/2443實時系統(tǒng)調度2.單調速率調度算法(RateMonotonicScheduling,RMS)RMS是一種靜態(tài)優(yōu)先級調度算法。RMS算法假設:所有的任務都是周期性任務;任務的時間期限等于它的周期;任務在每個周期內的執(zhí)行時間是一個常量;任務之間不進行通信,也不需要同步;任務可以在任何位置被搶占,不存在臨界區(qū)的問題。RMS算法的基本思路是任務的優(yōu)先級與它的周期表現(xiàn)為單調函數(shù)的關系,任務的周期越短,優(yōu)先級越高;任務的周期越長,優(yōu)先級越低。RMS算法是一種最優(yōu)調度算法。如果存在一種基于靜態(tài)優(yōu)先級的調度順序,使得每個任務都能在其期限時間內完成,那么RMS算法總能找到這樣的一種可行的調度方案。在任務比較多的情況下,RMS可調度的CPU使用率上限為ln2=0.69,CPU使用率如此低,對于大多數(shù)系統(tǒng)來說是不可接受的。另外,在一個實際的系統(tǒng)中,任務之間通常都需要進行通信和同步。2022/12/2444實時系統(tǒng)調度3.最早期限優(yōu)先算法(EarliestDeadlineFirst,EDF)EDF調度算法是一種動態(tài)優(yōu)先級調度算法。EDF算法的基本思路是:根據(jù)任務的截止時間來確定其優(yōu)先級,對于時間期限最近的任務,分配最高的優(yōu)先級。當有一個新的任務處于就緒狀態(tài)時,各個任務的優(yōu)先級就有可能要進行調整。EDF算法假設條件除了它不要求系統(tǒng)中的任務都必須是周期任務外,其他的假設條件與RMS相同。EDF算法可調度上限為100%。對于給定的一組任務,只要它們的CPU使用率小于或等于1,EDF就能找到合適的調度順序,使得每個任務都能在自己的時間期限內完成。2022/12/2445內容提要嵌入式軟件基礎嵌入式操作系統(tǒng)基礎嵌入式系統(tǒng)的任務管理嵌入式系統(tǒng)的存儲管理I/O設備管理2022/12/2446嵌入式存儲管理方式的特點嵌入式系統(tǒng)的存儲管理方式與系統(tǒng)的實際應用領域及硬件環(huán)境密切相關,不同的嵌入式系統(tǒng)采用不同的存儲管理方式,需要考慮硬件條件、實時性要求、系統(tǒng)規(guī)模、可靠性要求等因素。在嵌入式微處理器中,MMU(MemoryManagementUnit,存儲管理單元)提供了一種內存保護的硬件機制。內存保護用來防止地址越界和防止操作越權。采用內存保護機制的每個應用程序都有自己獨立的地址空間,當一個應用程序要訪問某個內存單元時,由硬件檢查該地址是否在限定的地址空間內,如果不是的話就要進行地址越界處理;二是對于允許多個應用程序共享的某塊存儲區(qū)域,每個應用程序都有自己的訪問權限,如果違反了權限規(guī)定,則要進行操作越權處理。操作系統(tǒng)通常利用MMU來實現(xiàn)系統(tǒng)內核與應用程序的隔離,以及應用程序與應用程序之間的隔離。防止應用程序去破壞操作系統(tǒng)和其他應用程序的代碼和數(shù)據(jù),防止應用程序對硬件的直接訪問。MMU通常只在一些對安全性和可靠性要求比較高、系統(tǒng)比較復雜的嵌入式系統(tǒng)中存在。2022/12/2447存儲管理的實模式與保護模式1.實模式存儲管理在實模式存儲管理方式中,系統(tǒng)不使用MMU;不劃分“系統(tǒng)空間”和“用戶空間”,整個系統(tǒng)只有一個地址空間,即物理內存地址空間;應用程序和系統(tǒng)程序都能直接對所有的內存單元進行隨意訪問,無須進行地址映射;操作系統(tǒng)的內核與外圍應用程序在編譯連接后,兩者通常被集成在同一個系統(tǒng)文件中;系統(tǒng)中的“任務”或“進程”均是內核線程,只有運行上下文和棧是獨享的,其他資源都共享。在實模式存儲管理方式中,系統(tǒng)的內存地址空間一般可以分為text、data、bss、堆、棧五個部分。其中:.text:(代碼段)用來存放操作系統(tǒng)和應用程序的所有代碼。.data:(數(shù)據(jù)段)用來存放操作系統(tǒng)和應用程序當中所有帶有初始值的全局變量。.bss:用來存放操作系統(tǒng)和應用程序當中所有未帶初始值的全局變量。堆為動態(tài)分配的內存空間,棧用來保存運行上下文以及函數(shù)調用時的局部變量和運行參數(shù)。實模式方案簡單、存儲管理的開銷確定,適合于小規(guī)模、簡單和實時性要求較高的系統(tǒng)。其缺點是沒有存儲保護、安全性差。2022/12/2448存儲管理的實模式與保護模式2.保護模式存儲管理在保護模式存儲管理方式中,微處理器必須具有MMU硬件并啟用它。在保護模式存儲管理方式中,系統(tǒng)內核和用戶程序有各自獨立的地址空間,操作系統(tǒng)和MMU共同完成邏輯地址到物理地址的映射;每個應用程序只能訪問自己的地址空間,對于共享的內存區(qū)域,也必須按照規(guī)定的權限規(guī)則來訪問,具有存儲保護功能。保護模式存儲管理方式的安全性和可靠性較好,適合于規(guī)模較大、較復雜和實時性要求不太高的系統(tǒng)。2022/12/2449分區(qū)存儲管理分區(qū)存儲管理適合在多道程序操作系統(tǒng)中應用。分區(qū)存儲管理把整個內存劃分為系統(tǒng)區(qū)和用戶區(qū)兩大區(qū)域,然后再把用戶區(qū)劃分為若干個分區(qū),可以同時有多個任務在系統(tǒng)中運行,每個任務都有各自的地址空間。分區(qū)存儲管理又可以分為固定分區(qū)和可變分區(qū)兩類。1.固定分區(qū)存儲管理采用固定分區(qū)存儲管理方法時,各個用戶分區(qū)的個數(shù)、位置和大小一旦確定后,就固定不變,不能再修改了。為了滿足不同程序的存儲需要,各個分區(qū)的大小可以是相等的,也可以是不相等的。固定分區(qū)存儲管理方法的優(yōu)點是易于實現(xiàn),系統(tǒng)的開銷比較小,空閑空間的管理、內存的分配和回收算法都非常簡單。其缺點是內存的利用率不高,在任務所占用的分區(qū)內部未被利用的空間的碎片(內碎片)會造成很大的浪費;分區(qū)的總數(shù)是固定的,限制了并行執(zhí)行的程序個數(shù),N個分區(qū)最多只能有N個任務在同時運行。2022/12/2450分區(qū)存儲管理2.可變分區(qū)存儲管理采用可變分區(qū)存儲管理方法時,各分區(qū)不是預先劃分好的固定區(qū)域,而是系統(tǒng)動態(tài)創(chuàng)建的。在系統(tǒng)生成后,操作系統(tǒng)會占用內存的一部分空間,通常放在內存地址的最低端,其余的空間則成為一個完整的大空閑區(qū)。在裝入一個程序時,系統(tǒng)將根據(jù)它的需求和內存空間的使用情況,從這個空閑區(qū)當中劃出一塊來,分配給它,當程序運行結束后會釋放所占用的存儲區(qū)域。系統(tǒng)通過對內存的分配和回收,將一個完整的空閑區(qū)劃分成若干個占用區(qū)和空閑區(qū)。與固定分區(qū)相比,可變分區(qū)存儲管理的分區(qū)的個數(shù)、位置和大小都是隨著任務的進出而動態(tài)變化的,非常靈活。每個分區(qū)都是按需分配的,分區(qū)的大小正好等于任務的大小。這樣就避免了在固定分區(qū)當中由于分區(qū)的大小不當所造成的內碎片,從而提高了內存的利用效率。但可變分區(qū)存儲管理也可能會存在外碎片。所謂的外碎片,就是在各個占用的分區(qū)之間,難以利用的一些空閑分區(qū)。外碎片通常是一些比較小的空閑分區(qū)。在具體實現(xiàn)可變分區(qū)存儲管理技術的時候,需要考慮內存管理的數(shù)據(jù)結構、內存的分配算法以及內存的回收算法三個方面的問題。2022/12/2451地址映射1.物理地址和邏輯地址(1)物理地址(physical

address)物理地址也叫內存地址、絕對地址或實地址。將系統(tǒng)內存分割成很多個大小相等的存儲單元,如字節(jié)或字,每個單元給它一個編號,這個編號就稱為物理地址。操作時只有通過物理地址,才能對內存單元進行直接訪問。物理地址的集合就稱為物理地址空間,或者內存地址空間。物理地址是一個一維的線性空間,例如,一個內存的大小為256MB,那么它的內存地址空間是從0x0到0x0FFFFFFF。(2)邏輯地址(logicaladdress)邏輯地址也叫相對地址或虛地址。用戶的程序經過匯編或編譯后形成目標代碼,而這些目標代碼通常采用的就是相對地址的形式,其首地址為0,其余指令中的地址都是相對于這個首地址來編址的。顯然,邏輯地址和物理地址是完全不同的,不能用邏輯地址來直接訪問內存單元。因此,為了保證CPU在執(zhí)行指令時可以正確地訪問存儲單元,系統(tǒng)在裝入一個用戶程序后,需要將用戶程序中的邏輯地址轉換為運行時由機器直接尋址的物理地址,這個過程就稱為地址映射。只有把程序當中的邏輯地址轉換為物理地址,才能正常運行。2022/12/2452地址映射2.地址映射方式地址映射是由存儲管理單元MMU來完成的。當一條指令在CPU當中執(zhí)行時,在需要訪問內存時,CPU就發(fā)送一個邏輯地址給MMU,MMU負責把這個邏輯地址轉換為相應的物理地址,并根據(jù)這個物理地址去訪問內存。地址映射主要有靜態(tài)地址映射和動態(tài)地址映射兩種方式。

(1)靜態(tài)地址映射用戶程序在裝入之前,代碼內部使用的是邏輯地址。采用靜態(tài)地址映射方式時,當用戶程序被裝入內存時,直接對指令代碼進行修改,一次性地實現(xiàn)邏輯地址到物理地址的轉換。在具體實現(xiàn)時,在每一個可執(zhí)行文件中,要列出各個需要重定位的地址單元的位置,然后由一個加載程序來完成裝入及地址轉換的過程,將所有的邏輯地址都轉換成了物理地址。程序一旦裝入到內存以后,就不能再移動了。(2)動態(tài)地址映射采用動態(tài)地址映射方式時,當用戶程序被裝入內存時,不對指令代碼做任何修改,而是在程序的運行過程中,當它需要訪問內存單元的時候,再來進行地址轉換。地址轉換一般是由硬件的地址映射機制來完成的,通常的做法是設置一個基地址寄存器(或者叫重定位寄存器),當一個任務被調度運行時,就把它所在分區(qū)的起始地址裝入到這個寄存器中。然后,在程序的運行過程中,當需要訪問某個內存單元時,硬件就會自動地將其中的邏輯地址加上基地址寄存器當中的內容,從而得到實際的物理地址,并按照這個物理地址執(zhí)行。2022/12/2453頁式存儲管理與分區(qū)存儲管理方式不同,頁式存儲管理方式打破存儲分配的連續(xù)性,一個程序的邏輯地址空間可以分布在若干個離散的內存塊上,以達到充分利用內存,提高內存利用率的目的。在頁式存儲管理方式中,一方面,把物理內存劃分為許多個固定大小的內存塊,稱為物理頁面(physicalpage),或頁框(page

frame)。另一方面,把邏輯地址空間也劃分為大小相同的塊,稱為邏輯頁面(logical

page)或簡稱為頁面(page)。頁面的大小為2n,一般在512個字節(jié)到8KB之間。當一個用戶程序被裝入內存時,不是以整個程序為單位,把它存放在一整塊連續(xù)的區(qū)域中,而是以頁面為單位來進行分配的。對于一個大小為N個頁面的程序,需要有N個空閑的物理頁面,這些物理頁面可以是不連續(xù)的。在實現(xiàn)頁式存儲管理時,需要解決數(shù)據(jù)結構、內存的分配與回收、地址映射等問題。2022/12/2454頁式存儲管理1.數(shù)據(jù)結構在頁式存儲管理中,最主要的數(shù)據(jù)結構有頁表(page

table)和物理頁面表兩個。頁表給出了任務的邏輯頁面號與內存中的物理頁面號之間的對應關系。物理頁面表用來描述內存空間當中,各個物理頁面的使用分配狀況。物理頁面表可以采用位示圖或空閑頁面鏈表等方法來實現(xiàn)。2.內存的分配與回收當一個任務到來時,如何給它分配內存空間?當一個任務運行結束后,如何來回收它所占用的內存空間?內存的分配與回收算法與物理頁面表的實現(xiàn)方法是密切相關的。當一個任務到來時,首先需要計算它所需要的頁面數(shù)N,查詢是否還有N個空閑的物理頁面;如果有足夠的空閑物理頁面,則需要申請一個頁表,其長度為N,并把頁表的起始地址填入到該任務的任務控制塊TCB當中;然后分配N個空閑的物理頁面并編號,把它們的編號填入到頁表中,建立邏輯頁面與物理頁面之間的對應關系,并對剛剛被占用的那些物理頁面進行標記。當一個任務運行結束,釋放了它所占用的內存空間后,需要對這些物理頁面進行回收。2022/12/2455頁式存儲管理3.地址映射在頁式存儲管理方式中,當一個任務被加載到內存后,連續(xù)的邏輯地址空間被劃分為一個個的邏輯頁面,這些邏輯頁面被裝入到不同的物理頁面當中。在這種情況下,為了保證程序能夠正確地運行,需要把程序中使用的邏輯地址轉換為內存訪問時的物理地址,完成地址映射。地址映射是以頁面為單位來進行處理的。在進行地址映射時,首先分析邏輯地址,對于給定的一個邏輯地址,找到它所在的邏輯頁面,以及它在頁面內的偏移地址;然后進行頁表查找,根據(jù)邏輯頁面號,從頁表中找到它所對應的物理頁面號;最后進行物理地址合成,根據(jù)物理頁面號及頁內偏移地址,確定最終的物理地址。應注意的是,采用頁式存儲管理方式,程序必須全部裝入內存,才能夠運行。如果一個程序的規(guī)模大于當前的空閑空間的總和,那么它就無法運行。操作系統(tǒng)必須為每一個任務都維護一張頁表,開銷比較大,當簡單的頁表結構不能滿足應用要求時,必須設計出更為復雜的頁表結構,如多級頁表結構、哈希頁表結構、反置頁表等。2022/12/2456虛擬頁式存儲管理在操作系統(tǒng)的支持下,MMU還可以提供虛擬存儲功能,即使一個任務所需要的內存空間超過了系統(tǒng)所能提供內存空間,也能夠正常運行。虛擬頁式存儲管理就是在頁式存儲管理的基礎上,增加了請求調頁和頁面置換的功能。在虛擬頁式存儲管理方式中,當一個用戶程序需要調入內存去運行時,不是將這個程序的所有頁面都裝入內存,而是只裝入部分的頁面,就可以啟動這個程序去運行。在運行過程中,如果發(fā)現(xiàn)要執(zhí)行的指令或者要訪問的數(shù)據(jù)不在內存當中,就向系統(tǒng)發(fā)出缺頁中斷請求,然后系統(tǒng)在處理這個中斷請求時,就會將保存在外存中的相應頁面調入內存,從而使該程序能夠繼續(xù)運行。系統(tǒng)在處理缺頁中斷時,需要調入新的頁面。如果此時內存已滿,就要采用某種頁面置換算法,從內存中選擇某一個頁面,把它置換出去。常用的頁面置換算法包括:最優(yōu)頁面置換算法(OPTimal,OPT)、最近最久未使用算法(Least

Recently

Used

,LRU)、最不常用算法(Least

Frequently

Used

,LFU)、先進先出算法(First

InFirstOut,F(xiàn)IFO)和時鐘頁面置換算法(Clock)。采用虛擬頁式存儲管理方式,對于每一個頁表項來說,除了需要邏輯頁面號和與之相對應的物理頁面號信息外,還需要增加包括駐留位、保護位、修改位和訪問位等信息。2022/12/2457內容提要嵌入式軟件基礎嵌入式操作系統(tǒng)基礎嵌入式系統(tǒng)的任務管理嵌入式系統(tǒng)的存儲管理I/O設備管理2022/12/2458I/O編址在嵌入式系統(tǒng)中,存在著鍵盤、觸摸屏、液晶顯示器、A/D轉換器、D/A轉換器、控制電機等各種類型的輸入/輸出(I/O)設備。一個I/O單元通常是由I/O設備本身和設備控制器兩個部分組成。I/O設備負責與人、控制對象等打交道。而設備控制器負責完成I/O設備與主機之間的連接和通信。在每一個設備控制器當中,都會有控制寄存器、狀態(tài)寄存器和數(shù)據(jù)寄存器等一些寄存器,用來與CPU進行通信。通過往這些寄存器當中寫入不同的值,操作系統(tǒng)就可以命令I/O設備去執(zhí)行數(shù)據(jù)發(fā)送與接收數(shù)據(jù)、打開與關閉等各種操作。另外,操作系統(tǒng)也可以通過讀取這些寄存器的內容,來了解這個I/O設備的當前狀態(tài)。被CPU訪問的設備控制器寄存器主要采用I/O獨立編址、內存映像編址和混合編址三種編址形式。2022/12/2459I/O編址1.I/O獨立編址給設備控制器中的每一個寄存器,分配一個唯一的I/O端口地址,然后采用專門的I/O指令來對這些端口進行操作。這些端口地址所構成的地址空間是完全獨立的,與內存的地址空間沒有任何關系,I/O設備不會去占用內存的地址空間。而且在編寫程序時,它們的指令形式是不一樣的,很容易區(qū)分內存訪問和I/O端口訪問。

2.內存映像編址把設備控制器當中的每一個寄存器都映射為一個內存單元,這些內存單元專門用于I/O操作,而不能作為普通的內存單元來使用。端口地址空間與內存地址空間是統(tǒng)一編址的,端口地址空間是內存地址空間的一部分。編程非常方便,無須專門的I/O指令。

3.混合編址混合編址就是把I/O獨立編址和內存映像編址兩種編址方法混合在一起。對于設備控制器中的寄存器,采用I/O獨立編址的方法,每一個寄存器都有一個獨立的I/O端口地址;而對于I/O設備的數(shù)據(jù)緩沖區(qū),則采用內存映像編址的方法,把I/O設備的數(shù)據(jù)緩沖區(qū)的地址與內存地址統(tǒng)一進行編址,I/O設備的數(shù)據(jù)緩沖區(qū)的地址空間是內存地址空間的一部分。2022/

溫馨提示

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

評論

0/150

提交評論