版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第六章 輸入/輸出系統(tǒng) 第六章第六章 輸入輸入/輸出系統(tǒng)輸出系統(tǒng) 6.1 I/O系統(tǒng)的硬件結(jié)構(gòu)系統(tǒng)的硬件結(jié)構(gòu) 6.2 采用通道模型的采用通道模型的I/O系統(tǒng)系統(tǒng) 6.3 I/O系統(tǒng)的軟件組織系統(tǒng)的軟件組織 6.4 緩沖技術(shù)緩沖技術(shù) 6.5 磁盤的驅(qū)動(dòng)調(diào)度磁盤的驅(qū)動(dòng)調(diào)度6.6 設(shè)備分配程序設(shè)備分配程序6.7 WindowsNT的的I/O系統(tǒng)系統(tǒng) 6.8 Windows 2000/XP 設(shè)備管理機(jī)制實(shí)例分析設(shè)備管理機(jī)制實(shí)例分析第六章 輸入/輸出系統(tǒng) I/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時(shí)鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型I/O軟件設(shè)計(jì)目
2、標(biāo)I/O軟件層次結(jié)構(gòu)磁盤調(diào)度設(shè)備分配程序第六章 輸入/輸出系統(tǒng) I/O系統(tǒng)I/O硬件設(shè)備介紹硬件設(shè)備介紹磁盤時(shí)鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型第六章 輸入/輸出系統(tǒng) I/O設(shè)備硬件概覽第六章 輸入/輸出系統(tǒng) 3. 按資源分配角度分類按資源分配角度分類 (1) 獨(dú)占設(shè)備獨(dú)占設(shè)備。一經(jīng)分配給某進(jìn)程,在進(jìn)程釋放它之前,。一經(jīng)分配給某進(jìn)程,在進(jìn)程釋放它之前,其它設(shè)備不能使用。如打印機(jī)、紙帶讀入機(jī)等。其它設(shè)備不能使用。如打印機(jī)、紙帶讀入機(jī)等。 (2) 共享設(shè)備共享設(shè)備。允許若干進(jìn)程同時(shí)共享的設(shè)備。如磁盤。允許若干進(jìn)程同時(shí)共享的設(shè)備。如磁
3、盤機(jī)。機(jī)。(3) 虛擬設(shè)備虛擬設(shè)備。通過假脫機(jī)(。通過假脫機(jī)(Spooling)技術(shù)把原來的)技術(shù)把原來的獨(dú)占設(shè)備改造成可為若干個(gè)進(jìn)程所共享的設(shè)備。獨(dú)占設(shè)備改造成可為若干個(gè)進(jìn)程所共享的設(shè)備。 第六章 輸入/輸出系統(tǒng) 4. 按傳輸數(shù)據(jù)數(shù)量分類按傳輸數(shù)據(jù)數(shù)量分類 外部設(shè)備按傳輸數(shù)據(jù)的數(shù)量,分為字符設(shè)備和塊設(shè)備。 (1) 字符設(shè)備。每次傳輸數(shù)據(jù)以字節(jié)為單位字節(jié)為單位的設(shè)備稱為字符設(shè)備,如打印機(jī)、終端、鍵盤等低速設(shè)備。 (2) 塊設(shè)備。傳輸以數(shù)據(jù)塊為單位數(shù)據(jù)塊為單位進(jìn)行的設(shè)備稱為塊設(shè)備。 如磁盤、磁帶等高速外存儲(chǔ)器等。 第六章 輸入/輸出系統(tǒng) I/O系統(tǒng)I/O硬件設(shè)備介紹硬件設(shè)備介紹磁盤磁盤時(shí)鐘設(shè)備視
4、頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型第六章 輸入/輸出系統(tǒng) 2.2.磁盤結(jié)構(gòu)解析磁盤結(jié)構(gòu)解析第六章 輸入/輸出系統(tǒng) 磁盤結(jié)構(gòu)解析 cont. 第六章 輸入/輸出系統(tǒng) 磁盤結(jié)構(gòu)解析 cont.C,H,S第六章 輸入/輸出系統(tǒng) 表6-1 典型的軟盤和硬盤的技術(shù)參數(shù) 第六章 輸入/輸出系統(tǒng) I/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時(shí)鐘設(shè)備時(shí)鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型第六章 輸入/輸出系統(tǒng) 2. 時(shí)鐘時(shí)鐘 晶振每個(gè)脈沖減少一次計(jì)數(shù)器使用保持寄存器裝載計(jì)數(shù)器圖圖 6.3 可編程時(shí)鐘可
5、編程時(shí)鐘 可編程時(shí)鐘的優(yōu)點(diǎn)是它的中斷頻率可由軟件控制。 如果使用振蕩頻率為1 MHz的晶體,那么計(jì)數(shù)器每一微秒接收到一個(gè)脈沖, 對(duì)于16位的寄存器, 中斷可編程為按 1s至 65536s 的間隔發(fā)生。時(shí)鐘采用民用電產(chǎn)生固定頻率的震蕩采用晶振RC電路第六章 輸入/輸出系統(tǒng) 思考題:對(duì)于震蕩頻率為1MHz的晶振,要產(chǎn)生1s的時(shí)鐘中斷,如果用32位計(jì)數(shù)器,該計(jì)數(shù)器的值應(yīng)該設(shè)置多大?第六章 輸入/輸出系統(tǒng) 時(shí)鐘硬件所做的工作僅僅是按給定的時(shí)間間隔產(chǎn)生中斷, 其它和時(shí)間有關(guān)的工作必須由軟件(時(shí)鐘驅(qū)動(dòng)程序)來做。 時(shí)鐘軟件的任務(wù)包括: 維護(hù)日期和時(shí)間; 防止進(jìn)程運(yùn)行時(shí)間超過允許界限; 對(duì)CPU使用進(jìn)行記帳
6、; 處理用戶進(jìn)程提出的時(shí)間鬧鐘系統(tǒng)調(diào)用; 對(duì)系統(tǒng)某些部分提供監(jiān)視定時(shí)器; 支持直方圖監(jiān)視和統(tǒng)計(jì)信息搜集。 第六章 輸入/輸出系統(tǒng) 3. 終端終端(1) 存儲(chǔ)映像終端。 圖 6.4 存儲(chǔ)映像終端直接寫入視頻RAM CPU存儲(chǔ)器并行口總線視頻 RAM卡視頻控制器監(jiān)視器模擬視頻信號(hào)(例如 16 MHz)鍵盤第六章 輸入/輸出系統(tǒng) 視頻RAM卡和監(jiān)視器像素(Pixel):像素的顯示:。字符的顯示:需要知道字符的像素矩陣,也就是字符的“位模”。 不同的字符有不同的位模,這些位模通常不會(huì)變化, 因此保存在視頻ROM中。行的顯示:一行顯示80個(gè)字符,每個(gè)字符被劃分為9*14個(gè)像素 (包括字符間隔)。每次只顯
7、示一行掃描線。大家計(jì)算一下,要顯示一行字符,需要花費(fèi)多大的視頻RAM空間?4*6矩陣9*5矩陣第六章 輸入/輸出系統(tǒng) (2) RS-232終端。 圖 6.5 RS-232終端與計(jì)算機(jī)通信 CPU存儲(chǔ)器接口卡RS-232總線UART計(jì)算機(jī)UART終端接收線傳輸線UART:Universal Asynchronous Receiver Transmitter第六章 輸入/輸出系統(tǒng) I/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時(shí)鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式控制方式設(shè)備控制器通道模型第六章 輸入/輸出系統(tǒng) 6.1.3 I/O系統(tǒng)的硬件組織系統(tǒng)的硬
8、件組織 1. I/O控制方式控制方式 (1) 循環(huán)I/O測試方式。程序通過in, out 指令直接控制I/O設(shè)備, 進(jìn)行數(shù)據(jù)傳輸。 (2) 程序中斷I/O方式。 I/O操作仍然由CPU控制,一次只能傳輸 一個(gè)字或字符。外設(shè)不能直接訪問內(nèi)存。(3) DMA方式。(4) 通道方式。 第六章 輸入/輸出系統(tǒng) 圖 6.7 DMA方式下的數(shù)據(jù)傳輸 CPU內(nèi)存計(jì)數(shù)系統(tǒng)總線內(nèi)存地址計(jì)數(shù)磁盤控制器驅(qū)動(dòng)器緩沖器DMA寄存器第六章 輸入/輸出系統(tǒng) 采用DMA方式的數(shù)據(jù)傳輸處理過程如下: 當(dāng)進(jìn)程要求設(shè)備輸入數(shù)據(jù)時(shí),CPU把準(zhǔn)備存放輸入數(shù)據(jù)的內(nèi)存始址及要傳輸?shù)淖止?jié)數(shù)分別送入DMA控制器中的內(nèi)存地址寄存器和傳送字節(jié)計(jì)數(shù)
9、器;另外,還要把控制/狀態(tài)寄存器中的中斷允許位和啟動(dòng)位置1,從而啟動(dòng)設(shè)備,開始數(shù)據(jù)輸入。 發(fā)出數(shù)據(jù)輸入要求的進(jìn)程進(jìn)入阻塞狀態(tài), 進(jìn)程調(diào)度程序調(diào)度其它進(jìn)程占有CPU。 輸入設(shè)備不斷地挪用不斷地挪用CPU工作周期工作周期, 將數(shù)據(jù)從內(nèi)部緩沖區(qū)源源不斷地送入內(nèi)存,直至所要求的字節(jié)數(shù)全部傳送完畢。 DMA控制器在傳輸完成時(shí)通過中斷請求線發(fā)出中斷信號(hào), CPU接到中斷信號(hào)后轉(zhuǎn)中斷處理程序進(jìn)行相應(yīng)處理。 中斷處理結(jié)束后, CPU返回被中斷的進(jìn)程或去運(yùn)行重新被調(diào)度的進(jìn)程。 第六章 輸入/輸出系統(tǒng) (3) 設(shè)備控制器圖 6.8 設(shè)備控制器的組成 數(shù)據(jù)寄存器控制/狀態(tài)寄存器CPU與控制器接口數(shù)據(jù)線地址線控制線I
10、/O邏輯控制器與設(shè)備接口1控制器與設(shè)備接口i數(shù)據(jù)狀態(tài)控制數(shù)據(jù)狀態(tài)控制控制器與設(shè)備接口用于存放從CPU送來的數(shù)據(jù)/從設(shè)備產(chǎn)生的數(shù)據(jù)用于存放從CPU送來的控制信息/從設(shè)備產(chǎn)生的狀態(tài)信息第六章 輸入/輸出系統(tǒng) I/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時(shí)鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型通道模型第六章 輸入/輸出系統(tǒng) 6.2 采用通道模型的采用通道模型的I/O系統(tǒng)系統(tǒng) 6.2.1 通道類型通道類型 1.字節(jié)多路通道字節(jié)多路通道(Byte Multiplexor Channel)2. 選擇通道第六章 輸入/輸出系統(tǒng) IBM 370 的I/O結(jié)構(gòu)第
11、六章 輸入/輸出系統(tǒng) 6.2.4 CPU和通道間的通訊和通道間的通訊 1. 輸入輸入/輸出指令輸出指令 例如, 某系統(tǒng)中輸入輸出類指令主要有: SIO, TIO, HIO, TCH。 所有I/O指令都具有如下格式: 操作碼 B1 D1 由(B1)+D1形成的地址指出通道號(hào)和設(shè)備號(hào)的存放單元,該單元的內(nèi)容為: 通道號(hào)設(shè)備號(hào)第六章 輸入/輸出系統(tǒng) SIO(START I/O):用于啟動(dòng)指定通道和設(shè)備開始工作,SIO指令發(fā)出后,根據(jù)通道和設(shè)備狀態(tài)建立結(jié)果特征,即條件碼。 CPU根據(jù)執(zhí)行結(jié)果建立的條件碼得知此次啟動(dòng)是否成功,再確定下一步的動(dòng)作。 TIO(TEST I/O):用以檢查I/O操作是否完成,
12、建立相應(yīng)的條件碼。 HIO(HALT I/O):強(qiáng)行停止通道和I/O設(shè)備正在執(zhí)行的操作。 TCH(TEST CHANNEL):測試通道,根據(jù)對(duì)通道測試的結(jié)果建立相應(yīng)的條件碼。 第六章 輸入/輸出系統(tǒng) 2. CPU和通道間的通訊和通道間的通訊 中央處理機(jī)用戶進(jìn)程操作系統(tǒng)進(jìn)程 i系統(tǒng)調(diào)用(I/O 請求)保護(hù)進(jìn)程i的現(xiàn)場組織通道程序存CAW 到固定單元執(zhí)行 SIO 指令檢查條件碼啟動(dòng) 成功進(jìn)程i阻塞重新調(diào)度進(jìn)程j運(yùn)行進(jìn)程 j中斷進(jìn)程j保護(hù)現(xiàn)場分析中斷事件處理I/O中斷激活進(jìn)程i重新調(diào)度通道判斷狀態(tài)形成條件碼執(zhí)行通道程序控制設(shè)備操作執(zhí)行情況登記在CSW 中出現(xiàn)中斷事件CSW 送固定單元通道號(hào)、設(shè)備號(hào)送
13、入特定寄存器設(shè)備和設(shè)備控制器執(zhí)行規(guī)定操作圖 6.11 CPU啟動(dòng)通道的工作流程 第六章 輸入/輸出系統(tǒng) 通道I/O主要過程的時(shí)間關(guān)系示意圖第六章 輸入/輸出系統(tǒng) I/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時(shí)鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型I/O軟件設(shè)計(jì)目標(biāo)I/O軟件層次結(jié)構(gòu)磁盤調(diào)度設(shè)備分配程序第六章 輸入/輸出系統(tǒng) 6.3 I/O系統(tǒng)的軟件組織系統(tǒng)的軟件組織 6.3.1 I/O軟件設(shè)計(jì)的目標(biāo)軟件設(shè)計(jì)的目標(biāo) p 設(shè)備無關(guān)性設(shè)備無關(guān)性:使程序員寫出的軟件無需任何修改便能讀出軟盤、硬盤以及CD-ROM等不同設(shè)備上的文件, 而與具體設(shè)備無關(guān)。不
14、同設(shè)備之間的差異由操作系統(tǒng)去處理,操作系統(tǒng)會(huì)調(diào)用不同的設(shè)備驅(qū)動(dòng)程序來真正地將輸入數(shù)據(jù)寫到輸出設(shè)備上。p 錯(cuò)誤處理錯(cuò)誤處理:錯(cuò)誤應(yīng)盡可能在接近硬件的地方處理。p 同步同步/異步傳輸異步傳輸:p必須能處理獨(dú)占設(shè)備和共享設(shè)備的必須能處理獨(dú)占設(shè)備和共享設(shè)備的I/O操作操作。第六章 輸入/輸出系統(tǒng) 6.3.6 I/O系統(tǒng)軟件的層次結(jié)構(gòu)系統(tǒng)軟件的層次結(jié)構(gòu) 圖 6.12 I/O系統(tǒng)的層次結(jié)構(gòu) 用戶進(jìn)程設(shè)備無關(guān)軟件設(shè)備驅(qū)動(dòng)程序中斷處理程序硬件層次I/O應(yīng)答I/O功能進(jìn)行I/O調(diào)用; 格式化I/O;Spooling命名,保護(hù),阻塞,緩沖,分配建立設(shè)備寄存器;檢查狀態(tài)當(dāng)I/O結(jié)束時(shí),喚醒驅(qū)動(dòng)程序執(zhí)行I/O操作I/
15、O請 求第六章 輸入/輸出系統(tǒng) 用戶進(jìn)程用戶進(jìn)程count=read(fd, buffer, nbytes)if(count= =nbytes).喚醒用戶進(jìn)程繼續(xù)執(zhí)行喚醒用戶進(jìn)程繼續(xù)執(zhí)行設(shè)備無關(guān)軟件設(shè)備無關(guān)軟件通過fd找到對(duì)應(yīng)的文件file結(jié)構(gòu)和數(shù)據(jù)緩沖區(qū),并在緩沖區(qū)中查看數(shù)據(jù);若沒有數(shù)據(jù),則調(diào)用驅(qū)動(dòng)程序讀數(shù)據(jù)。count=設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序?qū)嵤┰O(shè)備讀控制所需的一系列操作硬件硬件 磁盤設(shè)備控制器 讀取數(shù)據(jù)完畢中斷處理程序第六章 輸入/輸出系統(tǒng) I/O請求處理過程系統(tǒng)功能調(diào)用第六章 輸入/輸出系統(tǒng) 6.4 緩緩 沖沖 技技 術(shù)術(shù) 6.4.1 單緩沖單緩沖 圖 6.13 無緩沖與單緩沖(a)
16、 無緩沖;(b) 單緩沖 用戶進(jìn)程操作系統(tǒng)I/O 設(shè)備(a)用戶進(jìn)程操作系統(tǒng)I/O 設(shè)備(b)第六章 輸入/輸出系統(tǒng) 單緩沖工作示意圖在單緩沖技術(shù)中CPU和外設(shè)輪流使用一個(gè)緩沖。每當(dāng)一個(gè)用戶進(jìn)程發(fā)出一個(gè)I/O請求時(shí),OS便在主存中為之分配一個(gè)緩沖區(qū)。圖7.10顯示了單緩沖的工作過程,處理一塊數(shù)據(jù)時(shí)間:Max(C,T)+M 。用戶區(qū)緩沖區(qū)輸入T傳送MI/O設(shè)備操作系統(tǒng)用戶進(jìn)程計(jì)算C第六章 輸入/輸出系統(tǒng) 6.4.2 雙緩沖雙緩沖 圖 6.14 雙緩沖 用戶進(jìn)程I/O 設(shè)備AB第六章 輸入/輸出系統(tǒng) 雙緩沖工作過程示意圖雙緩沖工作方式的基本方法是在設(shè)備輸入時(shí),先將數(shù)據(jù)輸入到緩沖區(qū)A,裝滿后便轉(zhuǎn)向緩
17、沖區(qū)B。此時(shí)操作系統(tǒng)可以從緩沖區(qū)A中提取數(shù)據(jù)傳送到用戶區(qū),最后由CPU對(duì)數(shù)據(jù)進(jìn)行計(jì)算。其工作過程如下圖所示。系統(tǒng)處理一塊數(shù)據(jù)的處理時(shí)間可粗略地認(rèn)為是MAX(C,T)。若CT,可使塊設(shè)備連續(xù)輸入;若CT,可使CPU不必等待設(shè)備輸入。也即采用雙緩沖區(qū),CPU和外設(shè)都可以連續(xù)處理而無需等待對(duì)方。但是,要求CPU和外設(shè)的速度相近。緩沖區(qū)A用戶區(qū)輸入T傳送M操作系統(tǒng)用戶進(jìn)程計(jì)算C緩沖區(qū)BI/O設(shè)備第六章 輸入/輸出系統(tǒng) 6.4.3 緩沖池緩沖池 1. 緩沖池的組成緩沖池的組成 對(duì)于既可用于輸入又可用于輸出的公用緩沖池, 其中至少應(yīng)包含以下三種類型的緩沖區(qū): 空閑緩沖區(qū); 裝滿輸入數(shù)據(jù)的緩沖區(qū); 裝滿輸出
18、數(shù)據(jù)的緩沖區(qū)。為了管理方便,可將相同類型的緩沖區(qū)鏈成一個(gè)隊(duì)列。于是,可形成以下三個(gè)隊(duì)列: (1) 空緩沖區(qū)隊(duì)列emq: 由空緩沖區(qū)所鏈成的隊(duì)列; (2) 輸入隊(duì)列inq: 由裝滿輸入數(shù)據(jù)的緩沖區(qū)所鏈成的隊(duì)列;(3) 輸出隊(duì)列outq: 由裝滿輸出數(shù)據(jù)的緩沖區(qū)所鏈成的隊(duì)列。 第六章 輸入/輸出系統(tǒng) 除了上述三個(gè)隊(duì)列外,還應(yīng)具有四種工作緩沖區(qū): (1) 用于收容輸入數(shù)據(jù)的工作緩沖區(qū); (2) 用于提取輸入數(shù)據(jù)的工作緩沖區(qū); (3) 用于收容輸出數(shù)據(jù)的工作緩沖區(qū); (4)用于提取輸出數(shù)據(jù)的工作緩沖區(qū)。 第六章 輸入/輸出系統(tǒng) 2. 緩沖池管理的基本操作緩沖池管理的基本操作 對(duì)緩沖池管理提供兩個(gè)基本操
19、作(過程): (1) getbuf(type):用于從type所指定的隊(duì)列的隊(duì)首, 摘下一個(gè)緩沖區(qū); (2) putbuf(type,number):用于將用參數(shù)number所指示的緩沖區(qū), 掛在type隊(duì)列上。 第六章 輸入/輸出系統(tǒng) 3. 緩沖池的工作方式緩沖池的工作方式 圖 6.15 緩沖池的工作方式 收容輸入hinsout提取輸出sinhout緩沖池收容輸出提取輸入用戶程序第六章 輸入/輸出系統(tǒng) 6.4.4 預(yù)先讀與延遲寫預(yù)先讀與延遲寫 1. 預(yù)先讀預(yù)先讀 操作系統(tǒng)讀塊設(shè)備時(shí),一般通過同步方式把一指定的數(shù)據(jù)塊讀入緩沖區(qū),此時(shí)用戶進(jìn)程不得不進(jìn)入阻塞狀態(tài),等待數(shù)據(jù)傳輸?shù)慕Y(jié)束。為了加快進(jìn)程的
20、推進(jìn)速度,提高CPU和塊設(shè)備工作的并行程度,最好在使用某一塊之前,用異步方式提早把它讀入緩沖區(qū)。當(dāng)用戶進(jìn)程實(shí)際需要該塊數(shù)據(jù)時(shí),可以立即從緩沖區(qū)取走而無需等待。 這種技術(shù)稱為預(yù)先讀。 第六章 輸入/輸出系統(tǒng) 2. 延遲寫延遲寫 當(dāng)塊設(shè)備進(jìn)行輸出時(shí),如果某一緩沖區(qū)只寫了一部分,則不要急于把該緩沖區(qū)的內(nèi)容寫到塊設(shè)備上,而是把寫塊操作推遲到某個(gè)適當(dāng)?shù)臅r(shí)機(jī)進(jìn)行。那么什么是適當(dāng)?shù)臅r(shí)機(jī)呢?一般有兩個(gè):其一是延遲寫的緩沖區(qū)被寫滿時(shí),其二是該緩沖區(qū)被重新分配時(shí)。 注意,文件關(guān)閉時(shí)緩沖區(qū)被強(qiáng)行物理寫入塊設(shè)備。第六章 輸入/輸出系統(tǒng) I/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時(shí)鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織
21、I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型I/O軟件設(shè)計(jì)目標(biāo)I/O軟件層次結(jié)構(gòu)磁盤調(diào)度磁盤調(diào)度設(shè)備分配程序第六章 輸入/輸出系統(tǒng) 6.5 磁盤的驅(qū)動(dòng)調(diào)度磁盤的驅(qū)動(dòng)調(diào)度 磁盤的驅(qū)動(dòng)調(diào)度是先進(jìn)行移臂(移動(dòng)存取臂)調(diào)度,再進(jìn)行旋轉(zhuǎn)調(diào)度。例如,某一時(shí)刻對(duì)磁盤的輸入/輸出請求序列是: 柱面(CC) 磁道(HH) 物理記錄R 7 4 1 7 4 8 7 4 5 40 6 4 2 7 7 第六章 輸入/輸出系統(tǒng) 進(jìn)一步考查 7 號(hào)柱面上的三個(gè)輸入/輸出請求。 按上述次序,磁盤需旋轉(zhuǎn)近兩周才能完成訪問。若將輸入/輸出請求按照下列的次序完成訪問: 柱面(CC) 磁道(HH) 物理記錄R 7 4 1 7
22、 4 5 7 4 8 第六章 輸入/輸出系統(tǒng) 移臂調(diào)度算法有: (1) 先來先服務(wù)算法(FCFS)。先來先服務(wù)調(diào)度算法是最簡單的一種方法,它按照輸入/輸出請求到達(dá)的順序, 逐一完成訪問請求。 (2) 最短查找時(shí)間優(yōu)先法(SSTF)。這種算法總是先完成距當(dāng)前存取臂距離最近的柱面上的輸入/輸出請求。 (3) 掃描法(SCAN)。由于請求序列具有動(dòng)態(tài)性質(zhì),所以可采用掃描法。存取臂從磁盤的一端出發(fā), 向另一端移動(dòng),遇到需要訪問的柱面就完成訪問請求,直至到達(dá)磁盤的另一端。到達(dá)另一端后,存取臂移動(dòng)方向就倒轉(zhuǎn)過來,繼續(xù)完成這一方向上的訪問請求。 第六章 輸入/輸出系統(tǒng) 圖 6.16 電梯調(diào)度算法流程 同當(dāng)前
23、柱面相同?現(xiàn)在是向里移?按最佳物理記錄存取有比當(dāng)前柱面號(hào)小的請求?有比當(dāng)前柱面號(hào)大的請求?A改變存取臂方向選擇柱面號(hào)最 大 者選擇柱面號(hào)最 小 者BYYNNNNNY有存取請求?執(zhí)行存取B改變存取臂方向A移臂到指定柱面登記當(dāng)前位置電梯調(diào)度入口結(jié)束YY第六章 輸入/輸出系統(tǒng) I/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時(shí)鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型I/O軟件設(shè)計(jì)目標(biāo)I/O軟件層次結(jié)構(gòu)設(shè)備分配程序設(shè)備分配程序磁盤調(diào)度第六章 輸入/輸出系統(tǒng) 6.6 設(shè)備分配程序設(shè)備分配程序 6.6.1 設(shè)備分配的數(shù)據(jù)結(jié)構(gòu)設(shè)備分配的數(shù)據(jù)結(jié)構(gòu) 在配置有通道的計(jì)算
24、機(jī)系統(tǒng)中,設(shè)備分配程序至少應(yīng)解決以下三個(gè)問題: (1) 是否有能用來為I/O請求提供的通路?(2) 是否有一條以上的通路可用?(3) 如果當(dāng)前尚無通路可用, 那么通路何時(shí)才能空閑? 第六章 輸入/輸出系統(tǒng) 圖 6.17 設(shè)備管理中的三種控制塊 第六章 輸入/輸出系統(tǒng) 圖 6.18 UCB, CUCB, CCB間的連接間的連接與此控制器相連的通道表0設(shè)備 E的 U CB控制器C的 CU CB與此控制器相連的通道表控制器D 的 CU CB通道 A 的 CCB通道 B的 CCB0與此設(shè)備相連的控制器表第六章 輸入/輸出系統(tǒng) 設(shè)備 E的 UCB正在使用該設(shè)備的進(jìn)程等待該設(shè)備的進(jìn)程表PCBCC-PCB0
25、BB-PCBAA -PCB圖圖 6.19 UCB和PCB的連接 第六章 輸入/輸出系統(tǒng) 圖 6.20 系統(tǒng)設(shè)備表與UCB的關(guān)系 CARDUCB始址PRINTUCB始址MTUCB始址DISCUCB始址MT的 UCB集合SDTUCB(T00)UCB(T01)UCB(T02)UCB(T)第六章 輸入/輸出系統(tǒng) 對(duì)于所請求的I/O設(shè)備,根據(jù)上述的查找方法,可能出現(xiàn)三種情況: (1) 對(duì)于所請求的I/O設(shè)備, 僅有一條通路可用, 例如: 通道B控制器C設(shè)備E。 (2) 對(duì)于所請求的I/O設(shè)備,可以找到一條以上的可用通路, 例如上例中,最多可找出四條可用通路: 通道A控制器C設(shè)備E通道A控制器D設(shè)備E通道
26、B控制器C設(shè)備E通道B控制器D設(shè)備E (3) 對(duì)于所請求的I/O設(shè)備, 沒有一條可用的通路。 第六章 輸入/輸出系統(tǒng) 6.6.2 I/O調(diào)度程序調(diào)度程序 在多進(jìn)程的系統(tǒng)中,由于進(jìn)程數(shù)多于設(shè)備數(shù),就必然要引起進(jìn)程對(duì)資源的爭奪。為使系統(tǒng)有條不紊地工作,系統(tǒng)必須具有一套合理的設(shè)備分配原則。 這些原則與下述的四個(gè)因素有關(guān): (1 1)I/O設(shè)備的固有屬性 (2 2) I/O設(shè)備的分配算法 先請求先服務(wù)。先請求先服務(wù)。 優(yōu)先級(jí)高者優(yōu)先優(yōu)先級(jí)高者優(yōu)先。 (3 3) 設(shè)備分配的安全性 (4 4) 與設(shè)備的無關(guān)性 不能采用時(shí)間片輪轉(zhuǎn)法!第六章 輸入/輸出系統(tǒng) 6.6.3 設(shè)備分配的實(shí)施設(shè)備分配的實(shí)施 1. 單
27、通路單通路I/O系統(tǒng)的設(shè)備分配系統(tǒng)的設(shè)備分配在單通路I/O系統(tǒng)中, 按如下步驟實(shí)施設(shè)備分配:(1) 分配設(shè)備。 (2) 分配控制器。 (3) 分配通道。 第六章 輸入/輸出系統(tǒng) 2. 多通路多通路I/O系統(tǒng)的設(shè)備分配系統(tǒng)的設(shè)備分配 假定某進(jìn)程n向系統(tǒng)提出I/O請求,要求為它分配一臺(tái)I/O設(shè)備。于是系統(tǒng)可選取該類設(shè)備中的任何一臺(tái)設(shè)備分配給該進(jìn)程。其步驟如下: (1) 根據(jù)要求I/O的進(jìn)程n所提供的設(shè)備類型, 檢索SDT表,找到第一個(gè)該類物理設(shè)備的UCB,由狀態(tài)信息可知其忙閑情況。若忙, 則檢查第二個(gè)物理設(shè)備的UCB。若該類型的全部設(shè)備都處于忙碌狀態(tài), 表明該類設(shè)備已分配完畢。進(jìn)程n的此次I/O請
28、求無法滿足, 只好把進(jìn)程n插入到等待該類設(shè)備的隊(duì)列中。 只要在該類設(shè)備中有一個(gè)空閑設(shè)備,系統(tǒng)便可對(duì)其計(jì)算分配該設(shè)備給進(jìn)程n的安全性。 若安全,則把設(shè)備分配給進(jìn)程n,否則將其插入該類設(shè)備的等待隊(duì)列。 第六章 輸入/輸出系統(tǒng) (2) 當(dāng)系統(tǒng)把第i個(gè)設(shè)備分配給進(jìn)程n后,便可通過檢查與此設(shè)備相連的第一個(gè)CUCB,而得知該控制器是否忙碌;若忙, 再檢查第二個(gè)CUCB表。若與此設(shè)備相連的所有的控制器都忙,則表明無控制器可分配給設(shè)備i。只要設(shè)備i不是該類設(shè)備中的最后一個(gè),便可返回到步驟(1),試圖再找下一個(gè)空閑設(shè)備;否則,仍將該進(jìn)程插入控制器等待隊(duì)列中。 第六章 輸入/輸出系統(tǒng) (3) 若有空閑的控制器,便
29、可進(jìn)一步檢查與此控制器相連的第一個(gè)通道是否忙碌。若忙,再查看第二個(gè)CCB表,若與此控制器相連的全部通道都忙,表明無通道可分配給控制器j。只要控制器j不是該設(shè)備i的最后一個(gè)控制器,便返回到步驟(2),試圖找出一個(gè)空閑的控制器,否則,將該進(jìn)程插入通道等待隊(duì)列。 若有空閑通道可用,則此次設(shè)備分配成功,將相應(yīng)的設(shè)備、控制器和通道分配給進(jìn)程n,接著便可啟動(dòng)I/O設(shè)備,開始信息傳送。 多通路I/O系統(tǒng)設(shè)備分配的流程示于圖 6.21。 第六章 輸入/輸出系統(tǒng) 圖 6.21 設(shè)備分配流程圖 從SDT查該類設(shè)備的UC B始址檢查UC B狀態(tài) 忙?安全?分配設(shè)備i 設(shè)備i 最后?控制器j最后?最后一個(gè)?12NYN
30、YNYNNY為進(jìn)程分配一臺(tái)物理設(shè)備設(shè)備等待鏈查找C UC B 最后一個(gè)?Y1控制器等待鏈Y2NY通道等待鏈分配結(jié)束N 忙?分配通道k分配控制器j查找C C B 忙? 最后一個(gè)?NYY第六章 輸入/輸出系統(tǒng) 圖 6.22 I/O系統(tǒng)概貌 1. I/O系統(tǒng)概貌系統(tǒng)概貌 6.7.1 I/O系統(tǒng)的結(jié)構(gòu)系統(tǒng)的結(jié)構(gòu) 6.7 Windows NT的的I/O系統(tǒng)系統(tǒng) 第六章 輸入/輸出系統(tǒng) NT執(zhí)行體的I/O系統(tǒng)接收用戶態(tài)和核心態(tài)進(jìn)程的I/O請求, 以不同的方式傳送到I/O設(shè)備。I/O系統(tǒng)由一組負(fù)責(zé)處理各種設(shè)備的輸入/輸出部件構(gòu)成。 這些部件有: (1) I/O管理程序; (2) 文件系統(tǒng); (3) 緩沖存儲(chǔ)
31、管理器(Cache Manager); (4) 設(shè)備驅(qū)動(dòng)程序(Device Driver); (5) 網(wǎng)絡(luò)轉(zhuǎn)發(fā)程序(NetWork Redirector)和網(wǎng)絡(luò)服務(wù)程序(Network Server)。 第六章 輸入/輸出系統(tǒng) 2. I/O管理程序管理程序 I/O管理程序建立了NT執(zhí)行體的I/O模型,它實(shí)現(xiàn)與設(shè)備無關(guān)的輸入/輸出,即它并不進(jìn)行實(shí)際的I/O處理。它的主要工作是建立一個(gè)代表I/O操作的I/O請求包IRP(I/O Request Packet),把IRP傳送給適當(dāng)?shù)尿?qū)動(dòng)程序并在I/O完成后處理其結(jié)果,最后撤消IRP。 與此相反,驅(qū)動(dòng)程序接收IRP,執(zhí)行IRP規(guī)定的操作,并在完成后將I
32、RP傳回I/O管理程序或通過驅(qū)動(dòng)程序再傳到另一驅(qū)動(dòng)程序, 以求進(jìn)一步的處理。 I/O系統(tǒng)采用包驅(qū)動(dòng)方式,每個(gè)I/O請求都用一個(gè)I/O請求包來表達(dá)。每個(gè)IRP是一個(gè)數(shù)據(jù)結(jié)構(gòu),用以控制在每一操作步驟上的I/O操作的處理。 第六章 輸入/輸出系統(tǒng) 3. 虛擬文件虛擬文件 除了I/O管理程序,該結(jié)構(gòu)中還有四類驅(qū)動(dòng)程序:文件系統(tǒng)、緩沖存儲(chǔ)管理程序、 設(shè)備驅(qū)動(dòng)程序、網(wǎng)絡(luò)轉(zhuǎn)發(fā)程序。要把這四類功能、特性均不相同的部件組合在一起,并建立一個(gè)一體化的統(tǒng)一系統(tǒng),必須進(jìn)行高層的抽象,建立一個(gè)統(tǒng)一的邏輯模型。 NT建立的邏輯模型吸收了UNIX I/O系統(tǒng)的概念,認(rèn)為“所有的讀寫數(shù)據(jù)都看成是直接送往虛擬文件的字節(jié)流”。虛
33、擬文件用文件描述符表示, 處理虛擬文件就像處理一個(gè)真正的文件。由操作系統(tǒng)判定這個(gè)虛擬文件究竟是設(shè)備、管道、網(wǎng)絡(luò)還是磁盤上的真正文件。 第六章 輸入/輸出系統(tǒng) 圖 6.23 打開一個(gè)文件對(duì)象 系統(tǒng)服務(wù)對(duì)象管理程序安全性參考監(jiān)視程序進(jìn)程管理程序本地過程調(diào)用功能虛擬內(nèi)存管理程序文件系統(tǒng)高速緩沖管理程序設(shè)備驅(qū)動(dòng)程序網(wǎng)絡(luò)驅(qū)動(dòng)程序I/O 管理程序 創(chuàng)建文件對(duì)象 返回對(duì)象句柄內(nèi)核Win32DLLCRuntimeDLLWin32應(yīng) 用 程 序 fp fopen(D:myfile.dat,r) CreateFile(D:myfile.dat, ) 返 回 文 件 句 柄 NtCreateFile(D:myfil
34、e.dat, )用戶態(tài)核心態(tài)Win32子 系 統(tǒng)第六章 輸入/輸出系統(tǒng) 6.7.2 驅(qū)動(dòng)程序模型驅(qū)動(dòng)程序模型 每一個(gè)驅(qū)動(dòng)程序都由以下標(biāo)準(zhǔn)成套(或組合)組成: (1) 一個(gè)初始化程序; (2) 一組調(diào)度程序; (3) 一個(gè)啟動(dòng)I/O的程序; (4) 一個(gè)中斷服務(wù)程序; (5) 一個(gè)中斷服務(wù)DPC(延遲過程調(diào)用)程序; (6) 一個(gè)完成例程; (7) 一個(gè)撤消I/O例程; (8) 一個(gè)卸載例程; (9) 一個(gè)出錯(cuò)記錄例程。 第六章 輸入/輸出系統(tǒng) 6.7.3 同步同步I/O操作與異步操作與異步I/O操作操作 圖圖 6.24 同步同步I/O操作操作 應(yīng)用程序WriteFile(file_handle
35、,data, )Win32子系統(tǒng)調(diào)用NT寫文件服務(wù)I/O管理器檢查參數(shù),建立 IRP調(diào)用設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序I/O對(duì)設(shè)備排隊(duì)執(zhí) 行 I/O轉(zhuǎn)換中斷服務(wù)設(shè)備處理中斷完成IRP返回核心態(tài)用戶態(tài)返回?cái)?shù)據(jù)(等待服務(wù)完成)ReadFile(file_handle, data, )時(shí)間第六章 輸入/輸出系統(tǒng) 同步I/O操作過程可歸納如下: (1) 按用戶要求,I/O管理程序?yàn)橹纬蒊RP, 并把它傳送給驅(qū)動(dòng)程序, 由驅(qū)動(dòng)程序完成I/O操作。 (2) 設(shè)備完成I/O操作后,發(fā)中斷請求,設(shè)備驅(qū)動(dòng)程序中的中斷處理程序進(jìn)行相應(yīng)中斷處理。 (3) I/O管理程序完成I/O請求。 在大多數(shù)操作系統(tǒng)中,同步I/O是
36、標(biāo)準(zhǔn)的,Windows NT除了提供同步I/O外還提供異步I/O,允許子系統(tǒng)選用同步I/O或異步I/O, 并根據(jù)它的應(yīng)用程序接口操作的不同,為客戶應(yīng)用程序提供不同類型的I/O。 第六章 輸入/輸出系統(tǒng) 圖 6.25 異步I/O 應(yīng)用程序WriteFile(file_handle,data, overlapped)Win32子系統(tǒng)調(diào)用NT寫文件服務(wù)I/O管理程序檢查參數(shù),建立 IRP調(diào)用設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序I/O對(duì)設(shè)備排隊(duì)執(zhí) 行 I/O轉(zhuǎn)換中斷服務(wù)設(shè)備處理中斷完成IRP設(shè)備文件句柄為有信號(hào)狀態(tài)核心態(tài)用戶態(tài)(執(zhí)行其它任務(wù))ReadFile(file_handle,data, overlappe
37、d)時(shí)間返回返回返回I/O掛起狀態(tài)Wait(file_handle)(等待結(jié)束)第六章 輸入/輸出系統(tǒng) 6.8 Windows 2000/XP 設(shè)備管理機(jī)制實(shí)例分析 6.8.1 Windosw 2000/XP輸入/輸出系統(tǒng)的體系結(jié)構(gòu) 傳統(tǒng)上認(rèn)為,輸入/輸出(I/O)系統(tǒng)是操作系統(tǒng)設(shè)計(jì)中最難規(guī)范化的領(lǐng)域,因?yàn)镮/O設(shè)備五花八門、種類繁雜,小到傳感器、鼠標(biāo),大到磁盤、磁帶、繪圖儀等等,它們的性能截然不同??傊鋽?shù)據(jù)格式、數(shù)據(jù)組織到使用方法都有很大差別。如何規(guī)范化設(shè)計(jì),這對(duì)操作系統(tǒng)設(shè)計(jì)也是需要研究的。第六章 輸入/輸出系統(tǒng) Windows 2000/XP操作系統(tǒng)采用和強(qiáng)調(diào)了軟件工程中抽象的原則,在
38、設(shè)計(jì)中全力找出各種事務(wù)的共性,用一致的模型、方法和界面來使其規(guī)范化,如用客戶/服務(wù)器模型來規(guī)范各個(gè)用戶進(jìn)程之間的關(guān)系。 Windows 2000/XP 的I/O系統(tǒng)體系結(jié)構(gòu)如圖6.26所示,它由幾個(gè)可執(zhí)行模塊和大量設(shè)備驅(qū)動(dòng)程序組成。 通過這張圖我們可以看到,Windows 2000的I/O體系的設(shè)計(jì)使用了分層結(jié)構(gòu),這有利于實(shí)現(xiàn)其平臺(tái)無關(guān)性,也為其他目標(biāo)的實(shí)現(xiàn)帶來了便利。 第六章 輸入/輸出系統(tǒng) 核心態(tài)安裝組件安裝組件用戶態(tài).inf.cat注冊表執(zhí)行體其他接口ACPI硬件抽象層HAL應(yīng)用程序WIN32系統(tǒng)服務(wù)WMI服務(wù)用戶模式即插即用管理器安裝組件WDM WMI 例程即插即用管理器電源管理器I/
39、O管理器即插即用接口電源管理器接口I/O接口WDM接口PC卡USBPCIWDM即插即用總線驅(qū)動(dòng)技術(shù)WDM設(shè)備驅(qū)動(dòng)程序Windows 2000即插即用驅(qū)動(dòng)程序圖6.26 Windows 2000/XP的I/O系統(tǒng)體系結(jié)構(gòu)第六章 輸入/輸出系統(tǒng) 6.8.2 核心態(tài)模塊 大部分I/O操作并不會(huì)涉及所有的組件,一個(gè)典型的I/O操作從應(yīng)用程序調(diào)用一個(gè)與I/O操作有關(guān)的函數(shù)開始,通常會(huì)涉及I/O管理器、一個(gè)或多個(gè)設(shè)備驅(qū)動(dòng)程序以及硬件抽象層。I/O系統(tǒng)相關(guān)的核心態(tài)模塊的主要功能如下。第六章 輸入/輸出系統(tǒng) I/O管理器:把應(yīng)用程序和系統(tǒng)組件連接到各種虛擬的、邏輯的和物理的設(shè)備上,并定義了一個(gè)支持設(shè)備驅(qū)動(dòng)程序
40、的基本構(gòu)架,負(fù)責(zé)驅(qū)動(dòng)I/O請求的處理,為設(shè)備驅(qū)動(dòng)程序提供核心服務(wù)。它把用戶態(tài)的讀寫轉(zhuǎn)化為I/O請求包IRP。第六章 輸入/輸出系統(tǒng) 即插即用管理器:通過與I/O管理器和總線驅(qū)動(dòng)程序的協(xié)同工作來檢測硬件資源的分配,并檢測相應(yīng)硬件設(shè)備的添加和刪除。 電源管理器:通過與I/O管理器的協(xié)調(diào)工作,來檢測整個(gè)系統(tǒng)和單個(gè)硬件設(shè)備,完成不同電源狀態(tài)的轉(zhuǎn)換。 WMI支持例程:也叫做Windows驅(qū)動(dòng)程序模型 WDM(Windows Driver Model)的提供者,運(yùn)行驅(qū)動(dòng)程序使用這些支持例程作為媒介,與用戶態(tài)運(yùn)行的WMI服務(wù)通信。第六章 輸入/輸出系統(tǒng) 設(shè)備驅(qū)動(dòng)程序:為某種類型的設(shè)備提供一個(gè)I/O接口。設(shè)備
41、驅(qū)動(dòng)程序從I/O管理器接收命令,當(dāng)處理完畢后通知I/O管理器。設(shè)備驅(qū)動(dòng)程序之間的協(xié)同工作也通過I/O管理器進(jìn)行。 即插即用組件:用于控制和配置設(shè)備的用戶態(tài)API。 即插即用WDM接口:I/O系統(tǒng)為驅(qū)動(dòng)程序提供了分層結(jié)構(gòu),這一結(jié)構(gòu)包括WDM驅(qū)動(dòng)程序、驅(qū)動(dòng)程序?qū)雍驮O(shè)備對(duì)象。第六章 輸入/輸出系統(tǒng) 注冊表:存儲(chǔ)基本硬件、驅(qū)動(dòng)程序的初始化和配置信息的數(shù)據(jù)庫。 硬件抽象層:I/O訪問例程把設(shè)備驅(qū)動(dòng)程序與多種多樣的硬件平臺(tái)隔離開來,使它們在給定的體系結(jié)構(gòu)中是二進(jìn)制可移植的,并在Windows 2000/XP支持的硬件體系結(jié)構(gòu)中是源代碼可移植的。第六章 輸入/輸出系統(tǒng) HAL I/O服務(wù)例程核心設(shè)備驅(qū)動(dòng)程序
42、I/O管理器I/O系統(tǒng)服務(wù)API(NtXXX)用戶模式API驅(qū)動(dòng)程序支持例程圖6.27 一個(gè)典型的I/O請求流程第六章 輸入/輸出系統(tǒng) 6.8.3 輸入/輸出系統(tǒng)的數(shù)據(jù)結(jié)構(gòu) 1文件對(duì)象 文件對(duì)象提供了基于內(nèi)存的共享物理資源的表示法(除了被命名的管道和郵箱外,它們雖然是基于內(nèi)存的但不是物理的)。在Windows 2000/XP的I/O系統(tǒng)中,文件對(duì)象也代表這些資源。當(dāng)調(diào)用者打開文件或單一設(shè)備時(shí),I/O管理器將為文件對(duì)象返回一個(gè)句柄。文件對(duì)象的主要屬性如表6-2所示。第六章 輸入/輸出系統(tǒng) 表6-2 文件對(duì)象屬性屬 性目 的文件名標(biāo)識(shí)文件對(duì)象指向的物理文件字節(jié)偏移量在文件中標(biāo)識(shí)當(dāng)前位置(只對(duì)同步I
43、/O有效)共享模式表示當(dāng)調(diào)用者正在使用文件時(shí),其他調(diào)用者是否可以打開文件進(jìn)行讀、寫操作或刪除操作指向設(shè)備對(duì)象的指針表示文件在其上駐留的設(shè)備類型指向卷參數(shù)塊的指針表示文件在其上駐留的卷或分區(qū)指向區(qū)域?qū)ο蟮闹羔樏枋鲆粋€(gè)映射文件的根結(jié)構(gòu)指向?qū)S酶咚倬彺嬗成涞闹羔槺硎疚募哪囊徊糠钟筛咚倬彺婀芾砥鞴芾恚约八鼈凂v留在高速緩存的什么地方第六章 輸入/輸出系統(tǒng) 圖6.29說明打開一個(gè)文件時(shí)系統(tǒng)所發(fā)生的情況。在這個(gè)實(shí)例中,C程序調(diào)用庫函數(shù)fopen,由它去調(diào)用WIN32的CreatFile函數(shù)。然后由系統(tǒng)DLL在NTDLL.DLL中調(diào)用本地NTCreatFile函數(shù),在NTDLL.DLL中的例程包含引發(fā)到核
44、心態(tài)系統(tǒng)服務(wù)調(diào)度程序轉(zhuǎn)換適當(dāng)?shù)闹噶?。最后,系統(tǒng)服務(wù)調(diào)度程序在NTOSKRNL.EXE中調(diào)用真正的NTCreatFile例程。第六章 輸入/輸出系統(tǒng) 用戶態(tài)I/O管理器對(duì)象管理器安全引用監(jiān)視器本地過程調(diào)用工具核心WIN32應(yīng)用子程序運(yùn)行時(shí)的DLL3.NTCreateFile(D:myfile.dat,)4.創(chuàng)建文件對(duì)象虛擬內(nèi)存管理器文件系統(tǒng)高速緩存管理器設(shè)備驅(qū)動(dòng)程序網(wǎng)絡(luò)驅(qū)動(dòng)程序5.返回對(duì)象句柄系統(tǒng)服務(wù)核心態(tài)2.CreateFile(D:myfile.dat,)1.fpfopen(D:myfile.dat,r)WIN32 DLL6.返回文件句柄圖6.29 打開一個(gè)文件對(duì)象的過程第六章 輸入/輸出系
45、統(tǒng) 2驅(qū)動(dòng)程序?qū)ο蠛驮O(shè)備對(duì)象 當(dāng)線程為一個(gè)文件對(duì)象打開一個(gè)句柄時(shí),I/O管理器必須根據(jù)文件對(duì)象名稱來決定它將調(diào)用哪個(gè)驅(qū)動(dòng)程序來處理請求。而且,I/O管理器必須在線程下一次使用同一個(gè)文件句柄時(shí)可定位這個(gè)信息。第六章 輸入/輸出系統(tǒng) 驅(qū)動(dòng)程序?qū)ο蟠硐到y(tǒng)中一個(gè)獨(dú)立的驅(qū)動(dòng)程序,I/O管理器從這些驅(qū)動(dòng)程序?qū)ο笾蝎@得并為I/O記錄每個(gè)驅(qū)動(dòng)程序的調(diào)度例程的入口。 設(shè)備對(duì)象在系統(tǒng)中代表一個(gè)物理的、邏輯的或虛擬的設(shè)備,并描述它們的特征,如緩沖區(qū)的對(duì)齊方式和它用來保存即將到來的I/O請求包的設(shè)備隊(duì)列的位置。第六章 輸入/輸出系統(tǒng) 圖6.30顯示了一個(gè)設(shè)備驅(qū)動(dòng)器對(duì)象。從圖中可以看出,設(shè)備對(duì)象反過來指向自己的驅(qū)動(dòng)程
46、序?qū)ο?,這樣I/O管理器就知道在接收一個(gè)I/O請求時(shí)應(yīng)該調(diào)用哪個(gè)驅(qū)動(dòng)程序,即它使用設(shè)備對(duì)象找到代表該設(shè)備驅(qū)動(dòng)程序的驅(qū)動(dòng)程序?qū)ο?,然后利用在初始化請求中提供的功能碼來索引驅(qū)動(dòng)程序?qū)ο蟆C總€(gè)功能碼都對(duì)應(yīng)于一個(gè)驅(qū)動(dòng)程序的入口。第六章 輸入/輸出系統(tǒng) IRPIRP讀該驅(qū)動(dòng)程序操作的設(shè)備功能碼2文件讀寫卸載撤消設(shè)備對(duì)象IRPI/O請求隊(duì)列文件對(duì)象屬性(磁盤分區(qū))設(shè)備對(duì)象(磁盤分區(qū))(磁盤)設(shè)備對(duì)象啟動(dòng)I/O驅(qū)動(dòng)控制器驅(qū)動(dòng)程序?qū)ο蠊δ艽a1功能碼n文件名設(shè)備類型字節(jié)位移共享模式打開模式指向設(shè)備對(duì)象指針指向卷參數(shù)塊指針文件處理圖6.30 Windows 2000/XP輸入/輸出的數(shù)據(jù)結(jié)構(gòu)第六章 輸入/輸出系統(tǒng)
47、 3IO請求包 IRP是I/O系統(tǒng)用來存儲(chǔ)處理I/O請求所需信息的地方。當(dāng)線程調(diào)用I/O服務(wù)時(shí),I/O管理器就構(gòu)造一個(gè)IRP來表示在整個(gè)I/O過程中要進(jìn)行的操作。I/O管理器在IRP中保存一個(gè)指向調(diào)用者的文件對(duì)象指針。IRP由兩部分組成:固定部分(標(biāo)題)和一個(gè)或多個(gè)堆棧單元。 第六章 輸入/輸出系統(tǒng) IRP設(shè)備驅(qū)動(dòng)程序2. I/O管理器創(chuàng)建IRP并初始化第一個(gè)堆棧單元核心態(tài)I/O系統(tǒng)服務(wù)環(huán)境子系統(tǒng)或動(dòng)態(tài)鏈接庫IRP堆棧單元I/O管理器1.應(yīng)用程序?qū)⑽募懙酱蛴C(jī),將句柄傳給文件對(duì)象用戶態(tài)調(diào)度例程啟動(dòng)I/OISRDPC例程WRITE參數(shù)IRP標(biāo)題驅(qū)動(dòng)程序?qū)ο笤O(shè)備對(duì)象文件對(duì)象3. I/O管理器用驅(qū)
48、動(dòng)程序?qū)ο髞矶ㄎ籛RITE調(diào)度例程并調(diào)用它,同時(shí)將IRP傳給它圖6.31 單層驅(qū)動(dòng)程序中一個(gè)I/O請求涉及的數(shù)據(jù)結(jié)構(gòu)第六章 輸入/輸出系統(tǒng) 6.8.4 Windows 2000/XP的設(shè)備驅(qū)動(dòng)程序 1核心驅(qū)動(dòng)程序 核心驅(qū)動(dòng)程序主要分為如下幾種: (1) 文件系統(tǒng)驅(qū)動(dòng)程序:接收訪問文件的I/O請求,主要針對(duì)大容量的設(shè)備和網(wǎng)絡(luò)設(shè)備。 (2) PnP管理器和電源管理器設(shè)備驅(qū)動(dòng)程序:包括大容量存儲(chǔ)設(shè)備、協(xié)議棧和網(wǎng)絡(luò)適配器等。第六章 輸入/輸出系統(tǒng) (3) 為NT編寫的驅(qū)動(dòng)程序:可在Windows 2000/XP下工作,但一般不支持電源管理和PnP。 (4) WIN32子系統(tǒng)顯示和打印驅(qū)動(dòng)程序:把與設(shè)備
49、無關(guān)的圖形(GDI)請求轉(zhuǎn)換為設(shè)備專用請求。這些驅(qū)動(dòng)的集合稱為“核心態(tài)圖形驅(qū)動(dòng)程序”。 (5) WDM驅(qū)動(dòng)程序:包括對(duì)PnP、電源管理和WMI的支持。 第六章 輸入/輸出系統(tǒng) 2Windows 2000/XP支持的其他驅(qū)動(dòng)程序 Windows 2000/XP支持的其他驅(qū)動(dòng)程序主要有: (1) 虛擬設(shè)備驅(qū)動(dòng)程序:用于模擬16位的MS DOS的驅(qū)動(dòng)程序,它們捕獲MS DOS應(yīng)用程序?qū)Χ丝诘囊?,并將其轉(zhuǎn)化為本機(jī)WIN32 I/O函數(shù)。 (2) WIN32子系統(tǒng)的打印驅(qū)動(dòng)程序:把與設(shè)備無關(guān)的圖形(GDI)請求轉(zhuǎn)換為打印機(jī)相關(guān)命令,這些命令再發(fā)給核心模式的驅(qū)動(dòng)程序,例如,并口驅(qū)動(dòng)(Parprot.sy
50、s)、USB打印機(jī)驅(qū)動(dòng) (Usbprint.sys)等。第六章 輸入/輸出系統(tǒng) 3硬件支持的驅(qū)動(dòng)程序 硬件支持的驅(qū)動(dòng)程序主要有: (1) 類驅(qū)動(dòng)程序:該驅(qū)動(dòng)程序一般提供某類設(shè)備的基本支持接口,如磁盤、CD-ROM等,它通過端口驅(qū)動(dòng)程序提供的邏輯端口操作硬件。 第六章 輸入/輸出系統(tǒng) (2) 端口驅(qū)動(dòng)程序:用于提供某種接口(如串行接口、并行接口、USB接口等)的操作例程庫,它是小端口驅(qū)動(dòng)程序的一個(gè)功能包裝,通過這些接口,類驅(qū)動(dòng)程序可以直接訪問接口而不必去和連接它們的總線交互了。 (3) 小端口驅(qū)動(dòng)程序:該驅(qū)動(dòng)程序用于對(duì)實(shí)際硬件適配器的I/O請求映射,它負(fù)責(zé)最后驅(qū)動(dòng)硬件工作。 當(dāng)文件系統(tǒng)收到一個(gè)特定文件“寫”數(shù)據(jù)的請求時(shí),如何轉(zhuǎn)換為磁盤上的柱面/磁道/扇區(qū)?圖6.32便說明了數(shù)據(jù)“寫”到磁盤上的過程。第六章 輸入/輸出系統(tǒng) 5. 將相對(duì)地址轉(zhuǎn)換為物理 地址,并寫數(shù)據(jù)文 件 系 統(tǒng)驅(qū) 動(dòng) 程 序環(huán)境子系統(tǒng)或動(dòng)態(tài)鏈接庫I/O管理器文件系統(tǒng)驅(qū)動(dòng)程序用戶態(tài)4. 調(diào)用驅(qū)動(dòng)程序在相對(duì)地址處 寫數(shù)據(jù)3. 將文件的字節(jié)偏移量轉(zhuǎn)換為磁 盤上的字節(jié)偏移量,通過I/O管 理器調(diào)用下一個(gè)驅(qū)動(dòng)程序2. 在文件指定的偏移量處寫數(shù)據(jù)I/O系統(tǒng)服務(wù)核心態(tài)1. Nt WriteFile(file_handle, char_buffer)圖6.32
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 備戰(zhàn)2025年中考語文課內(nèi)文言文(統(tǒng)編版)20《與朱元思書》三年中考真題+模擬題(學(xué)生版+解析)
- 股東平等原則與對(duì)賭協(xié)議書(2篇)
- 南京工業(yè)大學(xué)浦江學(xué)院《稅法二》2022-2023學(xué)年第一學(xué)期期末試卷
- 殯儀館施工組織設(shè)計(jì)
- 方爺爺和圓奶奶說課稿
- 肚子里的故事說課稿
- 《中 國美食》說課稿
- 《液體的壓強(qiáng)》說課稿
- 南京工業(yè)大學(xué)浦江學(xué)院《公共事業(yè)管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 八年級(jí)第六單元《三峽》說課稿
- 卒中治療中心組織結(jié)構(gòu)
- (完整版)英語名詞單復(fù)數(shù)練習(xí)題帶答案
- 國學(xué)情景劇劇本
- 煤礦皮帶智能化集控系統(tǒng)PPT教學(xué)講授課件
- 分?jǐn)?shù)乘除法整理復(fù)習(xí)(課堂PPT)
- 杭州會(huì)展業(yè)發(fā)展與對(duì)策研究文獻(xiàn)綜述
- 完整版方法驗(yàn)證報(bào)告模板最終
- 電力管道資料表格(共30頁)
- 大班科學(xué)活動(dòng)教案《豆豆家族》含PPT課件
- 【精品試卷】部編人教版(統(tǒng)編)一年級(jí)上冊語文第一單元測試卷含答案
- 金屬有機(jī)化學(xué)ppt課件
評(píng)論
0/150
提交評(píng)論