嵌入式操作系統(tǒng)基礎(chǔ)ppt課件_第1頁
嵌入式操作系統(tǒng)基礎(chǔ)ppt課件_第2頁
嵌入式操作系統(tǒng)基礎(chǔ)ppt課件_第3頁
嵌入式操作系統(tǒng)基礎(chǔ)ppt課件_第4頁
嵌入式操作系統(tǒng)基礎(chǔ)ppt課件_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、嵌入式操作系統(tǒng)補充:操作系統(tǒng)基礎(chǔ),主講教師:謝謙 計算機大樓501,1,嵌入式操作系統(tǒng)概述,A.1 操作系統(tǒng)范圍界定 A.2 操作系統(tǒng)的運行 A.3 程序的并發(fā)運行 A.4 內(nèi)存管理 A.5 外部設(shè)備管理 A.6 文件系統(tǒng)管理,2,A.1 操作系統(tǒng)范圍界定,操作系統(tǒng)的層次 認識內(nèi)核 用戶態(tài)和核心態(tài) 內(nèi)核對外服務(wù)接口,3,操作系統(tǒng)的層次,用戶對操作系統(tǒng)的印象來自對外層軟件的操作經(jīng)驗 操作系統(tǒng)課程重點關(guān)注內(nèi)核 中間層次主要與應(yīng)用開發(fā)相關(guān) 內(nèi)核是理解OS關(guān)鍵,4,認識內(nèi)核,直觀認識1:磁盤上對應(yīng)哪個(哪些)文件? Linux:vmlinuz(經(jīng)過壓縮,典型大小10MB以內(nèi)) Windows:多個文件

2、(WindowsSystem32目錄下)Ntoskrnl.exe、HAL.Dll、NTDll.Dll、Win32k.Sys,還有很多驅(qū)動程序模塊 直觀認識2:在內(nèi)存中占據(jù)多大空間? 與硬件配置、軟件負載相關(guān) 很難界定內(nèi)核占用內(nèi)存空間的具體數(shù)值 真正的區(qū)分方法:內(nèi)核運行于核心態(tài),5,用戶態(tài)和核心態(tài)(系統(tǒng)態(tài)),為什么要區(qū)分用戶態(tài)和核心態(tài) 保護操作系統(tǒng)代碼免遭破壞 避免應(yīng)用程序代碼相互之間干擾 內(nèi)核代碼(且只有內(nèi)核代碼)運行于核心態(tài) 不同的“態(tài)” 靠CPU硬件實現(xiàn) CPU寄存器中設(shè)定保護級狀態(tài)位,據(jù)此對當前指令的執(zhí)行權(quán)限進行控制 系統(tǒng)啟動時一般處于非保護狀態(tài),當內(nèi)核代碼初始化時設(shè)置區(qū)分運行態(tài)并保護自

3、身,6,用戶態(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è)備訪問、開關(guān)中斷、修改存儲器管理寄存器、停機、轉(zhuǎn)換執(zhí)行狀態(tài)等 核心態(tài)的另一特權(quán):內(nèi)存訪問能力 越權(quán)執(zhí)行時:產(chǎn)生異常(中斷),7,內(nèi)核對外服務(wù)接口:系統(tǒng)調(diào)用,通過CPU和OS內(nèi)核軟硬件結(jié)合的保護機制,系統(tǒng)資源的管理權(quán)始終在內(nèi)核代碼控制下,應(yīng)用程序無法直接訪問 另一方面,應(yīng)用程序又必須訪問這些資源否則應(yīng)用程序幾乎無法作任何有價值的事情,甚至無法運行 因此,內(nèi)核需要在不破壞自身保護機制前提下,把應(yīng)用

4、程序需要用到的資源服務(wù)功能以某種形式提供出來,8,內(nèi)核對外服務(wù)接口:系統(tǒng)調(diào)用,OS內(nèi)核會選取應(yīng)用程序需要訪問的系統(tǒng)功能,以子程序(過程)方式實現(xiàn),供應(yīng)用程序調(diào)用 但是不允許應(yīng)用程序采用一般的過程調(diào)用方式來直接調(diào)用這些過程,而是采用系統(tǒng)調(diào)用這種特殊的調(diào)用方式,9,內(nèi)核對外服務(wù)接口:系統(tǒng)調(diào)用,系統(tǒng)調(diào)用區(qū)別于一般的過程調(diào)用 調(diào)用者和被調(diào)用者運行在不同狀態(tài),調(diào)用者在用戶態(tài)、被調(diào)用者在核心態(tài)運行 調(diào)用通過特殊的指令實現(xiàn):陷入指令或軟中斷指令進入 intel芯片:int指令(Linux使用int 0 x80,Windows使用int 0 x2e) arm芯片:swi指令(swi 0,或swi 調(diào)用號) 內(nèi)

5、核之外,通過C函數(shù)庫對系統(tǒng)調(diào)用進行封裝,從而屏蔽這些細節(jié),10,內(nèi)核對外服務(wù)接口:系統(tǒng)調(diào)用,系統(tǒng)調(diào)用的處理步驟,11,A.2 操作系統(tǒng)的運行,系統(tǒng)初啟 內(nèi)核正常運行:中斷驅(qū)動 應(yīng)用程序的運行 系統(tǒng)安裝,12,系統(tǒng)初啟,CPU怎樣工作? CPU正常加電時,會在時鐘信號激勵下不斷地進行取指、執(zhí)行的循環(huán)(取指令、解碼、取操作數(shù)、執(zhí)行指令、存結(jié)果等) 指令要從存儲器中讀取,對應(yīng)地址由CPU內(nèi)部特定寄存器決定(PC,程序計數(shù)器) PC的改變:自動增加(順序執(zhí)行)、跳轉(zhuǎn)指令、外部中斷和內(nèi)部異常 初始加電時,CPU會進入特定狀態(tài),PC也會被初始化為一個固定的值 intel芯片:實模式,F(xiàn)FFF:0000=0

6、 xFFFF0 ARM芯片:0 x0,13,系統(tǒng)初啟,基于BIOS模式計算機的啟動過程(EFI有所區(qū)別) 加電,CPU初始化,到固定地址取指開始執(zhí)行,激活BIOS程序; BIOS程序檢測系統(tǒng)配置;加載MBR程序 MBR程序加載OS Loader;OS Loader加載OS 進行OS初始化:根據(jù)系統(tǒng)配置等準備系統(tǒng)表格;加載Driver,標識設(shè)備等 創(chuàng)建系統(tǒng)初始進程,進而建立其它進程 控制權(quán)交給調(diào)度程序,進入OS正??刂?14,內(nèi)核正常運行:中斷驅(qū)動,當系統(tǒng)啟動完成后,根據(jù)內(nèi)核調(diào)度程序的調(diào)度結(jié)果,CPU會轉(zhuǎn)入用戶態(tài)執(zhí)行某個應(yīng)用程序的代碼,其后內(nèi)核代碼僅在需要時才會運行 這種“需要”可以是: 外部設(shè)

7、備有事件發(fā)生,需要內(nèi)核代碼處理 用戶態(tài)程序執(zhí)行錯誤,需要內(nèi)核代碼處理 用戶態(tài)程序需要使用內(nèi)核提供的功能 對內(nèi)核的“需求”通過中斷來體現(xiàn),即內(nèi)核代碼通過各種中斷入口反復執(zhí)行,15,內(nèi)核正常運行:中斷驅(qū)動,中斷機制的作用 使CPU能夠轉(zhuǎn)入執(zhí)行預設(shè)的例程,以響應(yīng)突發(fā)事件或處理異常情況 中斷響應(yīng) CPU中止當前指令或下一條指令;保存當前運行狀態(tài);轉(zhuǎn)入相應(yīng)處理程序(通過硬件機制自動實現(xiàn));執(zhí)行完畢后返回斷點繼續(xù)執(zhí)行 中斷是實現(xiàn)OS功能的基礎(chǔ) 中斷使得立即處理緊急事件成為可能 中斷是實現(xiàn)處理機與外設(shè)并行的基礎(chǔ) 中斷是實現(xiàn)多道程序之間調(diào)度切換的基礎(chǔ) 中斷是實現(xiàn)系統(tǒng)調(diào)用的基礎(chǔ),16,內(nèi)核正常運行:中斷驅(qū)動,C

8、PU的中斷源 內(nèi)部:執(zhí)行指令過程中由CPU自身產(chǎn)生,包括指令異常和陷阱(軟中斷)指令 外部:硬件中斷(可屏蔽中斷和不可屏蔽中斷),通過中斷控制器接到CPU的引腳 內(nèi)部中斷 內(nèi)存訪問相關(guān)異常是現(xiàn)代OS內(nèi)存管理的基礎(chǔ) 軟中斷,是系統(tǒng)調(diào)用的唯一入口 硬件中斷 I/O設(shè)備通過可屏蔽中斷通知CPU有事件發(fā)生,是設(shè)備驅(qū)動程序工作基礎(chǔ) 時鐘中斷,是分時調(diào)度的觸發(fā)來源,17,應(yīng)用程序的運行,一些基本概念 程序一般以二進制可執(zhí)行文件形式存在于磁盤上 CPU執(zhí)行的指令和訪問的數(shù)據(jù)須預先被裝入內(nèi)存 OS內(nèi)核要負責讀取可執(zhí)行文件裝入內(nèi)存 執(zhí)行文件的格式 由OS內(nèi)核裝入內(nèi)存,規(guī)定了執(zhí)行文件中必須提供的信息(如內(nèi)存區(qū)域劃

9、分、外部模塊入口等) 由編譯、鏈接程序生成,需符合OS規(guī)定的格式 常見的執(zhí)行文件格式:Windows的PE,Linux的ELF,一般上述關(guān)鍵信息都存在于“文件頭部”,18,應(yīng)用程序的運行,應(yīng)用程序運行過程中與內(nèi)核的關(guān)系 最初的創(chuàng)建和裝入 由另一個程序發(fā)起,OS內(nèi)核實施 程序執(zhí)行過程中要時常轉(zhuǎn)入執(zhí)行內(nèi)核代碼 因為需要OS內(nèi)核的服務(wù)而產(chǎn)生系統(tǒng)調(diào)用 外部設(shè)備發(fā)出中斷信號 程序執(zhí)行完成后,要求OS內(nèi)核結(jié)束自身,19,OS內(nèi)核與應(yīng)用程序的交替執(zhí)行,20,應(yīng)用程序的運行,一個簡化實例 場景 Windows下通過開始菜單打開記事本程序 輸入一些內(nèi)容 然后保存到文件,21,應(yīng)用程序的運行,一個簡化實例 分析

10、顯示開始菜單的程序explorer.exe explorer程序發(fā)現(xiàn)快捷方式對應(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í)行入口處開始執(zhí)行,22,應(yīng)用程序的運行,一個簡化實例 分析(續(xù)) notepad程序需要OS內(nèi)核顯示其用戶界面,進行一系列的系統(tǒng)調(diào)用,完成界面顯示 notepad程序需要調(diào)用OS內(nèi)核功能來獲取輸入事件(鼠標和鍵盤),調(diào)用相應(yīng)系統(tǒng)調(diào)用 如果沒有輸入事件發(fā)生(notepad程序邏輯無法繼續(xù)),OS

11、內(nèi)核會調(diào)度CPU執(zhí)行其他程序 有輸入事件發(fā)生(例如按鍵),系統(tǒng)調(diào)用返回,notepad程序獲得輸入,進行相應(yīng)處理(放入緩沖區(qū)),如有必要進一步調(diào)用系統(tǒng)調(diào)用(例如字符回顯),23,應(yīng)用程序的運行,一個簡化實例 分析(續(xù)) 上述獲取輸入事件、處理輸入過程反復進行 如果輸入事件對應(yīng)保存文件,調(diào)用相應(yīng)系統(tǒng)調(diào)用創(chuàng)建文件,并將緩沖區(qū)內(nèi)容寫入 如果輸入事件對應(yīng)退出程序,調(diào)用相應(yīng)系統(tǒng)調(diào)用,結(jié)束用戶態(tài)程序邏輯的執(zhí)行 OS內(nèi)核代碼釋放notepad程序所占據(jù)的資源,該程序運行結(jié)束 簡化:如果實際跟蹤系統(tǒng)調(diào)用會看到數(shù)目及其龐大,24,操作系統(tǒng)安裝,操作系統(tǒng)安裝的目標 安裝完成后,使OS可以自行啟動 OS安裝的位置與

12、系統(tǒng)類型、引導方式相關(guān) 安裝的一般過程與系統(tǒng)類型相關(guān) 對于通用計算機,一般安裝過程將OS部署在硬盤上,過程相對簡單、通用 對于嵌入式系統(tǒng),安裝過程有較大區(qū)別,引導程序、操作系統(tǒng)、文件系統(tǒng)需分別安裝,一般安裝到flash存儲,要通過特殊操作方法進行部署,經(jīng)常被稱為“刷機”、“燒寫”,25,操作系統(tǒng)安裝,通用計算機OS一般安裝過程 從安裝介質(zhì)加載并啟動OS,檢測系統(tǒng)配置,運行安裝程序 運行分區(qū)工具對硬盤進行分區(qū),將啟動代碼復制到硬盤特定區(qū)域(MBR,.) 格式化硬盤分區(qū)(制作文件系統(tǒng)),將OS內(nèi)核及所選軟件包復制到硬盤分區(qū) 對OS部件進行設(shè)置,指定啟動使用的OS內(nèi)核及相關(guān)參數(shù) 重新啟動,用新安裝內(nèi)

13、核啟動OS 進一步配置系統(tǒng)(如網(wǎng)絡(luò)設(shè)置等),26,A.3 程序的并發(fā)運行,程序的順序執(zhí)行與并發(fā)執(zhí)行 進程的引入 進程的創(chuàng)建與撤銷 進程的調(diào)度和切換 線程的引入 同步、互斥和進程間通信,27,程序的順序執(zhí)行與并發(fā)執(zhí)行,程序的順序執(zhí)行 前一程序執(zhí)行完成,后一程序才能開始 問題:CPU利用率低,程序在執(zhí)行過程中的I/O操作,會導致CPU空轉(zhuǎn)等待 程序的并發(fā)執(zhí)行 多個程序都裝入內(nèi)存等待執(zhí)行,當一個程序因I/O不能繼續(xù)執(zhí)行時,CPU可以轉(zhuǎn)而執(zhí)行其他程序,從而提高了CPU利用率 并發(fā)概念(區(qū)別于并行):微觀看任一時刻只有一個程序在運行,宏觀看一段時間內(nèi)多個程序都在運行,28,程序的順序執(zhí)行與并發(fā)執(zhí)行,并發(fā)

14、執(zhí)行增加了操作系統(tǒng)設(shè)計難度 多個程序都裝入內(nèi)存,互相不能干擾(屬于內(nèi)存管理功能) 需要記錄內(nèi)存中程序的不同狀態(tài):有一個正在運行,有一些隨時可以運行,有一些等待I/O事件而不能執(zhí)行 當運行中的程序因為I/O等原因不能繼續(xù)運行時,需要在可以運行的程序中選一個,轉(zhuǎn)去執(zhí)行新選中程序。在此過程中需要保存前一程序的執(zhí)行現(xiàn)場,保證以后能再次正確運行,29,進程的引入,當OS需要把程序的運行作為一個管理對象時,需要引入相應(yīng)的數(shù)據(jù)結(jié)構(gòu) 程序在內(nèi)存中的指令和數(shù)據(jù)不能修改,否則會影響程序執(zhí)行邏輯 OS需要為每一個在內(nèi)存中的程序附加一個數(shù)據(jù)結(jié)構(gòu),由OS代碼進行修改和訪問,在其中記錄程序狀態(tài)、保存執(zhí)行現(xiàn)場等 這種引入管

15、理數(shù)據(jù)結(jié)構(gòu)后可以被OS管理的程序被稱為進程(process),30,進程的引入,進程控制塊PCB 為管理進程所引入的數(shù)據(jù)結(jié)構(gòu),記錄了系統(tǒng)管理所需的全部信息 OS根據(jù)PCB而感知進程的存在,PCB是進程存在的唯一標志 PCB會先于程序的載入而創(chuàng)建,31,進程的引入,PCB的內(nèi)容 進程標志符:包括唯一的進程號,以及所屬用戶號、創(chuàng)建此進程的父進程號等 處理機狀態(tài)(斷點信息):進程切換時保存的處理機中各種寄存器的內(nèi)容 進程調(diào)度信息:記錄了進程調(diào)度相關(guān)的信息(狀態(tài)、調(diào)度優(yōu)先級、等待事件等) 其他信息:如內(nèi)存中程序區(qū)和數(shù)據(jù)區(qū)的地址,打開的資源清單,同步和通信機制等,32,進程的引入,進程的基本狀態(tài) 運行

16、就緒 阻塞,33,進程的創(chuàng)建與撤銷,進程的創(chuàng)建 除了個別進程在系統(tǒng)啟動時由OS內(nèi)核直接創(chuàng)建以外,其他進程都是另外進程通過系統(tǒng)調(diào)用要求內(nèi)核創(chuàng)建 這種進程之間的創(chuàng)建關(guān)系形成一個樹形結(jié)構(gòu),34,進程的創(chuàng)建與撤銷,進程的創(chuàng)建 OS內(nèi)核創(chuàng)建新進程的過程 申請一個空閑的PCB 為新進程分配資源 對PCB初始化 將PCB插入就緒隊列 返回進程號,35,進程的創(chuàng)建與撤銷,進程的撤銷 進程在完成其任務(wù)后,應(yīng)該撤銷,以便釋放所占據(jù)資源 正常結(jié)束的進程會主動調(diào)用進程終止系統(tǒng)調(diào)用,從而觸發(fā)進程撤銷 一些程序執(zhí)行過程中發(fā)生的異常情況可能導致OS內(nèi)核直接撤銷進程,36,進程的創(chuàng)建與撤銷,進程的撤銷 OS內(nèi)核撤銷進程的過程

17、 找到指定進程的PCB 回收該進程所占用的全部資源 處理子孫進程(終止所有子孫進程并回收它們所占用的資源,或者“過繼”以免成為孤兒) 將被終止進程的PCB從原來隊列中摘走,37,進程的調(diào)度和切換,進程調(diào)度算法 調(diào)度算法的目的是在多個候選者中選出一個進程作為下面要執(zhí)行的進程 不同的調(diào)度算法會影響系統(tǒng)的總體性能,是OS設(shè)計中的關(guān)鍵問題 從理解OS工作機制角度出發(fā),不必關(guān)心調(diào)度算法的細節(jié),38,進程的調(diào)度和切換,進程切換(上下文切換) 當調(diào)度算法選中新進程后執(zhí)行 首先保存當前進程的執(zhí)行現(xiàn)場:保存將要執(zhí)行的指令地址,把各類CPU寄存器存到PCB中特定區(qū)域 然后找到新選中進程的PCB,讀取上次保存的執(zhí)行

18、現(xiàn)場信息裝入對應(yīng)CPU寄存器,轉(zhuǎn)到上次斷點處指令開始執(zhí)行 通用的進程切換程序能保證進程多次被調(diào)度執(zhí)行時除了時間間斷之外,與連續(xù)執(zhí)行的狀態(tài)完全一致,39,進程的調(diào)度和切換,進程調(diào)度的時機:調(diào)度算法何時執(zhí)行? 以Unix/Linux為例,主要有兩類時機 一是當前進程主動放棄CPU 進程終止,或因為請求I/O進入阻塞狀態(tài) 二是OS內(nèi)核決定終止當前進程執(zhí)行 中斷處理程序中發(fā)現(xiàn)需要重新調(diào)度,如當前進程時間片用完,或高優(yōu)先級進程進入就緒狀態(tài) 中斷處理程序中一般不會直接調(diào)用調(diào)度算法,而是設(shè)置一個全局標志 當OS內(nèi)核從核心態(tài)返回用戶態(tài)之前,會檢查該標志,如置位則調(diào)用調(diào)度程序進而切換進程,40,進程的調(diào)度和切換

19、,進程調(diào)度方式 非搶占方式 處理機分配給某進程后便一直執(zhí)行,直到該進程主動放棄,OS不搶占進程的執(zhí)行 搶占方式 OS內(nèi)核可根據(jù)某種原則停止當前進程的執(zhí)行,轉(zhuǎn)而執(zhí)行另一進程 一般的操作系統(tǒng)內(nèi)核不可搶占,即:只有從核心態(tài)返回用戶態(tài)時才會發(fā)生進程切換 一些實時OS要求內(nèi)核可搶占,以最大限度保證實時進程優(yōu)先運行。內(nèi)核搶占將大大增加OS的實現(xiàn)難度,41,線程的引入,OS加入進程管理后,可以讓不同應(yīng)用程序并發(fā)執(zhí)行 如果一個應(yīng)用程序內(nèi)部希望并發(fā)執(zhí)行時,進程模型很不方便 應(yīng)用程序需要并發(fā)的例子:用word進行耗時的打印操作時還希望進行輸入處理;用瀏覽器查看同時包含動畫和音頻的網(wǎng)頁 如果打印和輸入處理在不同進程

20、,其數(shù)據(jù)區(qū)相互隔離,難以協(xié)調(diào) 如果打印和輸入處理在同一進程,沒有程序在兩者之間進行通用的切換,只能在程序主循環(huán)中反復查詢,增加編程難度,42,線程的引入,進程的角色 傳統(tǒng)進程是兩種角色的混合 資源分配的單位:主要表現(xiàn)為進程間的內(nèi)存隔離 CPU調(diào)度的單位:以進程為單位進行調(diào)度切換 線程(Thread)的引入 保留進程作為資源分配單位,以更輕量級的線程作為CPU調(diào)度單位 多個線程存在于同一進程中,共享資源,獨立調(diào)度執(zhí)行 多線程提高了應(yīng)用的并發(fā)能力,也加大了編程難度,43,同步、互斥和進程間通信,同步和互斥:解決并發(fā)中的問題 同步:解決并發(fā)進程的協(xié)作關(guān)系 例:多線程流媒體播放下載解碼 互斥:解決并發(fā)

21、進程的資源爭用關(guān)系 例:多窗口聯(lián)機售票查詢和售出不可交疊 廣義的同步機制:包括同步和互斥 同步機制早期主要針對OS內(nèi)核編程,因為并發(fā)的應(yīng)用進程之間默認內(nèi)存隔離,沒有共用資源 多線程應(yīng)用編程必須考慮同步互斥,44,同步、互斥和進程間通信,進程間通信(IPC) 由于不同進程間的內(nèi)存隔離,如果不同進程間需要交換信息,需要OS內(nèi)核中轉(zhuǎn) 主要的高級進程間通信機制包括:共享存儲區(qū)、管道機制、消息機制 同一進程的線程間因為共享內(nèi)存空間,沒有通信需求,但是有普遍的同步互斥需求 對于采用進程間通信機制的不同進程,采用共享存儲區(qū)機制需要考慮同步問題,管道和消息機制自帶同步機制,45,A.4 內(nèi)存管理,內(nèi)存管理目標

22、和功能 基本概念 內(nèi)存管理方式演變 基本分頁管理 基于分頁的虛擬存儲管理 進程地址空間的布局,46,內(nèi)存管理目標和功能,內(nèi)存管理的目標 將多道程序同時裝入內(nèi)存,并使其互不干擾;盡可能提高內(nèi)存利用率和訪問效率 內(nèi)存管理的功能 實現(xiàn)內(nèi)存的分配和回收 提供實現(xiàn)地址變換所需的信息 利用外存“擴充”內(nèi)存容量 實現(xiàn)存儲保護,避免越權(quán)訪問,47,基本概念,名字空間(符號地址) 源程序中通過變量名和標號標識地址 邏輯地址(相對地址) 源程序經(jīng)匯編/編譯后形成目標代碼,通常約定模塊首地址為0,其余地址都相對于首地址而編址 物理地址(絕對地址) 內(nèi)存中存儲單元的地址,通過總線尋址 地址轉(zhuǎn)換(地址映射) CPU執(zhí)行

23、指令時內(nèi)部使用邏輯地址,為了正確訪問存儲單元,需將其轉(zhuǎn)換為可由總線直接尋址的物理地址,這一過程稱為地址映射,48,內(nèi)存管理方式演變,邏輯地址連續(xù)是內(nèi)存管理的基本前提 CPU執(zhí)行程序時,大多數(shù)情況下執(zhí)行一條指令后程序計數(shù)器PC自動增加 若程序邏輯地址不連續(xù),則不能順序執(zhí)行 早期OS采用連續(xù)分區(qū)管理方式 早期CPU的內(nèi)存管理部件簡單,只能進行簡單地址映射 連續(xù)的邏輯地址要求連續(xù)的物理地址 現(xiàn)代OS一般采用離散分區(qū)管理 可以把連續(xù)邏輯地址映射到離散物理地址 離散映射可以基于定長的分頁或變長的分段,49,基本分頁管理,分頁基本思想 空間劃分 頁面:將用戶進程的地址空間劃分成大小相等的區(qū)域,稱為頁面(p

24、age), 從0開始編號 頁框:將內(nèi)存空間也劃分成與頁面大小相等的區(qū)域,稱為頁框(frame),從0開始編號 內(nèi)存分配 為進程分配內(nèi)存時以頁框為單位,將進程中的編號連續(xù)的頁面裝入到多個頁框中(不需要相鄰),50,基本分頁管理,頁面和頁框?qū)?yīng)示意,51,基本分頁管理,頁表 頁表是實現(xiàn)分頁管理的關(guān)鍵數(shù)據(jù)結(jié)構(gòu) 頁表由OS設(shè)置,供CPU存儲管理部件使用 作用:從頁面號到頁框號的映射 頁表一般存放在內(nèi)存中 頁表的基址(物理地址)及長度由頁表寄存器給出,52,基本分頁管理,分頁地址變換機構(gòu)(硬件實現(xiàn)),53,基本分頁管理,分頁地址變換機構(gòu)(硬件實現(xiàn)) 將邏輯地址分成頁面號和頁內(nèi)地址 根據(jù)頁表寄存器中頁表起

25、始地址和頁號查找頁表,找到對應(yīng)于該頁式地址的頁表目 頁表目地址=頁表起始地址+頁面號*頁表目長度 取出頁面號對應(yīng)的頁框號,和邏輯地址的頁內(nèi)地址相加形成物理地址 物理地址頁框號頁框長度頁內(nèi)位移量 按物理地址訪問內(nèi)存,54,基于分頁的虛擬存儲管理,基本分頁管理的優(yōu)點和問題 實現(xiàn)了頁框的離散分配,相對于連續(xù)分區(qū)管理,提高了物理內(nèi)存的利用率 仍然要求在程序運行前把所有的指令和數(shù)據(jù)裝入內(nèi)存,這實際上并非必要 局部性原理 程序運行過程中,CPU訪問的邏輯地址從時間和空間兩方面都是局部化的 局部性原理源自人們編程時的自然習慣,55,基于分頁的虛擬存儲管理,虛擬存儲器管理 基于局部性原理,程序運行前沒有必要全

26、部裝入內(nèi)存,僅須把將要運行的頁面裝入即可 運行中如訪問的頁面未在內(nèi)存中(缺頁),再動態(tài)將該頁面調(diào)入內(nèi)存 如物理內(nèi)存已用完,則按某種置換算法將內(nèi)存中的一些頁面交換到外存 虛擬存儲器是指具有請求頁調(diào)入功能和頁置換功能,能從邏輯上對內(nèi)存容量進行擴充的一種存儲器系統(tǒng),56,基于分頁的虛擬存儲管理,請求分頁系統(tǒng) 在基本分頁系統(tǒng)基礎(chǔ)上,增加了請求調(diào)頁功能、頁面置換功能所形成的頁式虛擬存儲器系統(tǒng) 允許只裝入少量程序和數(shù)據(jù)頁面,便啟動運行;以后在硬件支持下通過調(diào)頁功能和置換功能,陸續(xù)將要訪問的頁面調(diào)入內(nèi)存,同時把暫不訪問的頁面換到外存 請求分頁系統(tǒng)需要硬件支持和管理軟件 硬件支持:擴展頁表機制、缺頁中斷機構(gòu)和

27、地址變換機構(gòu) 管理軟件:請求調(diào)頁功能和頁置換功能的軟件,57,基于分頁的虛擬存儲管理,硬件支持:擴展頁表表目 狀態(tài)位:指示該頁是否已調(diào)入內(nèi)存(OS置/CPU用,觸發(fā)缺頁中斷) 訪問位:記錄該頁在一段時間內(nèi)是否被訪問過(CPU置/OS用,選擇換出頁) 修改位:表示該頁調(diào)入內(nèi)存后是否被修改過(CPU置/OS用,決定是否需寫到外存) 外存地址:指出該頁在外存上的地址(OS置/OS用,調(diào)入頁面時使用),58,基于分頁的虛擬存儲管理,硬件支持:缺頁中斷 在請求分頁系統(tǒng)中,當CPU訪問的頁不在內(nèi)存時,CPU產(chǎn)生一缺頁中斷,觸發(fā)OS內(nèi)核的請求調(diào)頁代碼 缺頁中斷與一般中斷的區(qū)別: 在指令執(zhí)行期間產(chǎn)生和處理中斷

28、 中斷處理完后會重啟指令執(zhí)行 一條指令在執(zhí)行期間,可能產(chǎn)生多次缺頁中斷,59,基于分頁的虛擬存儲管理,管理軟件 請求調(diào)頁:由缺頁中斷觸發(fā),通過讀取CPU相關(guān)寄存器,可以獲得引發(fā)缺頁的頁面號,從對應(yīng)頁表表目可獲得該頁面對應(yīng)的外存地址(來自交換區(qū)或執(zhí)行文件),分配空閑頁框后讀入,最后更新頁表表目 頁面置換:頁面置換一般是當OS發(fā)現(xiàn)空閑頁框數(shù)不多時自動執(zhí)行,把最近長期不用的頁框內(nèi)容換出,標記為空閑。 為了提高效率,頁面置換和請求調(diào)頁各自獨立運行,保證在調(diào)頁時總是有空閑頁框,60,進程地址空間的布局,進程的地址空間針對其邏輯地址 地址空間大小與CPU架構(gòu)相關(guān),例如:32位CPU最大4GB(232) 不

29、同OS的進程地址空間分配可以不同,61,進程地址空間的布局,Linux下不同進程地址空間映射 內(nèi)核地址空間部分固定且連續(xù)映射,所有進程中此區(qū)域共享(即頁表中這一部分內(nèi)容相同) 不同進程用戶地址空間部分映射各不相同,62,63,A.5 外部設(shè)備管理,對設(shè)備硬件的訪問 設(shè)備分類 設(shè)備獨立性 設(shè)備驅(qū)動程序 簡化示例:Unix設(shè)備訪問過程,64,對設(shè)備硬件的訪問,CPU對外部設(shè)備的訪問 外部設(shè)備一般通過設(shè)備控制器進行管理 設(shè)備控制器的管理寄存器使CPU可以控制設(shè)備動作、交換數(shù)據(jù)、查詢狀態(tài) 控制寄存器:CPU寫,用于控制器接收命令 數(shù)據(jù)寄存器:雙向/單向訪問,進行數(shù)據(jù)交換 狀態(tài)寄存器:CPU讀,用于查詢

30、設(shè)備當前狀態(tài) 設(shè)備控制器的管理寄存器編址 獨立的I/O空間編址:CPU有專用IN、OUT指令 與內(nèi)存一起編址,65,對設(shè)備硬件的訪問,I/O控制方式 問題由來:高速CPU如何適應(yīng)低速設(shè)備 輪詢方式 CPU循環(huán)讀取狀態(tài)寄存器,確定外部設(shè)備處于特定狀態(tài)時才寫控制寄存器或讀寫數(shù)據(jù)寄存器 CPU在輪詢期間,不能執(zhí)行其他程序 中斷方式 外部設(shè)備發(fā)生的事件通過CPU中斷線通知 CPU在向控制寄存器寫入,啟動設(shè)備動作后即可轉(zhuǎn)入其他程序執(zhí)行,CPU和I/O設(shè)備并行 中斷處理程序一般在設(shè)備驅(qū)動程序中提供,66,對設(shè)備硬件的訪問,I/O控制方式 DMA方式 對于傳輸大量數(shù)據(jù)的磁盤、網(wǎng)卡而言,雖然中斷機制使CPU和

31、設(shè)備可以并行工作,但是從設(shè)備控制器上的緩沖區(qū)到內(nèi)存之間的數(shù)據(jù)交換如果還是需要CPU介入,會降低CPU利用率 引入DMA機制用于提高大量數(shù)據(jù)從設(shè)備控制器到內(nèi)存的交換,DMA控制器利用CPU訪問內(nèi)存的間隙進行數(shù)據(jù)交換 DMA控制器在設(shè)備控制器上提供,需要CPU啟動DMA控制器的動作,相應(yīng)代碼在設(shè)備驅(qū)動程序中提供,67,設(shè)備分類,與設(shè)備驅(qū)動類型相關(guān)分類 字符設(shè)備 以字符為單位傳輸數(shù)據(jù),數(shù)據(jù)量小,速度慢 設(shè)備不可尋址,數(shù)據(jù)不可重用 塊設(shè)備 以定長塊為單位傳輸數(shù)據(jù),數(shù)據(jù)量大,速度快 設(shè)備可尋址,數(shù)據(jù)可重復訪問 網(wǎng)絡(luò)設(shè)備 以不定長幀為單位傳輸數(shù)據(jù),數(shù)據(jù)量大,速度快 設(shè)備不可尋址,數(shù)據(jù)不可重用,68,69,

32、設(shè)備獨立性,設(shè)備獨立性(設(shè)備無關(guān)性)概念 指OS設(shè)備管理為上層提供一致的訪問入口并屏蔽訪問細節(jié),使上層獨立于物理設(shè)備 設(shè)備獨立性軟件 在OS內(nèi)核設(shè)備管理中設(shè)計的一個軟件層次 提供設(shè)備訪問的一致入口和驅(qū)動框架 設(shè)備開關(guān)表(與設(shè)備類型相關(guān)) 邏輯設(shè)備名 實現(xiàn)獨立于設(shè)備的通用功能 設(shè)備保護,緩沖區(qū)管理,差錯控制,70,設(shè)備驅(qū)動程序,設(shè)備驅(qū)動程序特點 與設(shè)備硬件、設(shè)備控制器寄存器、I/O控制方式密切相關(guān) 在核心態(tài)運行,作為內(nèi)核一部分 一般由硬件廠商編寫,OS規(guī)定編寫框架 設(shè)備驅(qū)動程序功能 接收設(shè)備獨立性軟件發(fā)來抽象命令,轉(zhuǎn)換為設(shè)備相關(guān)的底層操作序列 檢查設(shè)備狀態(tài),發(fā)出I/O命令或?qū)⒉僮髋抨?響應(yīng)中斷請

33、求,調(diào)用中斷處理程序,71,設(shè)備驅(qū)動程序,設(shè)備驅(qū)動程序處理過程 現(xiàn)代OS設(shè)備訪問一般是中斷驅(qū)動的,處理過程分兩部分:啟動過程和中斷處理過程 啟動過程 檢查I/O請求合法性 檢查設(shè)備狀態(tài),確定是否可以啟動請求的操作 如果需要,傳送參數(shù)/設(shè)置工作模式 向控制寄存器發(fā)出命令,啟動設(shè)備 中斷處理過程 檢查設(shè)備狀態(tài),確定中斷原因,進行相應(yīng)處理 如果前一I/O請求完成,啟動排隊的下一請求,72,簡化示例:Unix設(shè)備訪問過程,Unix的設(shè)備獨立性軟件層 設(shè)備開關(guān)表 實際是一個按照設(shè)備類型定義的函數(shù)指針結(jié)構(gòu)體 具體設(shè)備驅(qū)動程序在初始化時用自己提供的函數(shù)填入該結(jié)構(gòu)體 所有同類設(shè)備的結(jié)構(gòu)體合起來構(gòu)成設(shè)備開關(guān)表

34、例:Unix塊設(shè)備開關(guān)表示意,73,簡化示例:Unix設(shè)備訪問過程,Unix的設(shè)備獨立性軟件層 設(shè)備文件 是應(yīng)用程序訪問設(shè)備的通用入口 記錄了設(shè)備文件名到設(shè)備驅(qū)動程序入口的對應(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,設(shè)備類型: 決定用哪個設(shè)備開關(guān)表,主設(shè)備號: 訪問設(shè)備開關(guān)表的索引,從設(shè)備號: 驅(qū)動程序找具體設(shè)備,74,簡化示例:Unix設(shè)備訪問過程,簡化示例 假想場景 一個應(yīng)用程序要讀取/dev/hd0上的某一塊內(nèi)容 設(shè)備獨

35、立性軟件工作過程 根據(jù)設(shè)備文件, /dev/hd0的主設(shè)備號是0,對應(yīng)程序開關(guān)表項是gd開頭的一行 基于/dev/hd0的從設(shè)備號和要讀取的塊號,設(shè)備獨立性軟件構(gòu)造請求數(shù)據(jù)結(jié)構(gòu)bp 調(diào)用gdstrategy(bp),把I/O請求塊掛到I/O請求隊列尾部,75,簡化示例:Unix設(shè)備訪問過程,簡化示例 設(shè)備驅(qū)動程序工作過程 在gdstrategy(bp)函數(shù)內(nèi),調(diào)用gdaddr(bp),把I/O請求塊中的邏輯塊號轉(zhuǎn)換為物理塊號 如果當前設(shè)備空閑,調(diào)用gdstart(),從I/O請求隊列頭部取出一個I/O請求塊進行處理,發(fā)出相應(yīng)I/O命令,啟動磁盤設(shè)備 磁盤中斷處理過程 檢查設(shè)備狀態(tài) 如果出錯,嘗

36、試重做以便排除錯誤 若上次操作成功完成,繼續(xù)查找I/O請求隊列是否為空,若非空調(diào)用gdstart(),76,A.6 文件系統(tǒng)管理,文件系統(tǒng)的任務(wù) 文件系統(tǒng)的核心功能 實例:FAT文件系統(tǒng)格式 從應(yīng)用角度看文件系統(tǒng),77,文件系統(tǒng)的任務(wù),文件系統(tǒng)的核心任務(wù) 按文件名存取文件 文件系統(tǒng)的主要功能 實施對文件空間的管理 實施對文件目錄的管理 實施對存儲器空間的分配和回收 提供文件訪問保護 為應(yīng)用程序提供文件訪問接口,78,文件系統(tǒng)的核心功能,文件空間的管理 記錄哪些磁盤塊的內(nèi)容屬于同一個文件 常用文件空間管理方法 連續(xù)方式 文件占據(jù)連續(xù)的若干磁盤塊,只需要記起始塊號和長度 適用于只讀或順序訪問設(shè)備上

37、的文件系統(tǒng)(光盤或磁帶),主要用作備份介質(zhì) 連續(xù)方式不能用于管理經(jīng)常改變的文件系統(tǒng) 典型例子:ISO9660,79,文件系統(tǒng)的核心功能,常用文件空間管理方法(續(xù)) 鏈接方式 文件占據(jù)的離散磁盤塊通過鏈表查找 為了提高鏈表訪問效率,一般通過獨立于文件數(shù)據(jù)的文件分配表FAT顯式保存鏈接信息 典型例子:FAT文件系統(tǒng) 索引方式 文件占據(jù)的離散磁盤塊通過索引表查找 為了使索引表能夠適應(yīng)文件動態(tài)增長并管理大小差異巨大的文件,一般采用混合索引方式 典型例子:EXT2文件系統(tǒng),80,文件系統(tǒng)的核心功能,文件目錄的管理 實現(xiàn)從文件名到文件內(nèi)容訪問入口的映射 文件目錄的組織方式 一般作為順序存儲的記錄文件 文件

38、目錄記錄項:保存文件屬性信息 主要信息:文件名、文件類型、文件長度、文件盤塊位置 其他信息:存取控制相關(guān)、文件訪問相關(guān) 文件目錄記錄項的兩種處理方式 文件名與其他屬性一起存放:FAT 文件名與其他屬性分來存放:EXT2,81,文件系統(tǒng)的核心功能,存儲器空間的分配和回收 記錄磁盤塊的分配/空閑狀態(tài) 常用方法 空閑盤塊表:將空閑盤塊號記入數(shù)組中 位示圖:用1bit代表一個盤塊的空閑狀況 一種在FAT中變化:一個表目對應(yīng)一個盤塊 成組管理:把相關(guān)數(shù)據(jù)結(jié)構(gòu)以組為單位分散到磁盤空閑塊中 成組鏈接法:分組+空閑表 成組位示圖:分組+位示圖,82,實例:FAT文件系統(tǒng)格式,磁盤布局 引導記錄中關(guān)鍵數(shù)據(jù)結(jié)構(gòu):BPB 主要內(nèi)容:磁盤總空間、每簇扇區(qū)數(shù)、FAT占用扇區(qū)數(shù)、根目錄長度等 目錄項內(nèi)容,83,實例:FAT文件系統(tǒng)格式,FAT實例分析(FAT16) 00000200 f8 ff

溫馨提示

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

評論

0/150

提交評論