-
- 素材大。
- 1.20 MB
- 素材授權(quán):
- 免費(fèi)下載
- 素材格式:
- .ppt
- 素材上傳:
- ppt
- 上傳時(shí)間:
- 2018-05-02
- 素材編號(hào):
- 185386
- 素材類別:
- 儀器設(shè)備PPT
-
素材預(yù)覽
這是一個(gè)關(guān)于嵌入式操作系統(tǒng)論文PPT課件,包括了操作系統(tǒng)范圍界定,操作系統(tǒng)的運(yùn)行,程序的并發(fā)運(yùn)行,內(nèi)存管理,外部設(shè)備管理,文件系統(tǒng)管理等內(nèi)容,嵌入式操作系統(tǒng) 補(bǔ)充:操作系統(tǒng)基礎(chǔ)主講教師:謝謙 xieqian@henu.edu.cn 計(jì)算機(jī)大樓501 嵌入式操作系統(tǒng)概述 A.1 操作系統(tǒng)范圍界定 A.2 操作系統(tǒng)的運(yùn)行 A.3 程序的并發(fā)運(yùn)行 A.4 內(nèi)存管理 A.5 外部設(shè)備管理 A.6 文件系統(tǒng)管理 A.1 操作系統(tǒng)范圍界定操作系統(tǒng)的層次認(rèn)識(shí)內(nèi)核用戶態(tài)和核心態(tài)內(nèi)核對(duì)外服務(wù)接口 操作系統(tǒng)的層次用戶對(duì)操作系統(tǒng)的 印象來(lái)自對(duì)外層 軟件的操作經(jīng)驗(yàn)操作系統(tǒng)課程 重點(diǎn)關(guān)注內(nèi)核中間層次主要 與應(yīng)用開(kāi)發(fā)相關(guān)內(nèi)核是理解OS關(guān)鍵認(rèn)識(shí)內(nèi)核直觀認(rèn)識(shí)1:磁盤(pán)上對(duì)應(yīng)哪個(gè)(哪些)文件?Linux:vmlinuz(經(jīng)過(guò)壓縮,典型大小10MB以內(nèi))Windows:多個(gè)文件(Windows\System32目錄下)Ntoskrnl.exe、HAL.Dll、NTDll.Dll、Win32k.Sys,還有很多驅(qū)動(dòng)程序模塊直觀認(rèn)識(shí)2:在內(nèi)存中占據(jù)多大空間,歡迎點(diǎn)擊下載嵌入式操作系統(tǒng)論文PPT課件哦。
嵌入式操作系統(tǒng)論文PPT課件是由紅軟PPT免費(fèi)下載網(wǎng)推薦的一款儀器設(shè)備PPT類型的PowerPoint.
嵌入式操作系統(tǒng) 補(bǔ)充:操作系統(tǒng)基礎(chǔ)主講教師:謝謙 xieqian@henu.edu.cn 計(jì)算機(jī)大樓501 嵌入式操作系統(tǒng)概述 A.1 操作系統(tǒng)范圍界定 A.2 操作系統(tǒng)的運(yùn)行 A.3 程序的并發(fā)運(yùn)行 A.4 內(nèi)存管理 A.5 外部設(shè)備管理 A.6 文件系統(tǒng)管理 A.1 操作系統(tǒng)范圍界定操作系統(tǒng)的層次認(rèn)識(shí)內(nèi)核用戶態(tài)和核心態(tài)內(nèi)核對(duì)外服務(wù)接口 操作系統(tǒng)的層次用戶對(duì)操作系統(tǒng)的 印象來(lái)自對(duì)外層 軟件的操作經(jīng)驗(yàn)操作系統(tǒng)課程 重點(diǎn)關(guān)注內(nèi)核中間層次主要 與應(yīng)用開(kāi)發(fā)相關(guān)內(nèi)核是理解OS關(guān)鍵認(rèn)識(shí)內(nèi)核直觀認(rèn)識(shí)1:磁盤(pán)上對(duì)應(yīng)哪個(gè)(哪些)文件? Linux:vmlinuz(經(jīng)過(guò)壓縮,典型大小10MB以內(nèi)) Windows:多個(gè)文件(Windows\System32目錄下) Ntoskrnl.exe、HAL.Dll、NTDll.Dll、Win32k.Sys,還有很多驅(qū)動(dòng)程序模塊直觀認(rèn)識(shí)2:在內(nèi)存中占據(jù)多大空間?與硬件配置、軟件負(fù)載相關(guān)很難界定內(nèi)核占用內(nèi)存空間的具體數(shù)值真正的區(qū)分方法:內(nèi)核運(yùn)行于核心態(tài)用戶態(tài)和核心態(tài)(系統(tǒng)態(tài))為什么要區(qū)分用戶態(tài)和核心態(tài)保護(hù)操作系統(tǒng)代碼免遭破壞避免應(yīng)用程序代碼相互之間干擾內(nèi)核代碼(且只有內(nèi)核代碼)運(yùn)行于核心態(tài)不同的“態(tài)” 靠CPU硬件實(shí)現(xiàn) CPU寄存器中設(shè)定保護(hù)級(jí)狀態(tài)位,據(jù)此對(duì)當(dāng)前指令的執(zhí)行權(quán)限進(jìn)行控制系統(tǒng)啟動(dòng)時(shí)一般處于非保護(hù)狀態(tài),當(dāng)內(nèi)核代碼初始化時(shí)設(shè)置區(qū)分運(yùn)行態(tài)并保護(hù)自身用戶態(tài)和核心態(tài)(系統(tǒng)態(tài))特權(quán)指令和非特權(quán)指令 CPU指令集中部分關(guān)系到系統(tǒng)全局的指令被歸入特權(quán)指令,只有在核心態(tài)下可執(zhí)行其他指令作為非特權(quán)指令,在核心態(tài)和用戶態(tài)均可執(zhí)行特權(quán)指令的例子:外部設(shè)備訪問(wèn)、開(kāi)關(guān)中斷、修改存儲(chǔ)器管理寄存器、停機(jī)、轉(zhuǎn)換執(zhí)行狀態(tài)等核心態(tài)的另一特權(quán):內(nèi)存訪問(wèn)能力越權(quán)執(zhí)行時(shí):產(chǎn)生異常(中斷)內(nèi)核對(duì)外服務(wù)接口:系統(tǒng)調(diào)用通過(guò)CPU和OS內(nèi)核軟硬件結(jié)合的保護(hù)機(jī)制,系統(tǒng)資源的管理權(quán)始終在內(nèi)核代碼控制下,應(yīng)用程序無(wú)法直接訪問(wèn)另一方面,應(yīng)用程序又必須訪問(wèn)這些資源否則應(yīng)用程序幾乎無(wú)法作任何有價(jià)值的事情,甚至無(wú)法運(yùn)行因此,內(nèi)核需要在不破壞自身保護(hù)機(jī)制前提下,把應(yīng)用程序需要用到的資源服務(wù)功能以某種形式提供出來(lái)內(nèi)核對(duì)外服務(wù)接口:系統(tǒng)調(diào)用 OS內(nèi)核會(huì)選取應(yīng)用程序需要訪問(wèn)的系統(tǒng)功能,以子程序(過(guò)程)方式實(shí)現(xiàn),供應(yīng)用程序調(diào)用但是不允許應(yīng)用程序采用一般的過(guò)程調(diào)用方式來(lái)直接調(diào)用這些過(guò)程,而是采用系統(tǒng)調(diào)用這種特殊的調(diào)用方式內(nèi)核對(duì)外服務(wù)接口:系統(tǒng)調(diào)用系統(tǒng)調(diào)用區(qū)別于一般的過(guò)程調(diào)用調(diào)用者和被調(diào)用者運(yùn)行在不同狀態(tài),調(diào)用者在用戶態(tài)、被調(diào)用者在核心態(tài)運(yùn)行調(diào)用通過(guò)特殊的指令實(shí)現(xiàn):陷入指令或軟中斷指令進(jìn)入 intel芯片:int指令(Linux使用int 0x80,Windows使用int 0x2e) arm芯片:swi指令(swi 0,或swi 調(diào)用號(hào))內(nèi)核之外,通過(guò)C函數(shù)庫(kù)對(duì)系統(tǒng)調(diào)用進(jìn)行封裝,從而屏蔽這些細(xì)節(jié)內(nèi)核對(duì)外服務(wù)接口:系統(tǒng)調(diào)用系統(tǒng)調(diào)用的處理步驟 A.2 操作系統(tǒng)的運(yùn)行系統(tǒng)初啟內(nèi)核正常運(yùn)行:中斷驅(qū)動(dòng)應(yīng)用程序的運(yùn)行系統(tǒng)安裝 系統(tǒng)初啟 CPU怎樣工作? CPU正常加電時(shí),會(huì)在時(shí)鐘信號(hào)激勵(lì)下不斷地進(jìn)行取指、執(zhí)行的循環(huán)(取指令、解碼、取操作數(shù)、執(zhí)行指令、存結(jié)果等)指令要從存儲(chǔ)器中讀取,對(duì)應(yīng)地址由CPU內(nèi)部特定寄存器決定(PC,程序計(jì)數(shù)器) PC的改變:自動(dòng)增加(順序執(zhí)行)、跳轉(zhuǎn)指令、外部中斷和內(nèi)部異常初始加電時(shí),CPU會(huì)進(jìn)入特定狀態(tài),PC也會(huì)被初始化為一個(gè)固定的值 intel芯片:實(shí)模式,F(xiàn)FFF:0000=0xFFFF0 ARM芯片:0x0 系統(tǒng)初啟基于BIOS模式計(jì)算機(jī)的啟動(dòng)過(guò)程(EFI有所區(qū)別)加電,CPU初始化,到固定地址取指開(kāi)始執(zhí)行,激活BIOS程序; BIOS程序檢測(cè)系統(tǒng)配置;加載MBR程序 MBR程序加載OS Loader;OS Loader加載OS 進(jìn)行OS初始化:根據(jù)系統(tǒng)配置等準(zhǔn)備系統(tǒng)表格;加載Driver,標(biāo)識(shí)設(shè)備等創(chuàng)建系統(tǒng)初始進(jìn)程,進(jìn)而建立其它進(jìn)程控制權(quán)交給調(diào)度程序,進(jìn)入OS正?刂苾(nèi)核正常運(yùn)行:中斷驅(qū)動(dòng)當(dāng)系統(tǒng)啟動(dòng)完成后,根據(jù)內(nèi)核調(diào)度程序的調(diào)度結(jié)果,CPU會(huì)轉(zhuǎn)入用戶態(tài)執(zhí)行某個(gè)應(yīng)用程序的代碼,其后內(nèi)核代碼僅在需要時(shí)才會(huì)運(yùn)行這種“需要”可以是:外部設(shè)備有事件發(fā)生,需要內(nèi)核代碼處理用戶態(tài)程序執(zhí)行錯(cuò)誤,需要內(nèi)核代碼處理用戶態(tài)程序需要使用內(nèi)核提供的功能對(duì)內(nèi)核的“需求”通過(guò)中斷來(lái)體現(xiàn),即內(nèi)核代碼通過(guò)各種中斷入口反復(fù)執(zhí)行內(nèi)核正常運(yùn)行:中斷驅(qū)動(dòng)中斷機(jī)制的作用使CPU能夠轉(zhuǎn)入執(zhí)行預(yù)設(shè)的例程,以響應(yīng)突發(fā)事件或處理異常情況中斷響應(yīng) CPU中止當(dāng)前指令或下一條指令;保存當(dāng)前運(yùn)行狀態(tài);轉(zhuǎn)入相應(yīng)處理程序(通過(guò)硬件機(jī)制自動(dòng)實(shí)現(xiàn));執(zhí)行完畢后返回?cái)帱c(diǎn)繼續(xù)執(zhí)行中斷是實(shí)現(xiàn)OS功能的基礎(chǔ)中斷使得立即處理緊急事件成為可能中斷是實(shí)現(xiàn)處理機(jī)與外設(shè)并行的基礎(chǔ)中斷是實(shí)現(xiàn)多道程序之間調(diào)度切換的基礎(chǔ)中斷是實(shí)現(xiàn)系統(tǒng)調(diào)用的基礎(chǔ)內(nèi)核正常運(yùn)行:中斷驅(qū)動(dòng) CPU的中斷源內(nèi)部:執(zhí)行指令過(guò)程中由CPU自身產(chǎn)生,包括指令異常和陷阱(軟中斷)指令外部:硬件中斷(可屏蔽中斷和不可屏蔽中斷),通過(guò)中斷控制器接到CPU的引腳內(nèi)部中斷內(nèi)存訪問(wèn)相關(guān)異常是現(xiàn)代OS內(nèi)存管理的基礎(chǔ)軟中斷,是系統(tǒng)調(diào)用的唯一入口硬件中斷 I/O設(shè)備通過(guò)可屏蔽中斷通知CPU有事件發(fā)生,是設(shè)備驅(qū)動(dòng)程序工作基礎(chǔ)時(shí)鐘中斷,是分時(shí)調(diào)度的觸發(fā)來(lái)源應(yīng)用程序的運(yùn)行一些基本概念程序一般以二進(jìn)制可執(zhí)行文件形式存在于磁盤(pán)上 CPU執(zhí)行的指令和訪問(wèn)的數(shù)據(jù)須預(yù)先被裝入內(nèi)存 OS內(nèi)核要負(fù)責(zé)讀取可執(zhí)行文件裝入內(nèi)存執(zhí)行文件的格式由OS內(nèi)核裝入內(nèi)存,規(guī)定了執(zhí)行文件中必須提供的信息(如內(nèi)存區(qū)域劃分、外部模塊入口等)由編譯、鏈接程序生成,需符合OS規(guī)定的格式常見(jiàn)的執(zhí)行文件格式:Windows的PE,Linux的ELF,一般上述關(guān)鍵信息都存在于“文件頭部” 應(yīng)用程序的運(yùn)行應(yīng)用程序運(yùn)行過(guò)程中與內(nèi)核的關(guān)系最初的創(chuàng)建和裝入由另一個(gè)程序發(fā)起,OS內(nèi)核實(shí)施程序執(zhí)行過(guò)程中要時(shí)常轉(zhuǎn)入執(zhí)行內(nèi)核代碼因?yàn)樾枰狾S內(nèi)核的服務(wù)而產(chǎn)生系統(tǒng)調(diào)用外部設(shè)備發(fā)出中斷信號(hào)程序執(zhí)行完成后,要求OS內(nèi)核結(jié)束自身 OS內(nèi)核與應(yīng)用程序的交替執(zhí)行應(yīng)用程序的運(yùn)行一個(gè)簡(jiǎn)化實(shí)例場(chǎng)景 Windows下通過(guò)開(kāi)始菜單打開(kāi)記事本程序輸入一些內(nèi)容然后保存到文件應(yīng)用程序的運(yùn)行一個(gè)簡(jiǎn)化實(shí)例分析顯示開(kāi)始菜單的程序——explorer.exe explorer程序發(fā)現(xiàn)快捷方式對(duì)應(yīng)notepad.exe explorer程序發(fā)出系統(tǒng)調(diào)用,要求內(nèi)核執(zhí)行notepad.exe 內(nèi)核讀入notepad.exe文件,初始化內(nèi)存中數(shù)據(jù)結(jié)構(gòu),讀入代碼和數(shù)據(jù)內(nèi)核調(diào)度程序選定notepad程序執(zhí)行,返回用戶態(tài),從其執(zhí)行入口處開(kāi)始執(zhí)行應(yīng)用程序的運(yùn)行一個(gè)簡(jiǎn)化實(shí)例分析(續(xù)) notepad程序需要OS內(nèi)核顯示其用戶界面,進(jìn)行一系列的系統(tǒng)調(diào)用,完成界面顯示 notepad程序需要調(diào)用OS內(nèi)核功能來(lái)獲取輸入事件(鼠標(biāo)和鍵盤(pán)),調(diào)用相應(yīng)系統(tǒng)調(diào)用如果沒(méi)有輸入事件發(fā)生(notepad程序邏輯無(wú)法繼續(xù)),OS內(nèi)核會(huì)調(diào)度CPU執(zhí)行其他程序有輸入事件發(fā)生(例如按鍵),系統(tǒng)調(diào)用返回,notepad程序獲得輸入,進(jìn)行相應(yīng)處理(放入緩沖區(qū)),如有必要進(jìn)一步調(diào)用系統(tǒng)調(diào)用(例如字符回顯)應(yīng)用程序的運(yùn)行一個(gè)簡(jiǎn)化實(shí)例分析(續(xù))上述獲取輸入事件、處理輸入過(guò)程反復(fù)進(jìn)行如果輸入事件對(duì)應(yīng)保存文件,調(diào)用相應(yīng)系統(tǒng)調(diào)用創(chuàng)建文件,并將緩沖區(qū)內(nèi)容寫(xiě)入如果輸入事件對(duì)應(yīng)退出程序,調(diào)用相應(yīng)系統(tǒng)調(diào)用,結(jié)束用戶態(tài)程序邏輯的執(zhí)行 OS內(nèi)核代碼釋放notepad程序所占據(jù)的資源,該程序運(yùn)行結(jié)束 簡(jiǎn)化:如果實(shí)際跟蹤系統(tǒng)調(diào)用會(huì)看到數(shù)目及其龐大操作系統(tǒng)安裝操作系統(tǒng)安裝的目標(biāo)安裝完成后,使OS可以自行啟動(dòng) OS安裝的位置與系統(tǒng)類型、引導(dǎo)方式相關(guān)安裝的一般過(guò)程與系統(tǒng)類型相關(guān)對(duì)于通用計(jì)算機(jī),一般安裝過(guò)程將OS部署在硬盤(pán)上,過(guò)程相對(duì)簡(jiǎn)單、通用對(duì)于嵌入式系統(tǒng),安裝過(guò)程有較大區(qū)別,引導(dǎo)程序、操作系統(tǒng)、文件系統(tǒng)需分別安裝,一般安裝到flash存儲(chǔ),要通過(guò)特殊操作方法進(jìn)行部署,經(jīng)常被稱為“刷機(jī)”、“燒寫(xiě)” 操作系統(tǒng)安裝通用計(jì)算機(jī)OS一般安裝過(guò)程從安裝介質(zhì)加載并啟動(dòng)OS,檢測(cè)系統(tǒng)配置,運(yùn)行安裝程序運(yùn)行分區(qū)工具對(duì)硬盤(pán)進(jìn)行分區(qū),將啟動(dòng)代碼復(fù)制到硬盤(pán)特定區(qū)域(MBR,...)格式化硬盤(pán)分區(qū)(制作文件系統(tǒng)),將OS內(nèi)核及所選軟件包復(fù)制到硬盤(pán)分區(qū)對(duì)OS部件進(jìn)行設(shè)置,指定啟動(dòng)使用的OS內(nèi)核及相關(guān)參數(shù)重新啟動(dòng),用新安裝內(nèi)核啟動(dòng)OS 進(jìn)一步配置系統(tǒng)(如網(wǎng)絡(luò)設(shè)置等) A.3 程序的并發(fā)運(yùn)行程序的順序執(zhí)行與并發(fā)執(zhí)行進(jìn)程的引入進(jìn)程的創(chuàng)建與撤銷(xiāo)進(jìn)程的調(diào)度和切換線程的引入同步、互斥和進(jìn)程間通信程序的順序執(zhí)行與并發(fā)執(zhí)行程序的順序執(zhí)行前一程序執(zhí)行完成,后一程序才能開(kāi)始問(wèn)題:CPU利用率低,程序在執(zhí)行過(guò)程中的I/O操作,會(huì)導(dǎo)致CPU空轉(zhuǎn)等待程序的并發(fā)執(zhí)行多個(gè)程序都裝入內(nèi)存等待執(zhí)行,當(dāng)一個(gè)程序因I/O不能繼續(xù)執(zhí)行時(shí),CPU可以轉(zhuǎn)而執(zhí)行其他程序,從而提高了CPU利用率并發(fā)概念(區(qū)別于并行):微觀看任一時(shí)刻只有一個(gè)程序在運(yùn)行,宏觀看一段時(shí)間內(nèi)多個(gè)程序都在運(yùn)行程序的順序執(zhí)行與并發(fā)執(zhí)行并發(fā)執(zhí)行增加了操作系統(tǒng)設(shè)計(jì)難度多個(gè)程序都裝入內(nèi)存,互相不能干擾 (屬于內(nèi)存管理功能)需要記錄內(nèi)存中程序的不同狀態(tài):有一個(gè)正在運(yùn)行,有一些隨時(shí)可以運(yùn)行,有一些等待I/O事件而不能執(zhí)行當(dāng)運(yùn)行中的程序因?yàn)镮/O等原因不能繼續(xù)運(yùn)行時(shí),需要在可以運(yùn)行的程序中選一個(gè),轉(zhuǎn)去執(zhí)行新選中程序。在此過(guò)程中需要保存前一程序的執(zhí)行現(xiàn)場(chǎng),保證以后能再次正確運(yùn)行進(jìn)程的引入當(dāng)OS需要把程序的運(yùn)行作為一個(gè)管理對(duì)象時(shí),需要引入相應(yīng)的數(shù)據(jù)結(jié)構(gòu)程序在內(nèi)存中的指令和數(shù)據(jù)不能修改,否則會(huì)影響程序執(zhí)行邏輯 OS需要為每一個(gè)在內(nèi)存中的程序附加一個(gè)數(shù)據(jù)結(jié)構(gòu),由OS代碼進(jìn)行修改和訪問(wèn),在其中記錄程序狀態(tài)、保存執(zhí)行現(xiàn)場(chǎng)等這種引入管理數(shù)據(jù)結(jié)構(gòu)后可以被OS管理的程序被稱為進(jìn)程(process)進(jìn)程的引入進(jìn)程控制塊PCB 為管理進(jìn)程所引入的數(shù)據(jù)結(jié)構(gòu),記錄了系統(tǒng)管理所需的全部信息 OS根據(jù)PCB而感知進(jìn)程的存在,PCB是進(jìn)程存在的唯一標(biāo)志 PCB會(huì)先于程序的 載入而創(chuàng)建進(jìn)程的引入 PCB的內(nèi)容進(jìn)程標(biāo)志符:包括唯一的進(jìn)程號(hào),以及所屬用戶號(hào)、創(chuàng)建此進(jìn)程的父進(jìn)程號(hào)等處理機(jī)狀態(tài)(斷點(diǎn)信息):進(jìn)程切換時(shí)保存的處理機(jī)中各種寄存器的內(nèi)容進(jìn)程調(diào)度信息:記錄了進(jìn)程調(diào)度相關(guān)的信息(狀態(tài)、調(diào)度優(yōu)先級(jí)、等待事件等)其他信息:如內(nèi)存中程序區(qū)和數(shù)據(jù)區(qū)的地址,打開(kāi)的資源清單,同步和通信機(jī)制等進(jìn)程的引入進(jìn)程的基本狀態(tài)運(yùn)行就緒阻塞進(jìn)程的創(chuàng)建與撤銷(xiāo)進(jìn)程的創(chuàng)建除了個(gè)別進(jìn)程在系統(tǒng)啟動(dòng)時(shí)由OS內(nèi)核直接創(chuàng)建以外,其他進(jìn)程都是另外進(jìn)程通過(guò)系統(tǒng)調(diào)用要求內(nèi)核創(chuàng)建這種進(jìn)程之間的創(chuàng)建關(guān)系形成一個(gè)樹(shù)形結(jié)構(gòu)進(jìn)程的創(chuàng)建與撤銷(xiāo)進(jìn)程的創(chuàng)建 OS內(nèi)核創(chuàng)建新進(jìn)程的過(guò)程申請(qǐng)一個(gè)空閑的PCB 為新進(jìn)程分配資源對(duì)PCB初始化將PCB插入就緒隊(duì)列返回進(jìn)程號(hào)進(jìn)程的創(chuàng)建與撤銷(xiāo)進(jìn)程的撤銷(xiāo)進(jìn)程在完成其任務(wù)后,應(yīng)該撤銷(xiāo),以便釋放所占據(jù)資源正常結(jié)束的進(jìn)程會(huì)主動(dòng)調(diào)用進(jìn)程終止系統(tǒng)調(diào)用,從而觸發(fā)進(jìn)程撤銷(xiāo)一些程序執(zhí)行過(guò)程中發(fā)生的異常情況可能導(dǎo)致OS內(nèi)核直接撤銷(xiāo)進(jìn)程 進(jìn)程的創(chuàng)建與撤銷(xiāo)進(jìn)程的撤銷(xiāo) OS內(nèi)核撤銷(xiāo)進(jìn)程的過(guò)程找到指定進(jìn)程的PCB 回收該進(jìn)程所占用的全部資源處理子孫進(jìn)程(終止所有子孫進(jìn)程并回收它們所占用的資源,或者“過(guò)繼”以免成為孤兒)將被終止進(jìn)程的PCB從原來(lái)隊(duì)列中摘走進(jìn)程的調(diào)度和切換進(jìn)程調(diào)度算法調(diào)度算法的目的是在多個(gè)候選者中選出一個(gè)進(jìn)程作為下面要執(zhí)行的進(jìn)程不同的調(diào)度算法會(huì)影響系統(tǒng)的總體性能,是OS設(shè)計(jì)中的關(guān)鍵問(wèn)題從理解OS工作機(jī)制角度出發(fā),不必關(guān)心調(diào)度算法的細(xì)節(jié)進(jìn)程的調(diào)度和切換進(jìn)程切換(上下文切換)當(dāng)調(diào)度算法選中新進(jìn)程后執(zhí)行首先保存當(dāng)前進(jìn)程的執(zhí)行現(xiàn)場(chǎng):保存將要執(zhí)行的指令地址,把各類CPU寄存器存到PCB中特定區(qū)域然后找到新選中進(jìn)程的PCB,讀取上次保存的執(zhí)行現(xiàn)場(chǎng)信息裝入對(duì)應(yīng)CPU寄存器,轉(zhuǎn)到上次斷點(diǎn)處指令開(kāi)始執(zhí)行通用的進(jìn)程切換程序能保證進(jìn)程多次被調(diào)度執(zhí)行時(shí)除了時(shí)間間斷之外,與連續(xù)執(zhí)行的狀態(tài)完全一致進(jìn)程的調(diào)度和切換進(jìn)程調(diào)度的時(shí)機(jī):調(diào)度算法何時(shí)執(zhí)行?以Unix/Linux為例,主要有兩類時(shí)機(jī)一是當(dāng)前進(jìn)程主動(dòng)放棄CPU 進(jìn)程終止,或因?yàn)檎?qǐng)求I/O進(jìn)入阻塞狀態(tài)二是OS內(nèi)核決定終止當(dāng)前進(jìn)程執(zhí)行中斷處理程序中發(fā)現(xiàn)需要重新調(diào)度,如當(dāng)前進(jìn)程時(shí)間片用完,或高優(yōu)先級(jí)進(jìn)程進(jìn)入就緒狀態(tài)中斷處理程序中一般不會(huì)直接調(diào)用調(diào)度算法,而是設(shè)置一個(gè)全局標(biāo)志當(dāng)OS內(nèi)核從核心態(tài)返回用戶態(tài)之前,會(huì)檢查該標(biāo)志,如置位則調(diào)用調(diào)度程序進(jìn)而切換進(jìn)程進(jìn)程的調(diào)度和切換進(jìn)程調(diào)度方式非搶占方式處理機(jī)分配給某進(jìn)程后便一直執(zhí)行,直到該進(jìn)程主動(dòng)放棄,OS不搶占進(jìn)程的執(zhí)行搶占方式 OS內(nèi)核可根據(jù)某種原則停止當(dāng)前進(jìn)程的執(zhí)行,轉(zhuǎn)而執(zhí)行另一進(jìn)程一般的操作系統(tǒng)內(nèi)核不可搶占,即:只有從核心態(tài)返回用戶態(tài)時(shí)才會(huì)發(fā)生進(jìn)程切換一些實(shí)時(shí)OS要求內(nèi)核可搶占,以最大限度保證實(shí)時(shí)進(jìn)程優(yōu)先運(yùn)行。內(nèi)核搶占將大大增加OS的實(shí)現(xiàn)難度線程的引入 OS加入進(jìn)程管理后,可以讓不同應(yīng)用程序并發(fā)執(zhí)行如果一個(gè)應(yīng)用程序內(nèi)部希望并發(fā)執(zhí)行時(shí),進(jìn)程模型很不方便應(yīng)用程序需要并發(fā)的例子:用word進(jìn)行耗時(shí)的打印操作時(shí)還希望進(jìn)行輸入處理;用瀏覽器查看同時(shí)包含動(dòng)畫(huà)和音頻的網(wǎng)頁(yè)如果打印和輸入處理在不同進(jìn)程,其數(shù)據(jù)區(qū)相互隔離,難以協(xié)調(diào)如果打印和輸入處理在同一進(jìn)程,沒(méi)有程序在兩者之間進(jìn)行通用的切換,只能在程序主循環(huán)中反復(fù)查詢,增加編程難度線程的引入 進(jìn)程的角色傳統(tǒng)進(jìn)程是兩種角色的混合資源分配的單位:主要表現(xiàn)為進(jìn)程間的內(nèi)存隔離 CPU調(diào)度的單位:以進(jìn)程為單位進(jìn)行調(diào)度切換線程(Thread)的引入保留進(jìn)程作為資源分配單位,以更輕量級(jí)的線程作為CPU調(diào)度單位多個(gè)線程存在于同一進(jìn)程中,共享資源,獨(dú)立調(diào)度執(zhí)行多線程提高了應(yīng)用的并發(fā)能力,也加大了編程難度同步、互斥和進(jìn)程間通信同步和互斥:解決并發(fā)中的問(wèn)題同步:解決并發(fā)進(jìn)程的協(xié)作關(guān)系例:多線程流媒體播放——下載→解碼互斥:解決并發(fā)進(jìn)程的資源爭(zhēng)用關(guān)系例:多窗口聯(lián)機(jī)售票——查詢和售出不可交疊廣義的同步機(jī)制:包括同步和互斥同步機(jī)制早期主要針對(duì)OS內(nèi)核編程,因?yàn)椴l(fā)的應(yīng)用進(jìn)程之間默認(rèn)內(nèi)存隔離,沒(méi)有共用資源多線程應(yīng)用編程必須考慮同步互斥同步、互斥和進(jìn)程間通信進(jìn)程間通信(IPC)由于不同進(jìn)程間的內(nèi)存隔離,如果不同進(jìn)程間需要交換信息,需要OS內(nèi)核中轉(zhuǎn)主要的高級(jí)進(jìn)程間通信機(jī)制包括:共享存儲(chǔ)區(qū)、管道機(jī)制、消息機(jī)制同一進(jìn)程的線程間因?yàn)楣蚕韮?nèi)存空間,沒(méi)有通信需求,但是有普遍的同步互斥需求對(duì)于采用進(jìn)程間通信機(jī)制的不同進(jìn)程,采用共享存儲(chǔ)區(qū)機(jī)制需要考慮同步問(wèn)題,管道和消息機(jī)制自帶同步機(jī)制 A.4 內(nèi)存管理內(nèi)存管理目標(biāo)和功能基本概念內(nèi)存管理方式演變基本分頁(yè)管理基于分頁(yè)的虛擬存儲(chǔ)管理進(jìn)程地址空間的布局內(nèi)存管理目標(biāo)和功能內(nèi)存管理的目標(biāo)將多道程序同時(shí)裝入內(nèi)存,并使其互不干擾;盡可能提高內(nèi)存利用率和訪問(wèn)效率內(nèi)存管理的功能實(shí)現(xiàn)內(nèi)存的分配和回收提供實(shí)現(xiàn)地址變換所需的信息利用外存“擴(kuò)充”內(nèi)存容量實(shí)現(xiàn)存儲(chǔ)保護(hù),避免越權(quán)訪問(wèn)基本概念名字空間(符號(hào)地址)源程序中通過(guò)變量名和標(biāo)號(hào)標(biāo)識(shí)地址邏輯地址(相對(duì)地址)源程序經(jīng)匯編/編譯后形成目標(biāo)代碼,通常約定模塊首地址為0,其余地址都相對(duì)于首地址而編址物理地址(絕對(duì)地址)內(nèi)存中存儲(chǔ)單元的地址,通過(guò)總線尋址地址轉(zhuǎn)換(地址映射) CPU執(zhí)行指令時(shí)內(nèi)部使用邏輯地址,為了正確訪問(wèn)存儲(chǔ)單元,需將其轉(zhuǎn)換為可由總線直接尋址的物理地址,這一過(guò)程稱為地址映射內(nèi)存管理方式演變邏輯地址連續(xù)是內(nèi)存管理的基本前提 CPU執(zhí)行程序時(shí),大多數(shù)情況下執(zhí)行一條指令后程序計(jì)數(shù)器PC自動(dòng)增加若程序邏輯地址不連續(xù),則不能順序執(zhí)行早期OS采用連續(xù)分區(qū)管理方式早期CPU的內(nèi)存管理部件簡(jiǎn)單,只能進(jìn)行簡(jiǎn)單地址映射連續(xù)的邏輯地址要求連續(xù)的物理地址現(xiàn)代OS一般采用離散分區(qū)管理可以把連續(xù)邏輯地址映射到離散物理地址離散映射可以基于定長(zhǎng)的分頁(yè)或變長(zhǎng)的分段基本分頁(yè)管理分頁(yè)基本思想空間劃分頁(yè)面:將用戶進(jìn)程的地址空間劃分成大小相等的區(qū)域,稱為頁(yè)面(page), 從0開(kāi)始編號(hào)頁(yè)框:將內(nèi)存空間也劃分成與頁(yè)面大小相等的區(qū)域,稱為頁(yè)框(frame),從0開(kāi)始編號(hào)內(nèi)存分配為進(jìn)程分配內(nèi)存時(shí)以頁(yè)框?yàn)閱挝,將進(jìn)程中的編號(hào)連續(xù)的頁(yè)面裝入到多個(gè)頁(yè)框中(不需要相鄰)基本分頁(yè)管理頁(yè)面和頁(yè)框?qū)?yīng)示意基本分頁(yè)管理頁(yè)表頁(yè)表是實(shí)現(xiàn)分頁(yè)管理的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)頁(yè)表由OS設(shè)置,供CPU存儲(chǔ)管理部件使用作用:從頁(yè)面號(hào)到頁(yè)框號(hào)的映射頁(yè)表一般存放在內(nèi)存中頁(yè)表的基址(物理地址)及長(zhǎng)度由頁(yè)表寄存器給出基本分頁(yè)管理分頁(yè)地址變換機(jī)構(gòu)(硬件實(shí)現(xiàn))基本分頁(yè)管理分頁(yè)地址變換機(jī)構(gòu)(硬件實(shí)現(xiàn))將邏輯地址分成頁(yè)面號(hào)和頁(yè)內(nèi)地址根據(jù)頁(yè)表寄存器中頁(yè)表起始地址和頁(yè)號(hào)查找頁(yè)表,找到對(duì)應(yīng)于該頁(yè)式地址的頁(yè)表目頁(yè)表目地址=頁(yè)表起始地址+頁(yè)面號(hào)*頁(yè)表目長(zhǎng)度取出頁(yè)面號(hào)對(duì)應(yīng)的頁(yè)框號(hào),和邏輯地址的頁(yè)內(nèi)地址相加形成物理地址物理地址=頁(yè)框號(hào)×頁(yè)框長(zhǎng)度+頁(yè)內(nèi)位移量按物理地址訪問(wèn)內(nèi)存基于分頁(yè)的虛擬存儲(chǔ)管理基本分頁(yè)管理的優(yōu)點(diǎn)和問(wèn)題實(shí)現(xiàn)了頁(yè)框的離散分配,相對(duì)于連續(xù)分區(qū)管理,提高了物理內(nèi)存的利用率仍然要求在程序運(yùn)行前把所有的指令和數(shù)據(jù)裝入內(nèi)存,這實(shí)際上并非必要局部性原理程序運(yùn)行過(guò)程中,CPU訪問(wèn)的邏輯地址從時(shí)間和空間兩方面都是局部化的局部性原理源自人們編程時(shí)的自然習(xí)慣基于分頁(yè)的虛擬存儲(chǔ)管理虛擬存儲(chǔ)器管理基于局部性原理,程序運(yùn)行前沒(méi)有必要全部裝入內(nèi)存,僅須把將要運(yùn)行的頁(yè)面裝入即可運(yùn)行中如訪問(wèn)的頁(yè)面未在內(nèi)存中(缺頁(yè)),再動(dòng)態(tài)將該頁(yè)面調(diào)入內(nèi)存 如物理內(nèi)存已用完,則按某種置換算法將內(nèi)存中的一些頁(yè)面交換到外存虛擬存儲(chǔ)器是指具有請(qǐng)求頁(yè)調(diào)入功能和頁(yè)置換功能,能從邏輯上對(duì)內(nèi)存容量進(jìn)行擴(kuò)充的一種存儲(chǔ)器系統(tǒng)基于分頁(yè)的虛擬存儲(chǔ)管理請(qǐng)求分頁(yè)系統(tǒng)在基本分頁(yè)系統(tǒng)基礎(chǔ)上,增加了請(qǐng)求調(diào)頁(yè)功能、頁(yè)面置換功能所形成的頁(yè)式虛擬存儲(chǔ)器系統(tǒng)允許只裝入少量程序和數(shù)據(jù)頁(yè)面,便啟動(dòng)運(yùn)行;以后在硬件支持下通過(guò)調(diào)頁(yè)功能和置換功能,陸續(xù)將要訪問(wèn)的頁(yè)面調(diào)入內(nèi)存,同時(shí)把暫不訪問(wèn)的頁(yè)面換到外存 請(qǐng)求分頁(yè)系統(tǒng)需要硬件支持和管理軟件硬件支持:擴(kuò)展頁(yè)表機(jī)制、缺頁(yè)中斷機(jī)構(gòu)和地址變換機(jī)構(gòu)管理軟件:請(qǐng)求調(diào)頁(yè)功能和頁(yè)置換功能的軟件基于分頁(yè)的虛擬存儲(chǔ)管理硬件支持:擴(kuò)展頁(yè)表表目 狀態(tài)位:指示該頁(yè)是否已調(diào)入內(nèi)存(OS置/CPU用,觸發(fā)缺頁(yè)中斷)訪問(wèn)位:記錄該頁(yè)在一段時(shí)間內(nèi)是否被訪問(wèn)過(guò)(CPU置/OS用,選擇換出頁(yè))修改位:表示該頁(yè)調(diào)入內(nèi)存后是否被修改過(guò)(CPU置/OS用,決定是否需寫(xiě)到外存)外存地址:指出該頁(yè)在外存上的地址(OS置/OS用,調(diào)入頁(yè)面時(shí)使用)基于分頁(yè)的虛擬存儲(chǔ)管理硬件支持:缺頁(yè)中斷在請(qǐng)求分頁(yè)系統(tǒng)中,當(dāng)CPU訪問(wèn)的頁(yè)不在內(nèi)存時(shí),CPU產(chǎn)生一缺頁(yè)中斷,觸發(fā)OS內(nèi)核的請(qǐng)求調(diào)頁(yè)代碼缺頁(yè)中斷與一般中斷的區(qū)別:在指令執(zhí)行期間產(chǎn)生和處理中斷中斷處理完后會(huì)重啟指令執(zhí)行一條指令在執(zhí)行期間,可能產(chǎn)生多次缺頁(yè)中斷 基于分頁(yè)的虛擬存儲(chǔ)管理管理軟件請(qǐng)求調(diào)頁(yè):由缺頁(yè)中斷觸發(fā),通過(guò)讀取CPU相關(guān)寄存器,可以獲得引發(fā)缺頁(yè)的頁(yè)面號(hào),從對(duì)應(yīng)頁(yè)表表目可獲得該頁(yè)面對(duì)應(yīng)的外存地址(來(lái)自交換區(qū)或執(zhí)行文件),分配空閑頁(yè)框后讀入,最后更新頁(yè)表表目頁(yè)面置換:頁(yè)面置換一般是當(dāng)OS發(fā)現(xiàn)空閑頁(yè)框數(shù)不多時(shí)自動(dòng)執(zhí)行,把最近長(zhǎng)期不用的頁(yè)框內(nèi)容換出,標(biāo)記為空閑。為了提高效率,頁(yè)面置換和請(qǐng)求調(diào)頁(yè)各自獨(dú)立運(yùn)行,保證在調(diào)頁(yè)時(shí)總是有空閑頁(yè)框進(jìn)程地址空間的布局進(jìn)程的地址空間針對(duì)其邏輯地址地址空間大小與CPU架構(gòu)相關(guān),例如:32位CPU最大4GB(232)不同OS的進(jìn)程地址空間分配可以不同進(jìn)程地址空間的布局 Linux下不同進(jìn)程地址空間映射內(nèi)核地址空間部分固定且連續(xù)映射,所有進(jìn)程中此區(qū)域共享(即頁(yè)表中這一部分內(nèi)容相同)不同進(jìn)程用戶地址空間部分映射各不相同 A.5 外部設(shè)備管理對(duì)設(shè)備硬件的訪問(wèn)設(shè)備分類設(shè)備獨(dú)立性設(shè)備驅(qū)動(dòng)程序簡(jiǎn)化示例:Unix設(shè)備訪問(wèn)過(guò)程對(duì)設(shè)備硬件的訪問(wèn) CPU對(duì)外部設(shè)備的訪問(wèn)外部設(shè)備一般通過(guò)設(shè)備控制器進(jìn)行管理設(shè)備控制器的管理寄存器使CPU可以控制設(shè)備動(dòng)作、交換數(shù)據(jù)、查詢狀態(tài)控制寄存器:CPU寫(xiě),用于控制器接收命令數(shù)據(jù)寄存器:雙向/單向訪問(wèn),進(jìn)行數(shù)據(jù)交換狀態(tài)寄存器:CPU讀,用于查詢?cè)O(shè)備當(dāng)前狀態(tài)設(shè)備控制器的管理寄存器編址獨(dú)立的I/O空間編址:CPU有專用IN、OUT指令與內(nèi)存一起編址對(duì)設(shè)備硬件的訪問(wèn) I/O控制方式問(wèn)題由來(lái):高速CPU如何適應(yīng)低速設(shè)備輪詢方式 CPU循環(huán)讀取狀態(tài)寄存器,確定外部設(shè)備處于特定狀態(tài)時(shí)才寫(xiě)控制寄存器或讀寫(xiě)數(shù)據(jù)寄存器 CPU在輪詢期間,不能執(zhí)行其他程序中斷方式外部設(shè)備發(fā)生的事件通過(guò)CPU中斷線通知 CPU在向控制寄存器寫(xiě)入,啟動(dòng)設(shè)備動(dòng)作后即可轉(zhuǎn)入其他程序執(zhí)行,CPU和I/O設(shè)備并行中斷處理程序一般在設(shè)備驅(qū)動(dòng)程序中提供對(duì)設(shè)備硬件的訪問(wèn) I/O控制方式 DMA方式對(duì)于傳輸大量數(shù)據(jù)的磁盤(pán)、網(wǎng)卡而言,雖然中斷機(jī)制使CPU和設(shè)備可以并行工作,但是從設(shè)備控制器上的緩沖區(qū)到內(nèi)存之間的數(shù)據(jù)交換如果還是需要CPU介入,會(huì)降低CPU利用率引入DMA機(jī)制用于提高大量數(shù)據(jù)從設(shè)備控制器到內(nèi)存的交換,DMA控制器利用CPU訪問(wèn)內(nèi)存的間隙進(jìn)行數(shù)據(jù)交換 DMA控制器在設(shè)備控制器上提供,需要CPU啟動(dòng)DMA控制器的動(dòng)作,相應(yīng)代碼在設(shè)備驅(qū)動(dòng)程序中提供設(shè)備分類與設(shè)備驅(qū)動(dòng)類型相關(guān)分類字符設(shè)備以字符為單位傳輸數(shù)據(jù),數(shù)據(jù)量小,速度慢設(shè)備不可尋址,數(shù)據(jù)不可重用塊設(shè)備以定長(zhǎng)塊為單位傳輸數(shù)據(jù),數(shù)據(jù)量大,速度快設(shè)備可尋址,數(shù)據(jù)可重復(fù)訪問(wèn)網(wǎng)絡(luò)設(shè)備以不定長(zhǎng)幀為單位傳輸數(shù)據(jù),數(shù)據(jù)量大,速度快設(shè)備不可尋址,數(shù)據(jù)不可重用 設(shè)備獨(dú)立性設(shè)備獨(dú)立性(設(shè)備無(wú)關(guān)性)概念指OS設(shè)備管理為上層提供一致的訪問(wèn)入口并屏蔽訪問(wèn)細(xì)節(jié),使上層獨(dú)立于物理設(shè)備設(shè)備獨(dú)立性軟件在OS內(nèi)核設(shè)備管理中設(shè)計(jì)的一個(gè)軟件層次提供設(shè)備訪問(wèn)的一致入口和驅(qū)動(dòng)框架設(shè)備開(kāi)關(guān)表(與設(shè)備類型相關(guān))邏輯設(shè)備名實(shí)現(xiàn)獨(dú)立于設(shè)備的通用功能設(shè)備保護(hù),緩沖區(qū)管理,差錯(cuò)控制設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序特點(diǎn)與設(shè)備硬件、設(shè)備控制器寄存器、I/O控制方式密切相關(guān)在核心態(tài)運(yùn)行,作為內(nèi)核一部分一般由硬件廠商編寫(xiě),OS規(guī)定編寫(xiě)框架設(shè)備驅(qū)動(dòng)程序功能接收設(shè)備獨(dú)立性軟件發(fā)來(lái)抽象命令,轉(zhuǎn)換為設(shè)備相關(guān)的底層操作序列檢查設(shè)備狀態(tài),發(fā)出I/O命令或?qū)⒉僮髋抨?duì)響應(yīng)中斷請(qǐng)求,調(diào)用中斷處理程序設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序處理過(guò)程現(xiàn)代OS設(shè)備訪問(wèn)一般是中斷驅(qū)動(dòng)的,處理過(guò)程分兩部分:?jiǎn)?dòng)過(guò)程和中斷處理過(guò)程啟動(dòng)過(guò)程檢查I/O請(qǐng)求合法性檢查設(shè)備狀態(tài),確定是否可以啟動(dòng)請(qǐng)求的操作如果需要,傳送參數(shù)/設(shè)置工作模式向控制寄存器發(fā)出命令,啟動(dòng)設(shè)備中斷處理過(guò)程檢查設(shè)備狀態(tài),確定中斷原因,進(jìn)行相應(yīng)處理如果前一I/O請(qǐng)求完成,啟動(dòng)排隊(duì)的下一請(qǐng)求簡(jiǎn)化示例:Unix設(shè)備訪問(wèn)過(guò)程 Unix的設(shè)備獨(dú)立性軟件層設(shè)備開(kāi)關(guān)表實(shí)際是一個(gè)按照設(shè)備類型定義的函數(shù)指針結(jié)構(gòu)體具體設(shè)備驅(qū)動(dòng)程序在初始化時(shí)用自己提供的函數(shù)填入該結(jié)構(gòu)體所有同類設(shè)備的結(jié)構(gòu)體合起來(lái)構(gòu)成設(shè)備開(kāi)關(guān)表例:Unix塊設(shè)備開(kāi)關(guān)表示意簡(jiǎn)化示例:Unix設(shè)備訪問(wèn)過(guò)程 Unix的設(shè)備獨(dú)立性軟件層設(shè)備文件是應(yīng)用程序訪問(wèn)設(shè)備的通用入口記錄了設(shè)備文件名到設(shè)備驅(qū)動(dòng)程序入口的對(duì)應(yīng)例:設(shè)備文件信息 brw-rw----. 1 root disk 7, 0 Nov 1 19:00 /dev/loop0 crw--w----. 1 root tty 4, 1 Nov 1 19:00 /dev/tty1 簡(jiǎn)化示例:Unix設(shè)備訪問(wèn)過(guò)程簡(jiǎn)化示例假想場(chǎng)景一個(gè)應(yīng)用程序要讀取/dev/hd0上的某一塊內(nèi)容設(shè)備獨(dú)立性軟件工作過(guò)程根據(jù)設(shè)備文件, /dev/hd0的主設(shè)備號(hào)是0,對(duì)應(yīng)程序開(kāi)關(guān)表項(xiàng)是gd開(kāi)頭的一行基于/dev/hd0的從設(shè)備號(hào)和要讀取的塊號(hào),設(shè)備獨(dú)立性軟件構(gòu)造請(qǐng)求數(shù)據(jù)結(jié)構(gòu)bp 調(diào)用gdstrategy(bp),把I/O請(qǐng)求塊掛到I/O請(qǐng)求隊(duì)列尾部簡(jiǎn)化示例:Unix設(shè)備訪問(wèn)過(guò)程簡(jiǎn)化示例設(shè)備驅(qū)動(dòng)程序工作過(guò)程在gdstrategy(bp)函數(shù)內(nèi),調(diào)用gdaddr(bp),把I/O請(qǐng)求塊中的邏輯塊號(hào)轉(zhuǎn)換為物理塊號(hào)如果當(dāng)前設(shè)備空閑,調(diào)用gdstart(),從I/O請(qǐng)求隊(duì)列頭部取出一個(gè)I/O請(qǐng)求塊進(jìn)行處理,發(fā)出相應(yīng)I/O命令,啟動(dòng)磁盤(pán)設(shè)備磁盤(pán)中斷處理過(guò)程檢查設(shè)備狀態(tài)如果出錯(cuò),嘗試重做以便排除錯(cuò)誤若上次操作成功完成,繼續(xù)查找I/O請(qǐng)求隊(duì)列是否為空,若非空調(diào)用gdstart() A.6 文件系統(tǒng)管理文件系統(tǒng)的任務(wù)文件系統(tǒng)的核心功能實(shí)例:FAT文件系統(tǒng)格式從應(yīng)用角度看文件系統(tǒng)文件系統(tǒng)的任務(wù)文件系統(tǒng)的核心任務(wù)按文件名存取文件文件系統(tǒng)的主要功能實(shí)施對(duì)文件空間的管理實(shí)施對(duì)文件目錄的管理實(shí)施對(duì)存儲(chǔ)器空間的分配和回收提供文件訪問(wèn)保護(hù)為應(yīng)用程序提供文件訪問(wèn)接口 文件系統(tǒng)的核心功能文件空間的管理記錄哪些磁盤(pán)塊的內(nèi)容屬于同一個(gè)文件常用文件空間管理方法連續(xù)方式文件占據(jù)連續(xù)的若干磁盤(pán)塊,只需要記起始?jí)K號(hào)和長(zhǎng)度適用于只讀或順序訪問(wèn)設(shè)備上的文件系統(tǒng)(光盤(pán)或磁帶),主要用作備份介質(zhì)連續(xù)方式不能用于管理經(jīng)常改變的文件系統(tǒng)典型例子:ISO9660 文件系統(tǒng)的核心功能常用文件空間管理方法(續(xù))鏈接方式文件占據(jù)的離散磁盤(pán)塊通過(guò)鏈表查找為了提高鏈表訪問(wèn)效率,一般通過(guò)獨(dú)立于文件數(shù)據(jù)的文件分配表FAT顯式保存鏈接信息典型例子:FAT文件系統(tǒng)索引方式文件占據(jù)的離散磁盤(pán)塊通過(guò)索引表查找為了使索引表能夠適應(yīng)文件動(dòng)態(tài)增長(zhǎng)并管理大小差異巨大的文件,一般采用混合索引方式典型例子:EXT2文件系統(tǒng) 文件系統(tǒng)的核心功能文件目錄的管理實(shí)現(xiàn)從文件名到文件內(nèi)容訪問(wèn)入口的映射文件目錄的組織方式一般作為順序存儲(chǔ)的記錄文件文件目錄記錄項(xiàng):保存文件屬性信息主要信息:文件名、文件類型、文件長(zhǎng)度、文件盤(pán)塊位置其他信息:存取控制相關(guān)、文件訪問(wèn)相關(guān)文件目錄記錄項(xiàng)的兩種處理方式文件名與其他屬性一起存放:FAT 文件名與其他屬性分來(lái)存放:EXT2 文件系統(tǒng)的核心功能存儲(chǔ)器空間的分配和回收記錄磁盤(pán)塊的分配/空閑狀態(tài)常用方法空閑盤(pán)塊表:將空閑盤(pán)塊號(hào)記入數(shù)組中位示圖:用1bit代表一個(gè)盤(pán)塊的空閑狀況一種在FAT中變化:一個(gè)表目對(duì)應(yīng)一個(gè)盤(pán)塊成組管理:把相關(guān)數(shù)據(jù)結(jié)構(gòu)以組為單位分散到磁盤(pán)空閑塊中成組鏈接法:分組+空閑表成組位示圖:分組+位示圖實(shí)例:FAT文件系統(tǒng)格式磁盤(pán)布局 引導(dǎo)記錄中關(guān)鍵數(shù)據(jù)結(jié)構(gòu):BPB 主要內(nèi)容:磁盤(pán)總空間、每簇扇區(qū)數(shù)、FAT占用扇區(qū)數(shù)、根目錄長(zhǎng)度等目錄項(xiàng)內(nèi)容實(shí)例:FAT文件系統(tǒng)格式 FAT實(shí)例分析(FAT16) 00000200 f8 ff ff ff 00 00 ff ff 05 00 06 00 ff ff 08 00 00000210 09 00 0a 00 0b 00 0c 00 0d 00 0e 00 0f 00 10 00 00000220 11 00 12 00 13 00 14 00 15 00 16 00 17 00 18 00 ... ... 00000300 81 00 82 00 83 00 84 00 85 00 86 00 87 00 88 00 00000310 89 00 8a 00 8b 00 8c 00 8d 00 ff ff ff ff 90 00 00000320 91 00 92 00 93 00 94 00 95 00 96 00 97 00 ff ff 從FAT中可以看出有如下6個(gè)文件:0x03簇、0x04~0x06簇、0x07~0x8d簇、0x8e簇、0x8f~0x97簇實(shí)例:FAT文件系統(tǒng)格式根目錄分析目錄文件DIR-1、普通文件TESTFI~1的首簇號(hào)分別是0x03、0x04,對(duì)應(yīng)前述FAT中的頭兩個(gè)文件 0000f200 41 64 00 69 00 72 00 2d 00 31 00 0f 00 65 00 00 |Ad.i.r.-.1...e..| 0000f210 ff ff ff ff ff ff ff ff ff ff 00 00 ff ff ff ff |................| 0000f220 44 49 52 2d 31 20 20 20 20 20 20 10 00 00 12 10 |DIR-1 .....| 0000f230 8e 3b 8e 3b 00 00 12 10 8e 3b 03 00 00 00 00 00 |.;.;.....;......| 0000f240 41 74 00 65 00 73 00 74 00 66 00 0f 00 3c 69 00 |At.e.s.t.f...