




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、05:01,1,ARM9嵌入式系統(tǒng)設(shè)計(jì)基礎(chǔ)教程,05:01,2,課程理論教學(xué)內(nèi)容安排,第1章 嵌入式系統(tǒng)基礎(chǔ)知識 第2章 ARM體系結(jié)構(gòu) 第3章 32 Bit RISC微處理器S3C2410A 第4章 嵌入式系統(tǒng)的存儲器系統(tǒng) 第5章 嵌入式系統(tǒng)輸入/輸出設(shè)備接口 第6章 嵌入式系統(tǒng)總線接口 第7章 嵌入式系統(tǒng)網(wǎng)絡(luò)接口 第8章 嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ) 第9章 ARM匯編語言程序設(shè)計(jì)基礎(chǔ) 第10章 Bootloader設(shè)計(jì)基礎(chǔ) 第11章 Linux操作系統(tǒng)基礎(chǔ) 第12章 嵌入式Linux軟件設(shè)計(jì) 第13章 圖形用戶接口(GUI),05:01,3,第8章 嵌入式系統(tǒng)軟件及操作系統(tǒng)基礎(chǔ),8.1嵌
2、入式軟件基礎(chǔ) 4-10 8.2嵌入式操作系統(tǒng)基礎(chǔ)11-23 8.3嵌入式系統(tǒng)的任務(wù)管理24-54 8.4嵌入式系統(tǒng)的存儲管理55-71 8.5I/O設(shè)備管理72-80,05:01,4,8.1嵌入式軟件基礎(chǔ),8.1.1嵌入式軟件的特點(diǎn) 8.1.2嵌入式軟件的分類 8.1.3嵌入式軟件的體系結(jié)構(gòu) 8.1.4嵌入式系統(tǒng)的設(shè)備驅(qū)動層 8.1.5嵌入式中間件,05:01,5,8.1.1嵌入式軟件的特點(diǎn),應(yīng)用在嵌入式計(jì)算機(jī)系統(tǒng)當(dāng)中的各種軟件統(tǒng)稱為嵌入式軟件,作為嵌入式系統(tǒng)的一個(gè)組成部分,目前嵌入式軟件的種類和規(guī)模都得到了極大的發(fā)展,形成了一個(gè)完整、獨(dú)立的體系。除了具有通用軟件的一般特性,同時(shí)還具有一些與嵌
3、入式系統(tǒng)密切相關(guān)的特點(diǎn),如: (l)規(guī)模較小 (2)開發(fā)難度大 (3)高實(shí)時(shí)性和可靠性要求 (4)軟件固化存儲,05:01,6,8.1.2嵌入式軟件的分類,1系統(tǒng)軟件 系統(tǒng)軟件控制和管理嵌入式系統(tǒng)資源,為嵌入式應(yīng)用提供支持的各種軟件,如設(shè)備驅(qū)動程序、嵌入式操作系統(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支撐軟件 支撐軟件指輔助軟件開發(fā)的工具軟件,如系統(tǒng)分析設(shè)計(jì)工具、在線仿真工具、交叉編譯器、源
4、程序模擬器和配置管理工具等。 在嵌入式系統(tǒng)當(dāng)中,系統(tǒng)軟件和應(yīng)用軟件運(yùn)行在目標(biāo)平臺的(即嵌入式設(shè)備上),而對于各種軟件開發(fā)工具來說,它們大部分都運(yùn)行在開發(fā)平臺(PC機(jī))上,運(yùn)行Windows或Linux操作系統(tǒng)。,05:01,7,8.1.3嵌入式軟件的體系結(jié)構(gòu),1無操作系統(tǒng)的嵌入式軟件 早期在嵌入式系統(tǒng)的應(yīng)用范圍主要集中在控制領(lǐng)域,硬件的配置比較低,嵌入式軟件的設(shè)計(jì)主要是以應(yīng)用為核心,應(yīng)用軟件直接建立在硬件上,沒有專門的操作系統(tǒng),軟件的規(guī)模也很小。 無操作系統(tǒng)的嵌入式軟件采用循環(huán)輪轉(zhuǎn)和中斷(前后臺)兩種實(shí)現(xiàn)方式。 (1)循環(huán)輪轉(zhuǎn)方式 (2)中斷方式,05:01,8,2.有操作系統(tǒng)的嵌入式軟件,嵌
5、入式軟件體系結(jié)構(gòu),05:01,9,8.1.4嵌入式系統(tǒng)的設(shè)備驅(qū)動層,嵌入式系統(tǒng)的設(shè)備驅(qū)動層用來完成嵌入式系統(tǒng)硬件設(shè)備所需要的一些軟件初始化和管理。設(shè)備驅(qū)動層直接對硬件進(jìn)行管理和控制,并為上層軟件提供所需的驅(qū)動支持。 1.板級支持包 2.BootLoader (1)片級初始化 (2)板級初始化 (3)加載內(nèi)核 3.設(shè)備驅(qū)動程序,05:01,10,8.1.5嵌入式中間,中間件是一種軟件平臺技術(shù),在銀行、證券、電信等行業(yè)的大型計(jì)算機(jī)應(yīng)用系統(tǒng)中廣泛應(yīng)用。近年來,中間件技術(shù)也被引入到嵌入式系統(tǒng)的設(shè)計(jì)中,并與實(shí)時(shí)多任務(wù)操作系統(tǒng)緊密結(jié)合。利用中間件技術(shù)可以使用戶把精力集中到系統(tǒng)功能的實(shí)現(xiàn)上,實(shí)現(xiàn)嵌入式系統(tǒng)的
6、軟硬件協(xié)同設(shè)計(jì)。 嵌入式中間件是指不包括操作系統(tǒng)內(nèi)核、設(shè)備驅(qū)動程序和應(yīng)用軟件在內(nèi)的所有系統(tǒng)軟件。嵌入式中間件把原本屬于應(yīng)用軟件層的一些通用的功能模塊抽取出來,形成獨(dú)立的一層軟件,為應(yīng)用軟件提供一個(gè)靈活、安全、移植性好、相互通信、協(xié)同工作的平臺。 嵌入式中間件可分為消息中間件、對象中間件、遠(yuǎn)程過程調(diào)用(Remote Procedure Calls,RPC)、數(shù)據(jù)庫訪問中間件、安全中間件等不同類型。 一些公司可提供嵌入式中間件集成解決方案,如Sun的嵌入式Java,微軟的.NET Compact Frame-work,OMG(Object Management Group)嵌入式CORBA等,05
7、:01,11,8.2嵌入式操作系統(tǒng)基礎(chǔ),8.2.1嵌入式操作系統(tǒng)的功能8.2.2嵌入式操作系統(tǒng)的分類8.2.3常見的嵌入式操作系統(tǒng)簡介,05:01,12,8.2.1嵌入式操作系統(tǒng)的功能,在嵌入式系統(tǒng)中工作的操作系統(tǒng)稱為EOS(Embedded Operating System,嵌入式操作系統(tǒng)),EOS的基本功能主要體現(xiàn)在以下兩個(gè)方面: 1.構(gòu)成一個(gè)易于編程的虛擬機(jī)平臺 EOS構(gòu)成一個(gè)虛擬機(jī)平臺,EOS把底層的硬件細(xì)節(jié)封裝起來,為運(yùn)行在它上面的軟件(如中間件軟件和各種應(yīng)用軟件)提供了一個(gè)抽象的編程接口。軟件開發(fā)在這個(gè)編程接口的上進(jìn)行,而不直接與機(jī)器硬件層打交道。EOS所提供的編程接口實(shí)際上就是操
8、作系統(tǒng)對外提供的系統(tǒng)調(diào)用函數(shù)。 2.系統(tǒng)資源的管理者 EOS是系統(tǒng)資源的管理者,負(fù)責(zé)管理系統(tǒng)中各種軟硬件資源,如處理器、內(nèi)存、各種I/O設(shè)備、文件和數(shù)據(jù)等,使得整個(gè)系統(tǒng)能夠高效、可靠地運(yùn)轉(zhuǎn)。,05:01,13,8.2.2嵌入式操作系統(tǒng)的分類,EOS可以按照系統(tǒng)的類型、響應(yīng)時(shí)間和軟件結(jié)構(gòu)等不同的標(biāo)準(zhǔn)來分類。 1按系統(tǒng)的類型分類 可以把EOS分為商業(yè)化系統(tǒng)、專用系統(tǒng)和開放源代碼系統(tǒng)三大類。 (1)商業(yè)化系統(tǒng) 商業(yè)化的EOS有風(fēng)河公司(WindRiver)VxWorks,微軟Windows CE,Palm的PalmOS等,特點(diǎn)是功能強(qiáng),性能穩(wěn)定,輔助軟件工具齊全,應(yīng)用廣,成本高。 (2)專用系統(tǒng) 專
9、用系統(tǒng)是一些專業(yè)廠家為本公司產(chǎn)品特制的嵌入式操作系統(tǒng),一般不提供給應(yīng)用開發(fā)者使用。 (3)開放源代碼系統(tǒng) 開放源代碼的嵌入式操作系統(tǒng)有C/OS和各類嵌入式Linux系統(tǒng)等,具有免費(fèi)、開源、性能優(yōu)良、資源豐富、技術(shù)支持強(qiáng)等優(yōu)點(diǎn),是近年來發(fā)展迅速的一類操作系統(tǒng)。,05:01,14,2.按響應(yīng)時(shí)間分類,按照系統(tǒng)對響應(yīng)時(shí)間的敏感程度,EOS可以分為RTOS(Real Time Operating Systems,實(shí)時(shí)操作系統(tǒng))和非實(shí)時(shí)操作系統(tǒng)兩大類。 RTOS對響應(yīng)時(shí)間有非常嚴(yán)格的要求,當(dāng)某一個(gè)外部事件或請求發(fā)生時(shí),相應(yīng)的任務(wù)必須在規(guī)定的時(shí)間內(nèi)完成相應(yīng)的處理。RTOS可以分為硬實(shí)時(shí)和軟實(shí)時(shí)兩種情形。
10、(1)硬實(shí)時(shí)系統(tǒng) 硬實(shí)時(shí)系統(tǒng)對響應(yīng)時(shí)間有嚴(yán)格的要求,如果響應(yīng)時(shí)間不能滿足可能會引起系統(tǒng)的崩潰或致命的錯(cuò)誤。 (2)軟實(shí)時(shí)系統(tǒng) 軟實(shí)時(shí)系統(tǒng)對響應(yīng)時(shí)間有要求,如果響應(yīng)時(shí)間不能滿足,將需要支付能夠接受的額外代價(jià)。 非實(shí)時(shí)系統(tǒng)對響應(yīng)時(shí)間沒有嚴(yán)格的要求,各個(gè)進(jìn)程分享處理器,以獲得各自所需要的運(yùn)行時(shí)間。,05:01,15,3.按軟件結(jié)構(gòu)分類,按軟件體系結(jié)構(gòu),EOS可分為單體結(jié)構(gòu)、分層結(jié)構(gòu)和微內(nèi)核結(jié)構(gòu)三大類。 (1)單體結(jié)構(gòu) 單體結(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)中,中間件和設(shè)備驅(qū)動
11、程序通常就集成在系統(tǒng)內(nèi)核當(dāng)中,整個(gè)系統(tǒng)通常只有一個(gè)可執(zhí)行文件,里面包含了所有的功能組件。 單體結(jié)構(gòu)的操作系統(tǒng)由一組功能模塊組成,系統(tǒng)的各個(gè)模塊之間可以相互調(diào)用,通信開銷比較小,系統(tǒng)高度集成和相互關(guān)聯(lián),系統(tǒng)剪裁、修改、調(diào)試和維護(hù)不方便。 (2)分層結(jié)構(gòu) 采用分層結(jié)構(gòu)(layered)的操作系統(tǒng)內(nèi)部分為若干個(gè)層次(0N),各個(gè)層次之間的調(diào)用關(guān)系是單向的,即某一層次上的代碼只能調(diào)用比它低層的代碼。分層結(jié)構(gòu)要求在每個(gè)層次上都要提供一組API接口函數(shù),增加了系統(tǒng)的額外開銷,但系統(tǒng)的開發(fā)和維護(hù)較為簡單。典型代表有MS-DOS,其結(jié)構(gòu)就是一個(gè)有代表性的、組織良好的分層結(jié)構(gòu)。,05:01,16,單體和分層結(jié)構(gòu)
12、操作系統(tǒng)框架,單體結(jié)構(gòu) 分層結(jié)構(gòu),05:01,17,(3)微內(nèi)核結(jié)構(gòu),微內(nèi)核(microkernel)結(jié)構(gòu)把操作系統(tǒng)的大部分功能都剝離出去,在內(nèi)核中只保留最核心的功能單元(如進(jìn)程管理和存儲管理),大部分的系統(tǒng)功能都位于內(nèi)核之外,例如,將所有的設(shè)備驅(qū)動程序都被置于內(nèi)核之外,如下圖。 在微內(nèi)核操作系統(tǒng)中,大部分的系統(tǒng)功能被放置在內(nèi)核之外,客戶單元和服務(wù)器單元的內(nèi)存地址空間是相互獨(dú)立的,系統(tǒng)具有更高的安全性。新的功能組件也可以被動態(tài)地添加進(jìn)來,擴(kuò)展、調(diào)試、移植方便。在微內(nèi)核操作系統(tǒng)中,核內(nèi)組件與核外組件之間的通信方式是消息傳遞,而不是直接的函數(shù)調(diào)用,運(yùn)行速度可能會慢一些。另外,由于它們的內(nèi)存地址空間
13、是相互獨(dú)立的,在切換的時(shí)候,也會增加額外的開銷。,05:01,18,8.2.3常見的嵌入式操作系統(tǒng)簡介,嵌入式操作系統(tǒng)是操作系統(tǒng)研究領(lǐng)域中的一個(gè)重要分支,許多公司從事相關(guān)方面的研究,開發(fā)了數(shù)以百計(jì)各具特色的嵌入式操作系統(tǒng),其中較有影響的有VxWorks、嵌入式Linux、Windows CE、C/OS-II和PalmOS等。 1.VxWorks 美國WindRiver System公司開發(fā)的嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks采用基于微內(nèi)核的體系結(jié)構(gòu),整個(gè)系統(tǒng)由四百多個(gè)相對獨(dú)立、短小精練的目標(biāo)模塊組成,用戶可以根據(jù)自己的需要選擇適當(dāng)?shù)哪K,進(jìn)行裁減和配置。VxWorks采用GNU類型的編譯和調(diào)試器
14、,專有的API函數(shù),支持x86、Motorola MC68xxx、Coldfire、PowerPC、MIPS、ARM、i960等主流的32位處理器,具有良好的可靠性和卓越的實(shí)時(shí)性,是目前嵌入式系統(tǒng)領(lǐng)域中使用最廣泛、市場占有率最高的商業(yè)系統(tǒng)之一。,05:01,19,VxWorks操作系統(tǒng),在VxWorks操作系統(tǒng)中,主要包含有實(shí)時(shí)微內(nèi)核Wind、I/O處理系統(tǒng)、文件系統(tǒng)、網(wǎng)絡(luò)處理模塊、虛擬內(nèi)存模塊VxVMI、板級支持包BSP等功能模塊。其中: 實(shí)時(shí)微內(nèi)核Wind包括基于優(yōu)先級的任務(wù)調(diào)度、任務(wù)間的通信、同步和互斥、中斷處理、定時(shí)器和內(nèi)存管理機(jī)制等功能。與ANSI C兼容的I/O系統(tǒng)包括UNIX標(biāo)準(zhǔn)
15、的緩沖I/O和POSIX標(biāo)準(zhǔn)的異步I/O。文件系統(tǒng)主要包括與MS-DOS兼容的文件系統(tǒng)、與RT-11兼容的文件系統(tǒng)、Raw Disk文件系統(tǒng)和SCSI磁帶設(shè)備。網(wǎng)絡(luò)處理模塊能與如TCP/IP、NFS、UDP、SNMP、FTP等許多運(yùn)行其他協(xié)議的網(wǎng)絡(luò)進(jìn)行通信。虛擬內(nèi)存模塊VxVMI主要用于對指定內(nèi)存區(qū)的保護(hù),以加強(qiáng)系統(tǒng)的安全性。板級支持包BSP由初始化和驅(qū)動程序兩部分組成,用來管理硬件的功能模塊,對各種板卡的硬件功能提供統(tǒng)一的接口。,05:01,20,2.嵌入式Linux,嵌入式Linux(Embedded Linux)是指對標(biāo)準(zhǔn)Linux進(jìn)行小型化剪裁處理之后,可固化在存儲器或單片機(jī)中,適合于
16、特定嵌入式應(yīng)用場合的專用Linux操作系統(tǒng)。常見的嵌入式Linux有Clinux、RT-Linux、Embedix和Hard Hat Linux等,具有如下特點(diǎn): 具有高性能、可裁剪的內(nèi)核,其獨(dú)特的模塊機(jī)制使用戶可以根據(jù)自己的需要,實(shí)時(shí)地將某些模塊插入到內(nèi)核或從內(nèi)核中移走,很適合于嵌入式系統(tǒng)的小型化的需要。 具有完善的網(wǎng)絡(luò)通信和文件管理機(jī)制,支持所有標(biāo)準(zhǔn)的Internet網(wǎng)絡(luò)協(xié)議,支持ext2,fat16, fat32, romfs等文件系統(tǒng)。 提供完整的工具鏈(Tool Chain),用GNU的gcc做編譯器,用gdb, kgdb, xgdb做調(diào)試工具,能夠方便地實(shí)現(xiàn)從操作系統(tǒng)到應(yīng)用軟件各個(gè)
17、級別的調(diào)試。 嵌入式Linux是開放源碼的自由操作系統(tǒng),用戶可以根據(jù)自己的應(yīng)用需要方便地對內(nèi)核進(jìn)行修改和優(yōu)化。,05:01,21,嵌入式Linux, 支持x86、ARM、MIPS、Alpha、PowerPC等多種體系結(jié)構(gòu),支持各種主流硬件設(shè)備和最新硬件技術(shù)。 幾乎每一種通用程序在Linux上都能找到,具有豐富的軟件資源。 Clinux主要針對沒有MMU的微處理器;RT-Linux是最早實(shí)現(xiàn)硬實(shí)時(shí)支持的Linux版本;Embedix采用模塊化的設(shè)計(jì)方案,方便系統(tǒng)剪裁;Hard Hat Linux是一個(gè)嵌入式實(shí)時(shí)系統(tǒng),可以針對硬件環(huán)境進(jìn)行配置,以獲得最佳的性能和最小的容量。,05:01,22,3.
18、Windows CE,Windows CE是一個(gè)基于優(yōu)先級的多任務(wù)嵌入式操作系統(tǒng),提供256個(gè)優(yōu)先級別,基本內(nèi)核至少需200KB的ROM,支持Win32API子集、支持多種用戶界面硬件、支持多種串行和網(wǎng)絡(luò)通信技術(shù)。Windows CE不是一個(gè)硬實(shí)時(shí)系統(tǒng)。 Windows CE主要包含內(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)用軟件訪問操作系統(tǒng)提供的服務(wù)。文件系統(tǒng)模塊支持DOS等格式的文件系統(tǒng)。圖形窗口和事件子系統(tǒng)模塊控制圖形顯示,并提供Windows GUI圖形界面。通信模塊
19、允許同設(shè)備進(jìn)行信息交換。 Windows CE操作系統(tǒng)集成了大量的Windows XP Professional的特性,能提供與PC機(jī)類似的桌面、任務(wù)欄、窗口、圖標(biāo)、控件等圖形界面和各種應(yīng)用程序。熟悉Windows操作系統(tǒng)的用戶可以很快地使用基于Windows CE的嵌入式設(shè)備。另外,微軟公司提供了Visual Studio.NET、Embedded Visual C+、Embedded Visual Basic等一組功能強(qiáng)大的應(yīng)用程序開發(fā)工具,專門用于對Windows CE操作系統(tǒng)的開發(fā)。,05:01,23,4.C/OS-II,C/OS-II是一種免費(fèi)、開放源代碼、結(jié)構(gòu)小巧、基于可搶占優(yōu)先級
20、調(diào)度的實(shí)時(shí)操作系統(tǒng),其內(nèi)核提供任務(wù)調(diào)度與管理、時(shí)間管理、任務(wù)間同步與通信、內(nèi)存管理和中斷服務(wù)等功能。C/OS-II(微控制器操作系統(tǒng)),它通常也稱為MUCOS或者UCOS。 C/OS-II內(nèi)核在2KB10KB數(shù)量級,具有執(zhí)行效率高、占用空間小、實(shí)時(shí)性能優(yōu)良和可擴(kuò)展性強(qiáng)等特點(diǎn),主要面向中小型嵌入式系統(tǒng)。C/OS-II內(nèi)核提供最基本的系統(tǒng)服務(wù),例如信號量、郵箱、消息隊(duì)列、內(nèi)存管理、中斷管理等。C/OS-II內(nèi)核本身并不支持文件系統(tǒng),但它具有良好的擴(kuò)展性能,可以根據(jù)需要自行加入。C/OS-II具有良好的可移植性。C/OS-II的大部分代碼都是用C語言寫成的,只有與處理器的硬件相關(guān)的一部分代碼采用匯編
21、語言編寫。C/OS-II并不是一個(gè)商業(yè)實(shí)時(shí)操作系統(tǒng),但C/OS-II的穩(wěn)定性和實(shí)用性卻被數(shù)百個(gè)商業(yè)級的應(yīng)用所驗(yàn)證,C/OS-II已在眾多的商業(yè)領(lǐng)域中獲得了廣泛的應(yīng)用。 C/OS-II支持ARM、PowerPC、MIPS、68k/ColdFire和x86等多種體系結(jié)構(gòu),05:01,24,8.3嵌入式系統(tǒng)的任務(wù)管理,8.3.1單道程序設(shè)計(jì)和多道程序設(shè)計(jì) 8.3.2進(jìn)程、線程和任務(wù) 8.3.3任務(wù)的實(shí)現(xiàn) 8.3.4任務(wù)的調(diào)度 8.3.5實(shí)時(shí)系統(tǒng)調(diào)度,05:01,25,8.3.1單道程序設(shè)計(jì)和多道程序設(shè)計(jì),嵌入式操作系統(tǒng)可以分為單道程序設(shè)計(jì)和多道程序設(shè)計(jì)(mufti-programming)兩種類型。
22、 1單道程序設(shè)計(jì)類型 采用單道程序設(shè)計(jì)的操作系統(tǒng)在任何時(shí)候只能有一個(gè)程序在運(yùn)行。 例如:有兩個(gè)程序甲和乙,它們在運(yùn)行過程中都要用到CPU和I/O設(shè)備。如圖8.3.1所示,圖中我們采用不同的方框來表示這兩個(gè)程序?qū)煞N資源的使用情況,方框的長度表示使用的時(shí)間。 在單道程序設(shè)計(jì)的環(huán)境下,在任何時(shí)候,系統(tǒng)中只能有一個(gè)程序在運(yùn)行,因此,甲和乙這兩個(gè)程序只能一個(gè)接一個(gè)的執(zhí)行。如圖8.3.1所示,首先執(zhí)行程序甲,從t0時(shí)刻開始,到t6時(shí)刻結(jié)束。然后再執(zhí)行程序乙,從t6時(shí)刻開始,一直到它所有的工作都已完成。,05:01,26,2.多道程序設(shè)計(jì)類型,采用多道程序設(shè)計(jì)的操作系統(tǒng)允許多個(gè)程序同時(shí)存在并運(yùn)行,采用多道
23、程序技術(shù)可以有效提高系統(tǒng)資源的利用率。 在多道程序設(shè)計(jì)的環(huán)境下,允許多個(gè)程序同時(shí)運(yùn)行,當(dāng)一個(gè)程序在訪問I/O設(shè)備時(shí),會主動把CPU交出來,讓另一個(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è)備,而乙
24、仍然在使用CPU,所以甲只能處于等待狀態(tài),等到t6時(shí)刻再交換資源。這樣一直進(jìn)行下去,在t7時(shí)刻,甲執(zhí)行完畢,在t8時(shí)刻,乙也執(zhí)行完畢。 從圖8.3.1可見,由于CPU和I/O設(shè)備的使用是并行進(jìn)行的,在總的執(zhí)行時(shí)間上要明顯少于單道程序系統(tǒng)。,05:01,27,單道程序與多道程序的運(yùn)行過程,05:01,28,8.3.2進(jìn)程、線程和任務(wù),1進(jìn)程 進(jìn)程(process)是在描述多道系統(tǒng)中并發(fā)活動過程引入的一個(gè)概念。進(jìn)程和程序是兩個(gè)既有聯(lián)系又有區(qū)別的概念,兩者不能混為一談。例如:一個(gè)程序主要由代碼和數(shù)據(jù)兩部分內(nèi)容組成。而進(jìn)程是正在執(zhí)行的程序,它是由程序和該程序的運(yùn)行上下文兩部分內(nèi)容組成。程序是靜態(tài)的,而
25、進(jìn)程是一個(gè)動態(tài)的,變化的。進(jìn)程和程序之間并不是一一對應(yīng)的。一個(gè)進(jìn)程在運(yùn)行的時(shí)候可以啟動一個(gè)或多個(gè)程序,同一個(gè)程序也可能由多個(gè)進(jìn)程同時(shí)執(zhí)行。程序可以以文件的形式存放在硬盤或光盤上,作為一種軟件資源長期保存。而進(jìn)程則是一次執(zhí)行過程,它是暫時(shí)的,是動態(tài)地產(chǎn)生和終止的。 一個(gè)進(jìn)程通常包含有以下幾個(gè)方面的內(nèi)容: 相應(yīng)的程序:進(jìn)程是一個(gè)正在運(yùn)行的程序,有相應(yīng)程序的代碼和數(shù)據(jù)。,05:01,29,進(jìn)程,CPU上下文:程序在運(yùn)行時(shí),CPU中含有PC(Program Counter,程序計(jì)數(shù)器)、PSW(Program Status Word, 程序狀態(tài)字)、通用寄存器、段寄存器、棧指針寄存器等各種寄存器的當(dāng)前
26、值內(nèi)容,例如:在PC中記錄的將要取出的指令的地址,在PSW中用于記錄處理器的運(yùn)行狀態(tài)信息,通用寄存器存放的數(shù)據(jù)或地址;段寄存器存放的程序中各個(gè)段的地址;棧指針寄存器記錄的棧頂?shù)漠?dāng)前位置。 一組系統(tǒng)資源:包括操作系統(tǒng)用來管理進(jìn)程的數(shù)據(jù)結(jié)構(gòu)、進(jìn)程的內(nèi)存地址空間、進(jìn)程正在使用的文件等。 總而言之,進(jìn)程包含了正在運(yùn)行的一個(gè)程序的所有狀態(tài)信息。進(jìn)程具有動態(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)
27、程。進(jìn)程具有并發(fā)性,在系統(tǒng)中同時(shí)有多個(gè)進(jìn)程存在,它們相互獨(dú)立地運(yùn)行。,05:01,30,2.線程,線程(thread)是一個(gè)比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位。所謂的線程,就是進(jìn)程當(dāng)中的一條執(zhí)行流程。 從資源組合的角度來看,進(jìn)程把一組相關(guān)的資源組合起來,構(gòu)成了一個(gè)資源平臺(資源環(huán)境),其中包括運(yùn)行上下文、內(nèi)存地址空間、打開的文件等。從程序運(yùn)行的角度來看,進(jìn)程就是一個(gè)正在運(yùn)行的程序,在圖8.3.2中用一條帶有箭頭的線段來表示??梢园堰M(jìn)程看成是程序代碼在這個(gè)資源平臺上的一條執(zhí)行流程(線程),也就是可以認(rèn)為進(jìn)程等于線程加上資源平臺。 在一個(gè)進(jìn)程當(dāng)中,或者說在一個(gè)資源平臺上,可以同時(shí)存在多個(gè)線程??梢杂?/p>
28、線程來作為CPU的基本調(diào)度單位,使得各個(gè)線程之間可以并發(fā)執(zhí)行。對于同一個(gè)進(jìn)程當(dāng)中的各個(gè)線程來說,運(yùn)行在相同的資源平臺上,可以共享該進(jìn)程的大部分資源(如內(nèi)存地址空間、代碼、數(shù)據(jù)、文件等),但也有一小部分資源是不能共享的,每個(gè)線程都必須擁有各自獨(dú)立的一份(如CPU運(yùn)行上下文(如PC寄存器、PSW寄存器、通用寄存器和棧指針等)和棧)。,05:01,31,線程與進(jìn)程的資源關(guān)系,05:01,32,3.任務(wù),在一些嵌入式系統(tǒng)中,把能夠獨(dú)立運(yùn)行的實(shí)體稱為“任務(wù)”(task),并沒有使用“進(jìn)程”或“線程”這兩個(gè)概念。任務(wù)到底是進(jìn)程還是線程,在研究一個(gè)具體的嵌入式操作系統(tǒng)的時(shí)候,要注意加以區(qū)分。 在任務(wù)的創(chuàng)建過
29、程需要定義的主要參數(shù)有任務(wù)的優(yōu)先級、棧空間的大小和函數(shù)名。任務(wù)具有獨(dú)立的優(yōu)先級和棧空間,CPU上下文一般也是存放在??臻g中。對于不同的任務(wù),它們也能夠訪問相同的全局變量,在這些任務(wù)之間,可以很方便地、直接地去使用共享的內(nèi)存,而不需要經(jīng)過系統(tǒng)內(nèi)核來進(jìn)行通信。 通常認(rèn)為,在嵌入式操作系統(tǒng)中“任務(wù)”就是線程,如在VxWorks、C/OS-II、 Jbed、嵌入式Linux等嵌入式操作系統(tǒng)中。,05:01,33,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)核啟動時(shí),只有一個(gè)任務(wù)存在,然后由該任務(wù)派生出其他所有任務(wù),
30、這些任務(wù)采用層狀結(jié)構(gòu),存在著父子關(guān)系。,05:01,34,2.任務(wù)的創(chuàng)建與終止,(1)任務(wù)的創(chuàng)建 在一個(gè)嵌入式操作系統(tǒng)中,在系統(tǒng)初始化、任務(wù)運(yùn)行過程中、人機(jī)交互等過程中都可以創(chuàng)建任務(wù)。 在系統(tǒng)初始化時(shí),一般都會創(chuàng)建系統(tǒng)與用戶進(jìn)行交互的一些前臺任務(wù),以及完成鍵盤掃描、系統(tǒng)狀態(tài)檢測、時(shí)間統(tǒng)計(jì)等一些特定功能的后臺任務(wù)。在任務(wù)運(yùn)行過程中,也能夠使用相應(yīng)的系統(tǒng)調(diào)用來創(chuàng)建新的任務(wù),以幫助它完成自己的工作。在一些具有交互功能的嵌入式系統(tǒng)中,用戶可以通過輸入命令或單擊圖標(biāo)的方式,讓系統(tǒng)啟動一個(gè)新的任務(wù)。 創(chuàng)建任務(wù)的基本方法是在一個(gè)已經(jīng)存在的任務(wù)當(dāng)中,通過調(diào)用相應(yīng)的系統(tǒng)函數(shù)來創(chuàng)建一個(gè)新的任務(wù)。 在嵌入式操作系統(tǒng)
31、當(dāng)中,任務(wù)的創(chuàng)建主要采用fork/exec和spawn兩種模型。fork/exec模型源于IEEE/ISO POSIX 1003.1標(biāo)準(zhǔn),而spawn模型是從它派生出來的。,05:01,35,任務(wù)的創(chuàng)建,兩種模型創(chuàng)建任務(wù)的過程非常相似,包括為新任務(wù)分配相應(yīng)的數(shù)據(jù)結(jié)構(gòu),存放各種管理信息,分配內(nèi)存空間,存放任務(wù)的代碼和數(shù)據(jù)。當(dāng)這個(gè)新任務(wù)準(zhǔn)備就緒后,就可以啟動它運(yùn)行了。 在fork/exec模型,首先調(diào)用fork函數(shù)為新任務(wù)創(chuàng)建一份與父任務(wù)完全相同的內(nèi)存空間,然后再調(diào)用exec函數(shù)裝入新任務(wù)的代碼,并用它來覆蓋原有的屬于父任務(wù)的內(nèi)容。對于新創(chuàng)建的子任務(wù)來說,它可以從父任務(wù)那里繼承代碼、數(shù)據(jù)等各種屬性
32、。而spawn模型在創(chuàng)建新任務(wù)的時(shí),直接為它分配一個(gè)全新的地址空間,然后將新任務(wù)的代碼裝入并運(yùn)行。,05:01,36,(2)任務(wù)的終止,任務(wù)的終止可能有多種原因,正常退出、錯(cuò)誤退出、被其他任務(wù)踢出等情況可以使任務(wù)終止。 當(dāng)一個(gè)任務(wù)完成了所有的工作,需要結(jié)束運(yùn)行,提出退出要求,稱為正常退出。 當(dāng)一個(gè)任務(wù)在執(zhí)行過程中,出現(xiàn)了致命的錯(cuò)誤(例如執(zhí)行了非法指令、內(nèi)存訪問錯(cuò)誤等),系統(tǒng)中止該任務(wù)的運(yùn)行,強(qiáng)制性地讓該任務(wù)退出,稱為錯(cuò)誤退出。 在一些操作系統(tǒng)中可以提供一些系統(tǒng)調(diào)用函數(shù),用來把一個(gè)任務(wù)從系統(tǒng)中清除出局,稱為被其他任務(wù)踢出。 在一些嵌入式系統(tǒng)中,某些任務(wù)被設(shè)計(jì)為“死循環(huán)”的模式,任務(wù)不會自行終止。
33、,05:01,37,3.任務(wù)的狀態(tài),在多道程序系統(tǒng)中,任務(wù)是獨(dú)立運(yùn)行的實(shí)體,需要競爭系統(tǒng)資源,而任務(wù)所擁有的資源是在不斷變化中的,使得任務(wù)的狀態(tài)也在不斷的變化。一般來說,任務(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)。不過,只要把CPU分給該任務(wù),它就能夠立刻執(zhí)行。,05:01,
34、38,任務(wù)的狀態(tài),任務(wù)因?yàn)檎诘却撤N事件的發(fā)生而暫時(shí)不能運(yùn)行稱為阻塞狀態(tài),也叫等待狀態(tài)。此時(shí),即使CPU已經(jīng)空閑下來了,該任務(wù)也還是不能運(yùn)行。 如圖8.3.4所示,在一定條件下,任務(wù)會在不同的狀態(tài)之間來回轉(zhuǎn)換,存在運(yùn)行阻塞、運(yùn)行就緒、就緒運(yùn)行、阻塞就緒四種轉(zhuǎn)換關(guān)系。,05:01,39,4.任務(wù)控制塊,TCB(Task Control Block,任務(wù)控制塊)是在操作系統(tǒng)當(dāng)中用來描述和管理一個(gè)任務(wù)的數(shù)據(jù)結(jié)構(gòu)。通過對各個(gè)任務(wù)的TCB的操作來實(shí)現(xiàn)任務(wù)管理。利用TCB這個(gè)數(shù)據(jù)結(jié)構(gòu)可以描述任務(wù)的基本情況,以及它的運(yùn)行變化過程??梢园裈CB看成是任務(wù)存在的唯一標(biāo)志。當(dāng)需要創(chuàng)建一個(gè)新任務(wù)的時(shí)候,就為它生成
35、一個(gè)TCB,并初始化這個(gè)TCB的內(nèi)容;當(dāng)需要終止一個(gè)任務(wù)的時(shí)候,只要回收它的TCB即可。對任務(wù)的組織和管理可以通過對它們的TCB的組織和管理來實(shí)現(xiàn)。TCB主要包括任務(wù)的管理信息、CPU上下文信息、資源管理信息等內(nèi)容。,05:01,40,任務(wù)控制塊,(1)任務(wù)的管理信息 任務(wù)的管理信息包括任務(wù)的標(biāo)識ID、任務(wù)的狀態(tài)、任務(wù)的優(yōu)先級、任務(wù)的調(diào)度信息、任務(wù)的時(shí)間統(tǒng)計(jì)信息、各種隊(duì)列指針等。 (2)CPU上下文信息 CPU上下文信息包括通用寄存器、PC寄存器、程序狀態(tài)字、棧指針等各種CPU寄存器的當(dāng)前值。在實(shí)際的嵌入式系統(tǒng)中,CPU上下文信息不一定直接存放在TCB當(dāng)中,而是存放在任務(wù)的棧當(dāng)中,可以通過相應(yīng)
36、的棧指針來訪問。 (3)資源管理信息 在操作系統(tǒng)中,任務(wù)表示的是進(jìn)程,則還應(yīng)包含一些資源管理方面的信息,如段表地址、頁表地址等存儲管理方面的信息,根目錄、文件描述字等文件管理方面的信息。,05:01,41,5.任務(wù)切換,任務(wù)切換(context switching)是指一個(gè)任務(wù)正在CPU上運(yùn)行,由于某種原因,系統(tǒng)需要調(diào)度另一個(gè)任務(wù)去運(yùn)行,那么這時(shí)就需要進(jìn)行把當(dāng)前任務(wù)的運(yùn)行上下文保存起來,并設(shè)置新任務(wù)的上下文,這一過程稱為任務(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)按照
37、一定的策略,從所有處于就緒狀態(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)境。,05:01,42,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ì)列的方式來組織它的所有任務(wù),以提高對這些任務(wù)的管理效率。 操作系統(tǒng)用一組隊(duì)列來表示系統(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ì)列,而對于處于阻塞狀態(tài)的任務(wù),則要根據(jù)它們阻塞的原因,分別構(gòu)成相應(yīng)的阻塞隊(duì)列。不同的狀態(tài)用不
38、同的隊(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ì)列中脫離出來,加入到另一個(gè)隊(duì)列當(dāng)中去。,05:01,43,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)空閑下來了,就會出現(xiàn)多個(gè)任務(wù)同時(shí)去競爭這個(gè)CPU的情況。通常利用調(diào)度器(scheduler)選擇就緒隊(duì)列中的那些任務(wù)中的一個(gè)去運(yùn)行,調(diào)度器是CPU這個(gè)資源的管理者。調(diào)度器在決策過程中所采用的算法稱為調(diào)度算法。 一般來說,在一個(gè)新的任務(wù)被創(chuàng)建時(shí)、在一個(gè)任
39、務(wù)運(yùn)行結(jié)束時(shí)、在一個(gè)任務(wù)由于I/O操作、信號量或其他原因被阻塞時(shí)、在一個(gè)I/O中斷發(fā)生時(shí)、在一個(gè)時(shí)鐘中斷發(fā)生時(shí)這五種調(diào)度時(shí)機(jī)都可能會發(fā)生任務(wù)的調(diào)度。,05:01,44,任務(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)中的五種情況之一,都有可能會發(fā)生調(diào)度。調(diào)度程序可以去打斷它,并安排另外的任務(wù)去運(yùn)行。實(shí)時(shí)操作系統(tǒng)大都采用可搶占的調(diào)度方式。 (2)在不可搶占調(diào)度方式,一個(gè)任務(wù)長時(shí)間地占用著CPU系統(tǒng)也不會強(qiáng)制它中止。當(dāng)出現(xiàn)新任務(wù)創(chuàng)建、任務(wù)運(yùn)行結(jié)束及任務(wù)被阻塞的調(diào)度
40、時(shí)機(jī)時(shí),有可能會發(fā)生調(diào)度。而對于發(fā)生的各種中斷,并不會去調(diào)用調(diào)度程序,而是在中斷處理完成后,又會回到剛才被打斷的任務(wù)中繼續(xù)執(zhí)行。,05:01,45,調(diào)度算法, 調(diào)度器為一個(gè)就緒任務(wù)進(jìn)行上下文切換時(shí)所需的時(shí)間,以及任務(wù)在就緒隊(duì)列中的等待時(shí)間稱為響應(yīng)時(shí)間(response time)。 一個(gè)任務(wù)從提交到完成所經(jīng)歷的時(shí)間稱為周轉(zhuǎn)時(shí)間(turnaround time)。 調(diào)度器在做出調(diào)度決策時(shí)所需時(shí)間和空間開銷稱調(diào)度開銷(overhead)。 公平性(fairness )是指大致相當(dāng)?shù)膬蓚€(gè)任務(wù)所得到的CPU時(shí)間也應(yīng)該是大致相同的。另外,要防止饑餓(starvation)情況出現(xiàn),即某一個(gè)任務(wù)始終得不到
41、處理器去運(yùn)行。 均衡性(balance)是指要盡可能使整個(gè)系統(tǒng)的各個(gè)部分(CPU,I/O)都忙起來,提高系統(tǒng)資源的使用效率。 單位時(shí)間內(nèi)完成的任務(wù)數(shù)量稱為吞吐量(throughput )。 對于一個(gè)調(diào)度算法來說,這些指標(biāo)中一些是共存的,而另一些是相互牽制的,這些指標(biāo)不可能全部都實(shí)現(xiàn),而是需要根據(jù)系統(tǒng)的要求,綜合權(quán)衡和折中選擇。,05:01,46,2.先來先服務(wù)算法,FCFS(First Come First Served,先來先服務(wù)算法)是一種最簡單的調(diào)度算法。 FCFS的基本思想就是按照任務(wù)到達(dá)的先后次序來進(jìn)行調(diào)度,它是一種不可搶占的調(diào)度方式。FCFS也叫做FIFO(First In Fir
42、st Out,先進(jìn)先出算法)。 FCFS的最大優(yōu)點(diǎn)就是簡單,易于理解也易于實(shí)現(xiàn)。缺點(diǎn)是一批任務(wù)的平均周轉(zhuǎn)時(shí)間取決于各個(gè)任務(wù)到達(dá)的順序,如果短任務(wù)位于長任務(wù)之后,那么將增大平均周轉(zhuǎn)時(shí)間。,05:01,47,3.短作業(yè)優(yōu)先算法,在SJF(Shortest Job First,短作業(yè)優(yōu)先算法)中,在各個(gè)任務(wù)在開始執(zhí)行前,事先預(yù)計(jì)好各任務(wù)的執(zhí)行時(shí)間,調(diào)度算法根據(jù)這些預(yù)計(jì)時(shí)間,安排執(zhí)行時(shí)間較短的任務(wù)優(yōu)先執(zhí)行??梢宰C明,對于一批同時(shí)到達(dá)的任務(wù),采用SJF算法將得到一個(gè)最小的平均周轉(zhuǎn)時(shí)間。 SJF算法有不可搶占方式和可搶占方式兩種實(shí)現(xiàn)方案。在不可搶占方式,只有任務(wù)運(yùn)行完畢或者是被阻塞時(shí),才會讓出CPU進(jìn)行新
43、的調(diào)度。而在可搶占方式,當(dāng)前任務(wù)正在運(yùn)行的時(shí)候,來了一個(gè)比它執(zhí)行時(shí)間更短的任務(wù),而且它的運(yùn)行時(shí)間要小于當(dāng)前正在運(yùn)行的任務(wù)的剩余時(shí)間,那么這個(gè)新任務(wù)就會搶占CPU去運(yùn)行。這種方法也稱為SRTF(Shortest Remaining Time First,最短剩余時(shí)間優(yōu)先算法) 不可搶占的SJF算法如圖8.3.5所示,由于任務(wù)T3的執(zhí)行時(shí)間最短,所以首先被調(diào)度運(yùn)行,其次是T1和T2。,05:01,48,4.時(shí)間片輪轉(zhuǎn)算法,RR算法如圖8.3.6所示。在RR(Round Robin,時(shí)間片輪轉(zhuǎn)算法)中,把系統(tǒng)當(dāng)中的所有就緒任務(wù)按照先來先服務(wù)的原則進(jìn)行排列,然后,在每次調(diào)度的時(shí)候,處理器分派給隊(duì)列當(dāng)中
44、的第一個(gè)任務(wù)一小段CPU執(zhí)行時(shí)間(time slice,時(shí)間片)。當(dāng)這個(gè)時(shí)間片結(jié)束的時(shí)候,如果任務(wù)還沒有執(zhí)行完的話,將會發(fā)生時(shí)鐘中斷,調(diào)度器將會暫停當(dāng)前任務(wù)的執(zhí)行,并把這個(gè)任務(wù)送到就緒隊(duì)列的末尾,然后再執(zhí)行當(dāng)前的隊(duì)列的第一個(gè)任務(wù)。如果一個(gè)任務(wù)在分配給它的時(shí)間片結(jié)束前就已經(jīng)運(yùn)行結(jié)束了或者是被阻塞了,那么它就會立即讓出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í)間
45、片才能運(yùn)行完,增加了在任務(wù)之間的切換次數(shù),增大了系統(tǒng)的管理開銷,降低了CPU的使用效率。,05:01,49,時(shí)間片輪轉(zhuǎn)算法示意圖,05:01,50,5.優(yōu)先級算法,優(yōu)先級調(diào)度算法中,給每一個(gè)任務(wù)設(shè)置一個(gè)優(yōu)先級,然后在任務(wù)調(diào)度的時(shí)候,在所有處于就緒狀態(tài)的任務(wù)中選擇優(yōu)先級最高的那個(gè)任務(wù)去運(yùn)行。例如,在短作業(yè)優(yōu)先算法中,以時(shí)間為優(yōu)先級,運(yùn)行時(shí)間越短,優(yōu)先級越高。 優(yōu)先級算法分可搶占和不可搶占兩種方式??蓳屨挤绞街?,當(dāng)一個(gè)任務(wù)正在運(yùn)行時(shí),如來了一個(gè)新的任務(wù),其優(yōu)先級更高,則立即搶占CPU去運(yùn)行這個(gè)新任務(wù)。而不可搶占方式則是需要等當(dāng)前任務(wù)運(yùn)行完后再決定。 可以采用靜態(tài)方式和動態(tài)方式確定任務(wù)的優(yōu)先級。靜態(tài)
46、優(yōu)先級方式根據(jù)任務(wù)的類型或重要性,在創(chuàng)建任務(wù)的時(shí)候就確定任務(wù)的優(yōu)先級,并且一直保持不變直到任務(wù)結(jié)束。動態(tài)優(yōu)先級方式在創(chuàng)建任務(wù)的時(shí)候確定任務(wù)的優(yōu)先級,但是該優(yōu)先級可以在任務(wù)的運(yùn)行過程中動態(tài)改變,以便獲得更好的調(diào)度性能。動態(tài)優(yōu)先級方式可以克服在靜態(tài)優(yōu)先級方式中高優(yōu)先級的任務(wù)一直占用著CPU,而那些低優(yōu)先級的任務(wù)可能會長時(shí)間地得不到CPU的情況。 在優(yōu)先級算法中,對于優(yōu)先級相同的兩個(gè)任務(wù),通常是把任務(wù)按照不同的優(yōu)先級進(jìn)行分組,然后在不同組的任務(wù)之間使用優(yōu)先級算法,而在同一組的各個(gè)任務(wù)之間使用時(shí)間片輪轉(zhuǎn)法。,05:01,51,8.3.5實(shí)時(shí)系統(tǒng)調(diào)度,許多嵌入式操作系統(tǒng)都是實(shí)時(shí)操作系統(tǒng)(RTOS),實(shí)時(shí)
47、系統(tǒng)的調(diào)度追求的是實(shí)時(shí)性,RTOS調(diào)度器要讓每個(gè)任務(wù)都在其最終時(shí)間期限(deadline)之前完成,而各任務(wù)之間的公平性并不是最重要的指標(biāo)。RTOS調(diào)度器多采用基于優(yōu)先級的可搶占調(diào)度算法。,05:01,52,1.RTOS任務(wù)模型,RTOS任務(wù)模型如下圖,模型中,每一個(gè)任務(wù)用一個(gè)三元組來表示(執(zhí)行時(shí)間、周期、時(shí)間期限)。其中:執(zhí)行時(shí)間E(i)是指對于第i個(gè)任務(wù),當(dāng)它所需要的資源都己具備時(shí),它的執(zhí)行所需要的最長時(shí)間。周期(period)P(i)是指第i個(gè)任務(wù)的連續(xù)兩次運(yùn)行之間的最小時(shí)間間隔。時(shí)間期限是指D(i)第i個(gè)任務(wù)所允許的最大響應(yīng)時(shí)間(從任務(wù)啟動到運(yùn)行結(jié)束所需的時(shí)間)。一般來說,一個(gè)任務(wù)的周
48、期時(shí)間同時(shí)也是它的時(shí)間期限,因?yàn)樵撊蝿?wù)必須在它的下一個(gè)周期開始之前,完成此次運(yùn)行。啟動時(shí)間t(i)是指第i個(gè)任務(wù)的第i次執(zhí)行的開始時(shí)間。,05:01,53,2.單調(diào)速率調(diào)度算法,單調(diào)速率調(diào)度算法是一種靜態(tài)優(yōu)先級調(diào)度算法。 RMS算法假設(shè):所有的任務(wù)都是周期性任務(wù);任務(wù)的時(shí)間期限等于它的周期;任務(wù)在每個(gè)周期內(nèi)的執(zhí)行時(shí)間是一個(gè)常量;任務(wù)之間不進(jìn)行通信,也不需要同步;任務(wù)可以在任何位置被搶占,不存在臨界區(qū)的問題。 RMS算法的基本思路是任務(wù)的優(yōu)先級與它的周期表現(xiàn)為單調(diào)函數(shù)的關(guān)系,任務(wù)的周期越短,優(yōu)先級越高;任務(wù)的周期越長,優(yōu)先級越低。 RMS算法是一種最優(yōu)調(diào)度算法。如果存在一種基于靜態(tài)優(yōu)先級的調(diào)度順
49、序,使得每個(gè)任務(wù)都能在其期限時(shí)間內(nèi)完成,那么 RMS算法總能找到這樣的一種可行的調(diào)度方案。 在任務(wù)比較多的情況下,RMS可調(diào)度的CPU使用率上限為ln20.69,CPU使用率如此低,對于大多數(shù)系統(tǒng)來說是不可接受的。另外,在一個(gè)實(shí)際的系統(tǒng)中,任務(wù)之間通常都需要進(jìn)行通信和同步。,05:01,54,3.最早期限優(yōu)先算法,最早期限優(yōu)先(Earliest Deadline First,EDF)調(diào)度算法是一種動態(tài)優(yōu)先級調(diào)度算法。 EDF算法的基本思路是:根據(jù)任務(wù)的截止時(shí)間來確定其優(yōu)先級,對于時(shí)間期限最近的任務(wù),分配最高的優(yōu)先級。當(dāng)有一個(gè)新的任務(wù)處于就緒狀態(tài)時(shí),各個(gè)任務(wù)的優(yōu)先級就有可能要進(jìn)行調(diào)整。 EDF算
50、法假設(shè)條件除了它不要求系統(tǒng)中的任務(wù)都必須是周期任務(wù)外,其他的假設(shè)條件與RMS相同。 EDF算法可調(diào)度上限為100。對于給定的一組任務(wù),只要它們的CPU使用率小于或等于1,EDF就能找到合適的調(diào)度順序,使得每個(gè)任務(wù)都能在自己的時(shí)間期限內(nèi)完成。,05:01,55,8.4嵌入式系統(tǒng)的存儲管理,8.4.1嵌入式存儲管理方式的特點(diǎn)8.4.2存儲管理的實(shí)模式與保護(hù)模式8.4.3分區(qū)存儲管理8.4.4地址映射8.4.5頁式存儲管理8.4.6虛擬頁式存儲管理,05:01,56,8.4.1嵌入式存儲管理方式的特點(diǎn),嵌入式系統(tǒng)的存儲管理方式與系統(tǒng)的實(shí)際應(yīng)用領(lǐng)域及硬件環(huán)境密切相關(guān),不同的嵌入式系統(tǒng)采用不同的存儲管理
51、方式,需要考慮硬件條件、實(shí)時(shí)性要求、系統(tǒng)規(guī)模、可靠性要求等因素。系統(tǒng)的實(shí)時(shí)性要求直接影響到存儲管理的實(shí)現(xiàn)方式,為了確保系統(tǒng)的實(shí)時(shí)性,快速和確定是內(nèi)存管理的基本要求,即在存儲管理方面的開銷不能太大,對于每一項(xiàng)工作都要有明確的實(shí)時(shí)約束,即必須在某個(gè)限定的時(shí)刻之前完成。在實(shí)時(shí)系統(tǒng)中,存儲管理方法就比較簡單,甚至不提供存儲管理功能。而對一些實(shí)時(shí)性要求不高,可靠性要求比較高、比較復(fù)雜的應(yīng)用系統(tǒng),需要實(shí)現(xiàn)對操作系統(tǒng)或任務(wù)的保護(hù),在存儲管理方式上就相對較為復(fù)雜。,05:01,57,嵌入式存儲管理方式的特點(diǎn),在嵌入式微處理器中,MMU(Memory Management Unit, 存儲管理單元)提供了一種內(nèi)
52、存保護(hù)的硬件機(jī)制。內(nèi)存保護(hù)用來防止地址越界和操作越權(quán)。采用內(nèi)存保護(hù)機(jī)制的每個(gè)應(yīng)用程序都有自己獨(dú)立的地址空間,當(dāng)一個(gè)應(yīng)用程序要訪問某個(gè)內(nèi)存單元時(shí),由硬件檢查該地址是否在限定的地址空間內(nèi),如果不是的話就要進(jìn)行地址越界處理;二是防對于允許多個(gè)應(yīng)用程序共享的某塊存儲區(qū)域,每個(gè)應(yīng)用程序都有自己的訪問權(quán)限,如果違反了權(quán)限規(guī)定,則要進(jìn)行操作越權(quán)處理。 操作系統(tǒng)通常利用MMU來實(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問。MMU通常只在一些對安全性和可靠性的要求比較高、系統(tǒng)比較復(fù)雜的嵌入式系統(tǒng)中存在。,05:
53、01,58,8.4.2存儲管理的實(shí)模式與保護(hù)模式,實(shí)模式和保護(hù)模式是嵌入式操作系統(tǒng)中常見的兩個(gè)存儲管理方式。 1實(shí)模式存儲管理 實(shí)模式存儲管理中,不使用MMU;不劃分“系統(tǒng)空間”和“用戶空間”,整個(gè)系統(tǒng)只有一個(gè)地址空間,即物理內(nèi)存地址空間;應(yīng)用程序和系統(tǒng)程序都能直接對內(nèi)存單元隨意訪問,無須進(jìn)行地址映射;操作系統(tǒng)的內(nèi)核與外圍應(yīng)用程序在編譯連接后,兩者通常被集成在同一個(gè)系統(tǒng)文件中;系統(tǒng)中的 “任務(wù)”或“進(jìn)程”均是內(nèi)核線程,只有運(yùn)行上下文和棧是獨(dú)享的,其他資源都是共享的。 在實(shí)模式存儲管理方式中,系統(tǒng)的內(nèi)存地址空間一般可以分為text、data、bss、堆、棧五個(gè)部分。其中:.text:(代碼段)用
54、來存放操作系統(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)運(yùn)行時(shí),可以通過類似于malloc/free之類的函數(shù)來申請或釋放一段連續(xù)的內(nèi)存空間。棧用來保存運(yùn)行上下文以及函數(shù)調(diào)用時(shí)的局部變量和運(yùn)行參數(shù)。 對于實(shí)時(shí)系統(tǒng)來說,實(shí)模式方案簡單、存儲管理的開銷確定,比較適合于規(guī)模較小、簡單和實(shí)時(shí)性要求較高的系統(tǒng)。其缺點(diǎn)是沒有存儲保護(hù)、安全性差,在應(yīng)用程序中出現(xiàn)的任何一個(gè)小錯(cuò)誤或蓄意攻擊都有可能導(dǎo)致整個(gè)系統(tǒng)的崩潰。,05:01,59,2.保護(hù)模式存儲管理,
55、在保護(hù)模式存儲管理方式中,微處理器必須具有MMU硬件并啟用它。 在保護(hù)模式存儲管理方式中,系統(tǒng)內(nèi)核和用戶程序有各自獨(dú)立的地址空間,操作系統(tǒng)和MMU共同完成邏輯地址到物理地址的映射;每個(gè)應(yīng)用程序只能訪問自己的地址空間,對于共享的內(nèi)存區(qū)域,也必須按照規(guī)定的權(quán)限規(guī)則來訪問,具有存儲保護(hù)功能。 保護(hù)模式存儲管理方式的安全性和可靠性較好,適合于規(guī)模較大、較復(fù)雜和實(shí)時(shí)性要求不太高的系統(tǒng)。,05:01,60,8.4.3分區(qū)存儲管理,分區(qū)存儲管理適合在多道程序操作系統(tǒng)中應(yīng)用。分區(qū)存儲管理把整個(gè)內(nèi)存劃分為系統(tǒng)區(qū)和用戶區(qū)兩大區(qū)域,然后再把用戶區(qū)劃分為若干個(gè)分區(qū),可以同時(shí)有多個(gè)任務(wù)在系統(tǒng)中運(yùn)行,每個(gè)任務(wù)都有各自的地
56、址空間。 分區(qū)存儲管理又可以分為固定分區(qū)和可變分區(qū)兩類。 1.固定分區(qū)存儲管理 采用固定分區(qū)存儲管理方法時(shí),各個(gè)用戶分區(qū)的個(gè)數(shù)、位置和大小一旦確定后,就固定不變,不能再修改了。為了滿足不同程序的存儲需要,各個(gè)分區(qū)的大小可以是相等的,也可以是不相等的。 固定分區(qū)存儲管理方法的優(yōu)點(diǎn)是易于實(shí)現(xiàn),系統(tǒng)的開銷比較小,空閑空間的管理、內(nèi)存的分配和回收算法都非常簡單。其缺點(diǎn)是內(nèi)存的利用率不高,在任務(wù)所占用的分區(qū)內(nèi)部未被利用的空間的碎片(內(nèi)碎片)會造成很大的浪費(fèi);分區(qū)的總數(shù)是固定的,限制了并行執(zhí)行的程序個(gè)數(shù),N個(gè)分區(qū)最多只能有N個(gè)任務(wù)在同時(shí)運(yùn)行。,05:01,61,2.可變分區(qū)存儲管理,采用可變分區(qū)存儲管理方
57、法時(shí),各分區(qū)不是預(yù)先劃分好的固定區(qū)域,而是系統(tǒng)動態(tài)創(chuàng)建的。系統(tǒng)生成后,操作系統(tǒng)會占用內(nèi)存的一部分空間,通常放在內(nèi)存地址的最低端,其余的空間成為一個(gè)完整的大空閑區(qū)。在裝入一個(gè)程序時(shí),系統(tǒng)根據(jù)它的需求和內(nèi)存空間的使用情況,從這個(gè)空閑區(qū)中劃出一塊來,分配給它,當(dāng)程序運(yùn)行結(jié)束后會釋放所占用的存儲區(qū)域。系統(tǒng)通過對內(nèi)存的分配和回收,將一個(gè)完整的空閑區(qū)劃分成若干個(gè)占用區(qū)和空閑區(qū)。 與固定分區(qū)相比,可變分區(qū)存儲管理的分區(qū)的個(gè)數(shù)、位置和大小都是隨著任務(wù)的進(jìn)出而動態(tài)變化的,非常靈活。每個(gè)分區(qū)都是按需分配的,分區(qū)的大小正好等于任務(wù)的大小。這樣就避免了在固定分區(qū)當(dāng)中由于分區(qū)的大小不當(dāng)所造成的內(nèi)碎片,從而提高了內(nèi)存的利
58、用效率。但可變分區(qū)存儲管理也可能會存在外碎片。所謂的外碎片,就是在各個(gè)占用的分區(qū)之間,難以利用的一些空閑分區(qū)。外碎片通常是一些比較小的空閑分區(qū)。 在具體實(shí)現(xiàn)可變分區(qū)存儲管理技術(shù)的時(shí)候,需要考慮內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)、內(nèi)存的分配算法以及內(nèi)存的回收算法三個(gè)方面的問題。,05:01,62,可變分區(qū)存儲管理,在內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)上,系統(tǒng)會維護(hù)一個(gè)分區(qū)鏈表,來跟蹤記錄每一個(gè)內(nèi)存分區(qū)的情況,包括分區(qū)的狀態(tài)(已分配或空閑)、起始地址、長度等。 在內(nèi)存的分配算法上,當(dāng)一個(gè)新任務(wù)來到時(shí),需要為它尋找一個(gè)空閑分區(qū),其大小必須大于或等于該任務(wù)的要求。若是大于要求,則將該分區(qū)分割成兩個(gè)小分區(qū),其中一個(gè)分區(qū)為要求的大小并標(biāo)
59、記為“占用”,另一個(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ū)。與此相對應(yīng),在分區(qū)鏈表上,也要將相應(yīng)的鏈接節(jié)點(diǎn)進(jìn)行合并,并對其內(nèi)容進(jìn)行更新。,05:01,63,8.4.4地址映射,1物理地址和邏輯地址 地址映射涉及到物理地址和邏輯地址兩個(gè)基本概念。 (1)物理地址(physical address) 物理地址也叫內(nèi)存地址、絕對地址或?qū)嵉刂贰⑾到y(tǒng)內(nèi)存分割成很多個(gè)大小相等的存儲單元,如字節(jié)或字,每個(gè)單元給它一個(gè)編號,這個(gè)編號就稱為物理地址。操作時(shí)只有通過物理地址,才能對內(nèi)存單元進(jìn)行直接訪問。物理地址的集合就稱為物理地址空間,或者內(nèi)存地址空間。物理地址是一個(gè)一維的線性空間,例如,一個(gè)內(nèi)存的大小為256MB,那么它的內(nèi)存地址空間是從0 x0到0 x0FFFFFFF。,05:01,64,(2)邏輯地址,邏輯地址也叫相對地址或虛地址。用戶的程序經(jīng)過匯編或編譯后形成目標(biāo)代碼,而這些目標(biāo)代碼通常采用的就是相對地址的形式,其首地址為0,其余指令中的地址都是相對于這個(gè)首
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 3-6歲兒童發(fā)展指南數(shù)學(xué)領(lǐng)域心得體會
- 動火作業(yè)安全管理制度
- 教育心理學(xué)視角下的教學(xué)方法改進(jìn)與實(shí)施
- 醫(yī)療領(lǐng)域的教育游戲化提高學(xué)習(xí)興趣的方法探討
- 宮頸裂傷個(gè)案護(hù)理
- 田園墻壁改造方案
- 石油福利方案
- 企業(yè)員工指責(zé)方案
- 門頭施工協(xié)議書范本
- 慢性肺心病的護(hù)理常規(guī)
- 充電站可行性研究報(bào)告
- 公司安全事故隱患內(nèi)部舉報(bào)、報(bào)告獎勵制度
- 《光伏發(fā)電工程預(yù)可行性研究報(bào)告編制規(guī)程》(NB/T32044-2018)中文版
- 身份證籍貫自動對照自動生成
- 著色顏料相對著色力和白色顏料相對散射力的測定
- 綠來自我們的手
- 焊接工藝評定報(bào)告(共10頁)
- 廢舊電路板回收處理項(xiàng)目建議書范文
- 七年級上冊數(shù)學(xué)導(dǎo)學(xué)案(全冊)
- 《普通高中課程方案》解讀.ppt
- 熱電聯(lián)產(chǎn)能效能耗限額標(biāo)準(zhǔn)及計(jì)算方法
評論
0/150
提交評論