版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第13章I/O系統(tǒng)I/OSystem本章目標(biāo)CHAPTEROBJECTIVES剖析操作系統(tǒng)I/O子系統(tǒng)結(jié)構(gòu)Explorethestructureofanoperatingsystem‘sI/Osubsystem討論I/O硬件原理DiscusstheprinciplesofI/OhardwareI/O系統(tǒng)2I/OSystem在計算機(jī)系統(tǒng)中,除了CPU和內(nèi)存之外,其他的大部分硬件設(shè)備稱為外部設(shè)備。外部設(shè)備種類繁多,特性各異,操作方式的差別也很大,從而使得操作系統(tǒng)的設(shè)備管理變得十分復(fù)雜。13.1概述OverviewI/O設(shè)備在功能與速度方面存在很大差異,需要采用多種方法來控制設(shè)備。BecauseI/Odevicesvarysowidelyintherefunctionandspeed,variedmethodsareneededtocontrolthem.這些方法形成了I/O子系統(tǒng)的核心,該子系統(tǒng)使內(nèi)核其他部分不必涉及I/O設(shè)備管理。ThesemethodsformtheI/Osubsystemofthekernel,WhichseparatestherestofthekernelfromthecomplexitiesofmanagingI/Odevices.設(shè)備分類方法計算機(jī)設(shè)備種類繁多,從不同的角度出發(fā),I/O設(shè)備可分成不同的類型。下面列舉幾種常見的分類方法。按設(shè)備的使用特性分類。存儲設(shè)備:用來保存各種信息的設(shè)備。如磁盤,磁帶等。I/O設(shè)備:向CPU傳輸信息或輸出經(jīng)過CPU加工處理信息的設(shè)備。如鍵盤、顯示器和打印機(jī)等。按設(shè)備的共享屬性分類獨占設(shè)備:在一段時間內(nèi)只允許一個用戶進(jìn)程使用的設(shè)備。共享設(shè)備:在一段時間內(nèi)允許多個進(jìn)程使用的設(shè)備。虛擬設(shè)備:指通過虛擬技術(shù)將一臺獨占設(shè)備改造成若干臺邏輯設(shè)備,供若干個用戶進(jìn)程同時使用。通常把這種經(jīng)過虛擬技術(shù)處理后的設(shè)備稱為虛擬設(shè)備。
按信息交換單位分類塊設(shè)備:處理信息的基本單位是字符塊。一般塊的大小為512B~4KB,如磁盤、磁帶等是塊設(shè)備。字符設(shè)備:處理信息的基本單位是字符。如鍵盤、打印機(jī)和顯示器是字符設(shè)備。按設(shè)備從屬關(guān)系分類系統(tǒng)設(shè)備:指在操作系統(tǒng)生成時已經(jīng)登記在系統(tǒng)中的標(biāo)準(zhǔn)設(shè)備。如鍵盤、顯示器、打印機(jī)等。用戶設(shè)備:指操作系統(tǒng)生成時未登記入系統(tǒng)的非標(biāo)準(zhǔn)設(shè)備。如鼠標(biāo)、繪圖儀,掃描儀等。
設(shè)備管理的任務(wù)和功能設(shè)備管理的主要任務(wù)是:完成用戶提出的I/O請求分配I/O設(shè)備提高I/O設(shè)備的利用率方便用戶使用I/O設(shè)備為了完成述任務(wù),設(shè)備管理應(yīng)具備以下功能:設(shè)備管理功能設(shè)備分配:根據(jù)用戶的I/O請求,為之分配設(shè)備。包含控制器和通道。設(shè)備處理:負(fù)責(zé)啟動設(shè)備及I/O操作完成時的中斷處理。緩沖管理:為緩和CPU與I/O速度不匹配的矛盾常設(shè)置緩沖區(qū)。緩沖管理負(fù)責(zé)緩沖區(qū)的分配和釋放及有關(guān)管理工作。設(shè)備獨立性:又稱設(shè)備無關(guān)性,是指用戶編制程序時所使用的設(shè)備與物理設(shè)備無關(guān)。設(shè)備獨立性類型設(shè)備獨立性有兩種類型:獨立于同類設(shè)備的具體設(shè)備號獨立于設(shè)備類型13.2I/O硬件端口:設(shè)備與計算機(jī)通過端口通信。總線:是一組線和一組嚴(yán)格定義的可以描述在線上傳輸信息的協(xié)議。I/O硬件2控制器:用于操作端口、總線或設(shè)備的一組電子器件。設(shè)備有地址,可用于直接I/O指令存儲器映射I/O:設(shè)備控制寄存器映射到處理器的地址空間,因此處理器能夠象訪問普通內(nèi)存一樣訪問設(shè)備控制寄存器。I/O硬件3I/O端口通常有四種寄存器狀態(tài)寄存器:包含一些主機(jī)可讀取的位信息,指示設(shè)備的各種狀態(tài)控制寄存器:可以被主機(jī)用來向設(shè)備發(fā)送命令或改變設(shè)備狀態(tài)。數(shù)據(jù)輸入寄存器:可以被主機(jī)讀取數(shù)據(jù)數(shù)據(jù)輸出寄存器:被主機(jī)寫入數(shù)據(jù)以發(fā)送數(shù)據(jù)設(shè)備控制器設(shè)備一般由機(jī)械和電子兩部分組成,設(shè)備的電子部分通常稱為設(shè)備控制器。在微型計算機(jī)中,又稱為接口卡。控制器處于CPU與I/O設(shè)備之間,它接收從CPU發(fā)來的命令,并去控制I/O設(shè)備工作。設(shè)備控制器是一個可編址設(shè)備,當(dāng)它控制一個設(shè)備時有一個設(shè)備地址;當(dāng)它控制多個設(shè)備則應(yīng)有多個設(shè)備地址。設(shè)備控制器的功能接收和識別來自CPU的命令:用控制寄存器。實現(xiàn)CPU與控制器、控制器與設(shè)備之間的數(shù)據(jù)交換:用數(shù)據(jù)寄存器。記錄設(shè)備的狀態(tài)供CPU查詢:用狀態(tài)寄存器。識別控制的每個設(shè)備地址:用地址譯碼器。設(shè)備控制器的組成設(shè)備控制器由三部分組成:設(shè)備控制器與處理機(jī)的接口:實現(xiàn)CPU與設(shè)備控制器之間的通信。設(shè)備控制器與設(shè)備的接口:實現(xiàn)設(shè)備與設(shè)備控制器之間的通信。I/O邏輯:實現(xiàn)對設(shè)備的控制,它負(fù)責(zé)接收命令、對命令進(jìn)行譯碼、再根據(jù)譯出的命令控制設(shè)備。設(shè)備控制器組成圖CPU與控制器的接口控制器與設(shè)備的接口數(shù)據(jù)寄存器控制/狀態(tài)寄存器I/O邏輯控制器與設(shè)備的接口控制器與設(shè)備的接口┆數(shù)據(jù)狀態(tài)控制數(shù)據(jù)狀態(tài)控制數(shù)據(jù)線地址線控制線┆I/O通道I/O通道是專門負(fù)責(zé)輸入/輸出工作的處理機(jī)。它具有執(zhí)行I/O指令的能力,并通過執(zhí)行通道程序來控制I/O操作。通道有自己的指令系統(tǒng),該指令系統(tǒng)比較簡單,一般只有數(shù)據(jù)傳送指令、設(shè)備控制指令等。通道程序:通道指令構(gòu)成的程序。通道與一般處理機(jī)的區(qū)別:指令類型單一沒有內(nèi)存通道的分類根據(jù)信息交換方式的不同,可將通道分成以下幾種類型:字節(jié)多路通道數(shù)據(jù)選擇通道數(shù)據(jù)多路通道字節(jié)多路通道字節(jié)多路通道:該通道以字節(jié)交換方式工作。它通常含有若干個非分配型子通道,每個子通道連接一臺I/O設(shè)備,這些子通道按時間片輪轉(zhuǎn)方式共享主通道,每次交換完一個字節(jié)后便輪換。一般用于連接中、低速I/O設(shè)備。數(shù)據(jù)選擇通道數(shù)據(jù)選擇通道:又稱數(shù)組選擇通道,該通道含有一個分配型子通道,在一段時間內(nèi)只能執(zhí)行一個通道程序,控制一臺設(shè)備傳送一批數(shù)據(jù),當(dāng)一道程序執(zhí)行完后,再選擇與通道相連的另一臺設(shè)備。一般用于連接高速I/O設(shè)備。數(shù)據(jù)多路通道數(shù)據(jù)多路通道:又稱數(shù)組多路通道,該通道是前兩種通道的結(jié)合,它以分時方式執(zhí)行幾個通道程序,每執(zhí)行一個通道程序的一條通道指令控制傳送一組數(shù)據(jù)后,就轉(zhuǎn)向另一個通道程序。一般用于連接高、中速I/O設(shè)備。I/O系統(tǒng)結(jié)構(gòu)I/O系統(tǒng)結(jié)構(gòu)不盡相同,大致分成兩類:微型機(jī)I/O系統(tǒng)結(jié)構(gòu)主機(jī)I/O系統(tǒng)結(jié)構(gòu)微型機(jī)I/O系統(tǒng)結(jié)構(gòu)微型機(jī)I/O系統(tǒng)多采用總線I/O系統(tǒng)結(jié)構(gòu),CPU和內(nèi)存直接連接到總線上,I/O設(shè)備通過設(shè)備控制器連接到總線上。磁盤驅(qū)動器CPU存儲器磁盤控制器打印機(jī)控制器其他控制器…打印機(jī)典型的PC總線結(jié)構(gòu)PC中的設(shè)備I/O端口位置(部分)主機(jī)I/O系統(tǒng)結(jié)構(gòu)通常為主機(jī)配置的設(shè)備較多,若所有設(shè)備都通過總線與CPU通信則總線和CPU的負(fù)擔(dān)過重。為此在I/O系統(tǒng)結(jié)構(gòu)中增加了一級I/O通道。
主機(jī)I/O系統(tǒng)結(jié)構(gòu)示意圖存儲器通道1通道2控制器2控制器3控制器1控制器4設(shè)備1設(shè)備2設(shè)備3設(shè)備4設(shè)備5設(shè)備6設(shè)備7設(shè)備8多通路I/O系統(tǒng)因通道價格較貴,使系統(tǒng)內(nèi)設(shè)置的通道少,這樣通道往往成為I/O的瓶頸。解決瓶頸問題的辦法是采用多通路配置方案。多通路I/O系統(tǒng)示意圖存儲器通道1通道2控制器2控制器1設(shè)備1設(shè)備3設(shè)備5設(shè)備713.2.1輪詢PollingI/O控制方式發(fā)展過程中始終貫穿的宗旨是盡量減少主機(jī)對I/O控制的干預(yù)。常用的輸入/輸出控制方式有下述幾種:程序直接控制方式中斷控制方式直接存儲器訪問控制方式通道控制方式程序直接控制方式早期計算機(jī)系統(tǒng)中無中斷機(jī)構(gòu),設(shè)備控制采用程序直接控制方式。程序直接控制方式也稱為輪詢方式。以輸入為例,其過程為:程序直接控制方式流程向I/O控制器發(fā)出讀命令讀I/O控制器的狀態(tài)傳送完成?檢查狀態(tài)?從I/O控制器中讀入數(shù)據(jù)就緒向存儲器中寫入數(shù)據(jù)執(zhí)行下條指令未就緒YN出錯程序直接控制方式特點工作方式簡單,但CPU的利用率低。主機(jī)與控制器之間兩位忙位指出控制器忙或閑命令就緒位指出控制器能否執(zhí)行命令例如主機(jī)重復(fù)讀忙位,直到空閑(忙等或輪詢)主機(jī)在命令寄存器中設(shè)置寫位,并將一個字節(jié)寫到輸出寄存器中。主機(jī)設(shè)置命令位當(dāng)控制器注意到命令就緒位被置位時,它就置忙位。控制器讀命令寄存器并發(fā)現(xiàn)寫命令時,它讀輸出寄存器的內(nèi)容,并驅(qū)動設(shè)備控制器清除命令就緒位時,清除狀態(tài)寄存器中的出錯位,表明I/O成功,并清除忙位,表明完成。13.2.2中斷Interrupts現(xiàn)代計算機(jī)系統(tǒng)中對設(shè)備的控制廣泛采用了中斷控制方式。以輸入為例,其過程為:中斷控制方式流程向I/O控制器發(fā)出讀命令讀I/O控制器的狀態(tài)傳送完成?檢查狀態(tài)?出錯從I/O控制器中讀入數(shù)據(jù)就緒向存儲器中寫入數(shù)據(jù)NY執(zhí)行下條指令CPU做其他事情中斷中斷驅(qū)動的I/O循環(huán)中斷控制方式特點CPU與設(shè)備并行工作,僅當(dāng)I/O結(jié)束時才需CPU花費(fèi)極短時間做中斷處理。CPU利用率大大提高。中斷的基本概念1中斷:指計算機(jī)系統(tǒng)內(nèi)發(fā)生了某個急需處理的事件,使CPU暫停當(dāng)前正在執(zhí)行的程序,轉(zhuǎn)去處理相應(yīng)的事件處理程序,待處理完畢后又返回原來被中斷處繼續(xù)執(zhí)行。中斷源:引起中斷發(fā)生的事件。中斷請求:中斷源向CPU發(fā)出的請求中斷處理的信號。中斷響應(yīng):CPU收到中斷請求后轉(zhuǎn)向相應(yīng)事件處理程序的過程。中斷的基本概念2斷點:發(fā)生中斷時,剛執(zhí)行完的那條指令所在的單元號。恢復(fù)點:斷點的邏輯后繼指令的單元號。現(xiàn)場:是指中斷的那一時刻能確保程序繼續(xù)運(yùn)行的有關(guān)信息。程序狀態(tài)字:反映程序運(yùn)行狀態(tài)的一組信息。主要包括:指令地址、指令執(zhí)行情況、CPU狀態(tài)(管/目態(tài))、中斷屏蔽字、尋址方式等。中斷的基本概念3禁止中斷:不允許CPU響應(yīng)中斷,也稱為關(guān)中斷。允許中斷:允許CPU響應(yīng)中斷,也稱為開中斷。開中斷和關(guān)中斷是為了保證某些程序執(zhí)行的原子性。中斷的基本概念4中斷向量:用來存放中斷處理程序的入口地址,一般每個中斷信號占用兩個單元:一個單元用來存放中斷處理程序的入口地址,另一個單元用來保存在處理中斷時CPU應(yīng)具有的狀態(tài)。中斷屏蔽:中斷屏蔽表示暫時封鎖對中斷的響應(yīng),待屏蔽消除后再響應(yīng)。中斷的分類及優(yōu)先級根據(jù)中斷信號的含義和功能可以將中斷分為5類:硬件故障中斷輸入/輸出中斷外中斷程序性中斷訪管中斷中斷的分類1硬件故障中斷:機(jī)器發(fā)生故障時產(chǎn)生的中斷。如電源故障、奇偶校驗錯等。輸入/輸出中斷:外設(shè)或通道操作正常完成或發(fā)生某種錯誤時產(chǎn)生的中斷。如傳輸結(jié)束、設(shè)備錯誤等。外中斷:中央處理機(jī)外部的非通道式裝置引起的中斷。如時鐘中斷、控制臺中斷等。中斷的分類2程序性中斷:程序執(zhí)行時發(fā)生了程序性質(zhì)的錯誤或出現(xiàn)了某些特定狀態(tài)而產(chǎn)生的中斷。如溢出、地址錯、指令跟蹤等。訪管中斷:對OS提出某種服務(wù)要求時發(fā)生的中斷,又稱軟中斷。強(qiáng)迫性中斷和自愿性中斷強(qiáng)迫性中斷由隨機(jī)事件引起而非程序員事先安排,硬件故障中斷、程序性中斷、外部中斷及輸入/輸出中斷是強(qiáng)迫性中斷。自愿性中斷:是正在運(yùn)行程序所期待的事件,是由執(zhí)行一條訪管指令所引起的。外中斷和內(nèi)中斷根據(jù)中斷信號的來源可以將中斷分為兩類:外中斷。指來自處理機(jī)和內(nèi)存外部的中斷,包括I/O設(shè)備發(fā)出的I/O中斷、各種定時器引起的時鐘中斷等。內(nèi)中斷。指在處理機(jī)和內(nèi)存內(nèi)部產(chǎn)生的中斷,內(nèi)中斷一般稱為陷入或異常,包括程序運(yùn)算引起的各種錯誤,如地址非法、校驗錯、存取訪問控制錯、算術(shù)操作溢出等。中斷優(yōu)先級interruptpriority中斷優(yōu)先級是中斷響應(yīng)的優(yōu)先級別。當(dāng)多個中斷發(fā)生時,系統(tǒng)根據(jù)優(yōu)先級決定響應(yīng)中斷的次序,優(yōu)先響應(yīng)高優(yōu)先級的中斷,同級中斷則按硬件規(guī)定的次序響應(yīng)。中斷優(yōu)先級由高到低的順序為:硬件故障中斷、訪管中斷、程序性中斷、外部中斷、輸入/輸出中斷。中斷處理過程一旦CPU響應(yīng)中斷,系統(tǒng)就開始進(jìn)行中斷處理。中斷處理過程如下:保護(hù)被中斷進(jìn)程現(xiàn)場。分析中斷原因,轉(zhuǎn)去執(zhí)行相應(yīng)的中斷處理程序。恢復(fù)被中斷進(jìn)程的現(xiàn)場,CPU繼續(xù)執(zhí)行原來被中斷的進(jìn)程。13.2.3直接內(nèi)存訪問DMA中斷方式以字節(jié)為單位中斷CPU,對塊設(shè)備其效率極低,為此引入了DMA。DMA控制方式的思想是在外設(shè)與內(nèi)存之間開辟直接的數(shù)據(jù)交換通路,在控制器的控制下,設(shè)備和內(nèi)存之間可以成批地進(jìn)行數(shù)據(jù)交換。DMA控制器的寄存器為實現(xiàn)主機(jī)與控制器之間成塊數(shù)據(jù)的直接交換,必須在DMA控制器中設(shè)置如下寄存器:命令/狀態(tài)寄存器CR:存放命令及狀態(tài)內(nèi)存地址寄存器MAR:存放內(nèi)存起始地址數(shù)據(jù)寄存器DR:存放傳輸?shù)臄?shù)據(jù)數(shù)據(jù)計數(shù)器DC:存放要讀寫的字(節(jié))數(shù)DMA控制器的組成控制器與塊設(shè)備的接口主機(jī)-控制器接口DRI/O控制邏輯┆系統(tǒng)總線命令CPU內(nèi)存countMARDCCRDMA控制器DMA工作過程設(shè)置MAR和DC初值請求中斷啟動DMA傳送命令挪用存儲器周期傳送數(shù)據(jù)字存儲器地址增1;字計數(shù)寄存器減1NYDC=0?在繼續(xù)執(zhí)行用戶程序的同時,準(zhǔn)備又一次傳送通過六步來完成DMA傳輸DMA方式與中斷方式的主要區(qū)別中斷控制方式在每個數(shù)據(jù)傳送完成后中斷CPU,而DMA控制方式則是在所要求傳送的一批數(shù)據(jù)全部傳送結(jié)束時中斷CPU;中斷控制方式的數(shù)據(jù)傳送是在中斷處理時由CPU控制完成,而DMA控制方式則是在DMA控制器的控制下完成。通道控制方式
通道控制方式是DMA控制方式的發(fā)展,它所需的CPU干預(yù)更少。通道控制方式與DMA方式類似,也是一種以內(nèi)存為中心,實現(xiàn)設(shè)備與內(nèi)存直接交換數(shù)據(jù)的控制方式。在通道控制方式中,CPU只需發(fā)出啟動指令,指出要求通道執(zhí)行的操作和使用的I/O設(shè)備,該指令就可以啟動通道并使該通道從內(nèi)存中調(diào)出相應(yīng)的通道程序執(zhí)行。以輸入為例,其過程為:通道工作過程CPU做其他事情中斷向通道發(fā)讀命令并指明使用的設(shè)備進(jìn)行中斷處理讀出通道程序并設(shè)置控制器中的狀態(tài)寄存器執(zhí)行通道程序控制設(shè)備輸入數(shù)據(jù)傳輸結(jié)束發(fā)中斷13.3應(yīng)用程序I/O接口I/O系統(tǒng)調(diào)用以通用類型的方式封裝了設(shè)備行為設(shè)備驅(qū)動層對核心隱藏了I/O控制器的不同細(xì)節(jié)
內(nèi)核I/O結(jié)構(gòu)I/O設(shè)備的特點13.3.1塊或字符設(shè)備塊設(shè)備包括磁盤
命令包括讀,寫,搜尋原始的I/O或文件系統(tǒng)存取存儲器映射文件訪問的可能性字符設(shè)備包括鍵盤,鼠標(biāo)和串口設(shè)備
命令有g(shù)et,put頂層的函數(shù)庫允許行編輯13.3.2網(wǎng)絡(luò)設(shè)備NetworkDevices絕大多數(shù)操作系統(tǒng)所提供的網(wǎng)絡(luò)I/O接口也不同于磁盤的read-write-seek接口。
許多OS所提供的是網(wǎng)絡(luò)套接字接口。
13.3.3時鐘和定時器許多機(jī)器都有硬件時鐘和定時器以提供如下三個基本函數(shù)獲取當(dāng)前時間獲取已經(jīng)逝去的時間設(shè)置定時器以在T時觸發(fā)操作X測量逝去時間和觸發(fā)器操作的硬件稱為可編程間隔定時器可被設(shè)置為等待一定的時間,然后觸發(fā)中斷也可設(shè)置成做一次或重復(fù)多次以產(chǎn)生定時中斷13.3.4阻塞和非阻塞I/O阻塞:進(jìn)程掛起直到I/O完成非阻塞:I/O調(diào)用立即返回異步:在I/O處理的時候進(jìn)程同時運(yùn)行13.3.4阻塞和非阻塞I/O阻塞式I/O模型:應(yīng)用進(jìn)程調(diào)用I/O操作時阻塞,只有等待要操作的數(shù)據(jù)準(zhǔn)備好,并復(fù)制到應(yīng)用進(jìn)程的緩沖區(qū)中才返回。非阻塞式I/O模型:當(dāng)應(yīng)用進(jìn)程要調(diào)用的I/O操作時,不進(jìn)入阻塞狀態(tài),一般情況下,應(yīng)用進(jìn)程需要利用輪詢的方式來檢測某個操作是否就緒。數(shù)據(jù)就緒后,實際的I/O操作會等待數(shù)據(jù)復(fù)制到應(yīng)用進(jìn)程的緩沖區(qū)中以后才返回。13.3.4阻塞和非阻塞I/O同步:就是在發(fā)出一個“調(diào)用”時,在沒有得到結(jié)果之前,該“調(diào)用”就不返回。但是一旦調(diào)用返回,就得到返回值了。換句話說,就是由“調(diào)用者”主動等待這個“調(diào)用”的結(jié)果。異步:在發(fā)出“調(diào)用”之后,這個“調(diào)用”就直接返回了,所以沒有返回結(jié)果。換句話說,當(dāng)一個異步過程調(diào)用發(fā)出后,調(diào)用者不會立刻得到結(jié)果。而是在“調(diào)用”發(fā)出后,“被調(diào)用者”通過狀態(tài)、通知來通知調(diào)用者,或通過回調(diào)函數(shù)處理這個“調(diào)用”。13.3.4阻塞和非阻塞I/O舉個通俗的例子:你打電話問書店老板有沒有《分布式系統(tǒng)》這本書:如果是阻塞式調(diào)用,你會一直把自己“掛起”,直到得到這本書有沒有的結(jié)果;如果是非阻塞式調(diào)用,你不管老板有沒有告訴你,你自己先一邊去玩了,當(dāng)然你也要偶爾過幾分鐘check一下老板有沒有返回結(jié)果;如果是同步通信機(jī)制,書店老板會說,你稍等,“我查一下”,然后開始查啊查,等查好了(可能是5秒,也可能是一天)告訴你結(jié)果(返回結(jié)果);如果是異步通信機(jī)制,書店老板直接告訴你我查一下啊,查好了打電話給你,然后直接掛電話了(不返回結(jié)果)。然后查好了,他會主動打電話給你。在這里老板通過“回電”這種方式來回調(diào)。兩種I/O方法TwoI/OMethodsSynchronousAsynchronous13.4I/O內(nèi)核子系統(tǒng)許多服務(wù),如調(diào)度、緩沖、高速緩存、假脫機(jī)、設(shè)備預(yù)留及錯誤處理由內(nèi)核I/O子系統(tǒng)提供。13.4.1I/O調(diào)度調(diào)度一組I/O請求就是確定一個好的順序來執(zhí)行這些請求。某些操作系統(tǒng)嘗試著公平。13.4.2緩沖緩沖:當(dāng)設(shè)備間傳輸數(shù)據(jù)的時候,暫時存放在內(nèi)存中。解決設(shè)備速度不匹配解決設(shè)備傳輸塊的大小不匹配為了維持“拷貝語義”
緩沖的引入提高處理機(jī)與外設(shè)并行的另一項技術(shù)是緩沖技術(shù)。引入緩沖的主要原因有:緩和CPU與I/O設(shè)備間速度不匹配的矛盾,提高CPU與I/O設(shè)備并行操作的程度,減少設(shè)備對CPU的中斷頻率,放寬CPU對中斷響應(yīng)時間的限制。緩沖的實現(xiàn)方法硬件緩沖器:如I/O控制器中的數(shù)據(jù)緩沖寄存器,但成本太高。軟件緩沖:一片內(nèi)存區(qū)域,用來臨時存放輸入輸出數(shù)據(jù)。緩沖技術(shù)分為:單緩沖雙緩沖循環(huán)緩沖緩沖池單緩沖單緩沖是在設(shè)備和處理機(jī)之間設(shè)置一個緩沖區(qū)。操作系統(tǒng)I/O設(shè)備輸入用戶進(jìn)程傳送單緩沖(續(xù))在塊設(shè)備輸入時,先從磁盤把一塊數(shù)據(jù)輸入至緩沖區(qū),然后OS將緩沖區(qū)中的數(shù)據(jù)送到用戶區(qū)。在塊設(shè)備輸出時,先將要輸出的數(shù)據(jù)從用戶區(qū)復(fù)制到緩沖區(qū),然后再將緩沖區(qū)中的數(shù)據(jù)寫到設(shè)備。在字符設(shè)備輸入時,緩沖區(qū)用于暫存用戶輸入的一行數(shù)據(jù)。在輸入期間,用戶進(jìn)程阻塞以等待一行數(shù)據(jù)輸入完畢;在輸出時,用戶進(jìn)程將一行數(shù)據(jù)送入緩沖區(qū)后繼續(xù)執(zhí)行計算。當(dāng)用戶進(jìn)程已有第二行數(shù)據(jù)要輸出時,若第一行數(shù)據(jù)尚未輸出完畢,則用戶進(jìn)程阻塞。雙緩沖引入雙緩沖,可以進(jìn)一步提高處理機(jī)與設(shè)備的并行操作程度。操作系統(tǒng)I/O設(shè)備輸入用戶進(jìn)程傳送雙緩沖(續(xù))在塊設(shè)備輸入時,可先將第一個緩沖區(qū)裝滿,之后便裝填第二個緩沖區(qū),與此同時OS可將第一個緩沖區(qū)中的數(shù)據(jù)傳到用戶區(qū);當(dāng)?shù)谝粋€緩沖區(qū)中的數(shù)據(jù)處理完后,若第二個緩沖區(qū)已裝滿,則處理機(jī)又可處理第二個緩沖區(qū)中的數(shù)據(jù),而設(shè)備又可裝填第一個緩沖區(qū)。輸出與此類似。在字符設(shè)備輸入時,若采用行輸入方式和雙緩沖,則用戶在輸入完第一行后,CPU執(zhí)行第一行中的命令,而用戶可以繼續(xù)向第二個緩沖區(qū)中輸入一行數(shù)據(jù)。循環(huán)緩沖若輸入輸出速度與數(shù)據(jù)處理速度相當(dāng),則雙緩沖能獲得較好的效果;若速度相差較大,則可以通過增加緩沖區(qū)的數(shù)量來改善性能。操作系統(tǒng)I/O設(shè)備輸入用戶進(jìn)程傳送inout循環(huán)緩沖的組成循環(huán)緩沖中包含多個大小相等的緩沖區(qū),每個緩沖區(qū)中有一個指針指向下一個緩沖區(qū),最后一個緩沖區(qū)的指針指向第一個緩沖區(qū),由此構(gòu)成一個環(huán)形。循環(huán)緩沖用于輸入/輸出時,還需要兩個指針in和out。對于輸入而言,in指向下一個可用的空緩沖區(qū),out指向下一個可以提取數(shù)據(jù)的滿緩沖區(qū)。顯然,對輸出而言正好相反。緩沖池循環(huán)緩沖適用于合作進(jìn)程,當(dāng)系統(tǒng)較大且共享緩沖區(qū)的進(jìn)程較多時,這要消耗大量內(nèi)存。目前廣泛使用的是公用緩沖池。緩沖池由多個緩沖區(qū)組成,其中的緩沖區(qū)可供多個進(jìn)程共享,既能用于輸入又能用于輸出。緩沖池的構(gòu)成緩沖池中有三種類型的緩沖區(qū)隊列:空緩沖隊列:由空閑緩沖區(qū)構(gòu)成的隊列輸入隊列:裝滿輸入數(shù)據(jù)的緩沖區(qū)隊列輸出隊列:裝滿輸出數(shù)據(jù)的緩沖區(qū)隊列除上述三個隊列之外,還有四種工作緩沖區(qū):用于收容輸入數(shù)據(jù)的工作緩沖區(qū)用于提取輸入數(shù)據(jù)的工作緩沖區(qū)用于收容輸出數(shù)據(jù)的工作緩沖區(qū)用于提取輸出數(shù)據(jù)的工作緩沖區(qū)緩沖池的工作方式緩沖池有四種工作方式:收容輸入提取輸入收容輸出提取輸出收容輸入當(dāng)輸入進(jìn)程需要輸入數(shù)據(jù)時,便從空緩沖隊列的隊首摘下一個空緩沖區(qū),把它作為收容輸入工作緩沖區(qū),然后把數(shù)據(jù)輸入其中,裝滿后再將它掛到輸入隊列隊尾。輸入設(shè)備收容輸入工作緩沖區(qū)提取輸入當(dāng)計算進(jìn)程需要輸入數(shù)據(jù)時,便從輸入隊列取得一個緩沖區(qū)作為提取輸入工作緩沖區(qū),計算進(jìn)程從中提取數(shù)據(jù),數(shù)據(jù)用完后再將它掛到空緩沖隊列尾。用戶程序提取輸入工作緩沖區(qū)收容輸出當(dāng)計算進(jìn)程需要輸出數(shù)據(jù)時,便從空緩沖隊列的隊首取得一個空緩沖,作為收容輸出工作緩沖區(qū),當(dāng)其中裝滿輸出數(shù)據(jù)后,再將它掛到輸出隊列尾。用戶程序收容輸出工作緩沖區(qū)提取輸出當(dāng)要輸出時,由輸出進(jìn)程從輸出隊列中取得一裝滿輸出數(shù)據(jù)的緩沖區(qū),作為提取輸出工作緩沖區(qū),當(dāng)數(shù)據(jù)提取完后,再將它掛到空緩沖隊列的末尾。輸出設(shè)備提取輸出工作緩沖區(qū)13.4.3高速緩存高速緩存:存放數(shù)據(jù)副本的高速存儲器
緩沖與高速緩存的差別:緩沖可能是數(shù)據(jù)項的唯一副本,而根據(jù)定義高速緩存只是提供了一個駐留在其他地方的數(shù)據(jù)在高速緩存上的一個副本。13.4.4假脫機(jī)與設(shè)備預(yù)留
假脫機(jī):保存設(shè)備輸出的緩沖區(qū)Spooling技術(shù)是將獨占設(shè)備改造為共享設(shè)備的技術(shù)
什么是SpoolingSpooling是SimultaneousPeripheralOperatingOn-Line的縮寫,意思是外部設(shè)備同時聯(lián)機(jī)操作,又稱假脫機(jī)操作。在Spooling系統(tǒng)中,用一道程序模擬脫機(jī)輸入時的外圍控制機(jī)功能,把低速輸入設(shè)備上的數(shù)據(jù)傳送到高速磁盤上;再用另一道程序來模擬脫機(jī)輸出時的外圍控制機(jī)功能,把數(shù)據(jù)從磁盤傳送到低速輸出設(shè)備上。Spooling系統(tǒng)的組成Spooling系統(tǒng)由三部分組成:輸入井和輸出井輸入緩沖區(qū)和輸出緩沖區(qū)輸入進(jìn)程和輸出進(jìn)程輸入井和輸出井輸入井和輸出井是磁盤上的兩個存儲區(qū)域。輸入井收容I/O設(shè)備輸入的數(shù)據(jù)。輸出井收容用戶程序的輸出數(shù)據(jù)。輸入緩沖區(qū)和輸出緩沖區(qū)輸入緩沖區(qū)和輸出緩沖區(qū)是內(nèi)存中的兩個緩沖區(qū)。輸入緩沖區(qū)用于暫存由輸入設(shè)備送來的數(shù)據(jù),以后再傳送到輸入井;輸出緩沖區(qū)用于暫存從輸出井送來的數(shù)據(jù),以后再傳送到輸出設(shè)備。輸入進(jìn)程和輸出進(jìn)程輸入進(jìn)程模擬脫機(jī)輸入時的外圍控制機(jī),將用戶要求的數(shù)據(jù)從輸入設(shè)備通過輸入緩沖區(qū)再送到輸入井,當(dāng)CPU需要輸入數(shù)據(jù)時直接從輸入井讀入內(nèi)存;輸出進(jìn)程模擬脫機(jī)輸出時的外圍控制機(jī),把用戶要求輸出的數(shù)據(jù)先從內(nèi)存送到輸出井,待輸出設(shè)備空閑時,再將輸出井中的數(shù)據(jù)經(jīng)過輸出緩沖區(qū)送到輸出設(shè)備上。Spooling系統(tǒng)組成圖輸入進(jìn)程輸出進(jìn)程輸入緩沖區(qū)輸出緩沖區(qū)輸入設(shè)備輸出設(shè)備磁盤輸入井輸出井共享打印機(jī)1打印機(jī)是常用的獨享設(shè)備,但利用Spooling技術(shù)可以將它改造成供多個用戶共享的設(shè)備。當(dāng)用戶進(jìn)程請求打印輸出時,Spooling系統(tǒng)同意為它打印,但不將打印機(jī)真正分配給它,而只為它做兩件事:由輸出進(jìn)程在輸出井中為之申請一空閑磁盤區(qū),并將要打印的數(shù)據(jù)送入其中;輸出進(jìn)程再為用戶進(jìn)程申請一張空白的用戶請求打印表,并將用戶的打印要求填入其中,再將該表掛到請求打印隊列上。共享打印機(jī)2如果打印機(jī)空閑,輸出進(jìn)程將從打印隊列隊首取出一張請求打印表,根據(jù)表中的要求將要打印的數(shù)據(jù)從輸出井傳送到內(nèi)存緩沖區(qū),再由打印機(jī)進(jìn)行打印。打印完后,再取下一張表,直至請求隊列為空。此時,輸出進(jìn)程阻塞,當(dāng)再有打印請求時,才將輸出進(jìn)程喚醒。設(shè)備預(yù)留
設(shè)備預(yù)留:提供對設(shè)備的互斥訪問預(yù)留:亦即為某進(jìn)程保留該設(shè)備的使用權(quán),在該進(jìn)程獲得運(yùn)行之前,其他申請該設(shè)備的進(jìn)程將得不到使用權(quán)。設(shè)備分配當(dāng)進(jìn)程提出I/O請求時,設(shè)備分配程序便按照一定的策略為其分配設(shè)備,同時還應(yīng)分配相應(yīng)的控制器和通道,以保證CPU與設(shè)備之間的通信。設(shè)備管理的數(shù)據(jù)結(jié)構(gòu)
設(shè)備管理的主要數(shù)據(jù)結(jié)構(gòu)有:設(shè)備控制表控制器控制表通道控制表系統(tǒng)設(shè)備表設(shè)備控制表(DCT)系統(tǒng)為每個設(shè)備配置一張設(shè)備控制表,用于記錄設(shè)備的特性及與I/O控制器連接的情況。設(shè)備控制表設(shè)備類型設(shè)備標(biāo)識符設(shè)備狀態(tài):忙/閑指向控制器表的指針設(shè)備等待隊列指針…控制器控制表(COCT)控制器控制表也是每個控制器一張,它反映I/O控制器的使用狀態(tài)以及和通道的連接情況。控制器控制表控制器標(biāo)識符控制器狀態(tài):忙/閑指向通道表的指針控制器等待隊列指針…通道控制表(CHCT)每個通道都配有一張通道控制表,它反映通道的使用狀態(tài)。通道控制表通道標(biāo)識符通道狀態(tài):忙/閑通道等待隊列指針…系統(tǒng)設(shè)備表(SDT)系統(tǒng)設(shè)備表整個系統(tǒng)一張,它記錄了系統(tǒng)中所有物理設(shè)備的情況,每個物理設(shè)備占一個表目。系統(tǒng)設(shè)備表SDT表目1表目2┆表目n設(shè)備類型設(shè)備標(biāo)識符指向設(shè)備控制表的指針驅(qū)動程序入口設(shè)備分配策略
系統(tǒng)在進(jìn)行設(shè)備分配時,應(yīng)考慮以下因素:設(shè)備的使用性質(zhì)設(shè)備分配算法設(shè)備分配的安全性設(shè)備獨立性設(shè)備的使用性質(zhì)按共享屬性設(shè)備有三種類型:獨占:這種設(shè)備在一段時間內(nèi)只允許一個進(jìn)程獨占。共享:這種設(shè)備允許多個進(jìn)程同時共享。虛擬:設(shè)備本身雖是獨占設(shè)備,但經(jīng)過某種技術(shù)處理后可改造成虛擬設(shè)備。針對上述三種設(shè)備可采用三種不同的分配方式。獨享分配在將一個設(shè)備分配給某進(jìn)程后便一直由它獨占,直至該進(jìn)程完成或釋放該設(shè)備后,系統(tǒng)才能再將該設(shè)備分配給其他進(jìn)程使用。共享分配將設(shè)備同時分配給多個進(jìn)程使用。但這些進(jìn)程對設(shè)備的訪問需要進(jìn)行合理調(diào)度。虛擬分配虛擬分配針對虛擬設(shè)備,其實現(xiàn)過程是:當(dāng)進(jìn)程申請獨占設(shè)備時,系統(tǒng)給它分配共享設(shè)備上的一部分存儲空間;當(dāng)進(jìn)程要與設(shè)備交換信息時,系統(tǒng)就把要交換的信息存放在這部分存儲空間中;在適當(dāng)?shù)臅r候,將設(shè)備上的信息傳輸?shù)酱鎯臻g中或?qū)⒋鎯臻g中的信息傳送到設(shè)備。設(shè)備分配算法設(shè)備分配通常只采用以下兩種算法:先來先服務(wù):根據(jù)進(jìn)程對某設(shè)備發(fā)出請求的先后次序,將它們排成一個設(shè)備請求隊列,設(shè)備分配程序總是把設(shè)備首先分配給隊首進(jìn)程。:優(yōu)先級高者優(yōu)先:按對某設(shè)備提出I/O請求的進(jìn)程優(yōu)先級由高到低排隊,對優(yōu)先級相同的I/O請求,按先來先服務(wù)的算法排隊,設(shè)備分配程序總是把設(shè)備首先分配給隊首進(jìn)程。設(shè)備分配的安全性設(shè)備分配的安全性是指在設(shè)備分配中應(yīng)保證不發(fā)生進(jìn)程死鎖。設(shè)備有兩種分配方式:靜態(tài)分配動態(tài)分配靜態(tài)分配靜態(tài)分配:用戶作業(yè)開始執(zhí)行前,由系統(tǒng)一次分配該作業(yè)所要求的全部設(shè)備、控制器和通道。一旦分配,就一直為該作業(yè)所占用,直到該作業(yè)被撤消為止。靜態(tài)分配方式不會出現(xiàn)進(jìn)程的死鎖,但設(shè)備的使用效率低。動態(tài)分配動態(tài)分配:在進(jìn)程執(zhí)行過程中根據(jù)需要進(jìn)行設(shè)備分配,一旦使用完之后便立即釋放。動態(tài)分配方式有利于提高設(shè)備利用率,但分配算法使用不當(dāng)有可能造成進(jìn)程死鎖。動態(tài)分配又分為:安全分配不安全分配安全分配安全分配:每當(dāng)進(jìn)程發(fā)出I/O請求后便進(jìn)入阻塞狀態(tài),直到I/O操作完成時才被喚醒并釋放資源。特點:設(shè)備分配安全,但進(jìn)程進(jìn)展緩慢。不安全分配不安全分配:進(jìn)程發(fā)出I/O請求后繼續(xù)運(yùn)行,需要時又可發(fā)出第二個I/O請求、第三個I/O請求等。僅當(dāng)進(jìn)程所請求的設(shè)備被其他進(jìn)程占用時才進(jìn)入阻塞狀態(tài)。特點:進(jìn)程推進(jìn)迅速,但可能死鎖。設(shè)備獨立性設(shè)備獨立性:又稱設(shè)備無關(guān)性,是指用戶編制程序時使用的設(shè)備與實際使用的物理設(shè)備無關(guān)。邏輯設(shè)備:用戶程序中使用的設(shè)備。物理設(shè)備:計算機(jī)系統(tǒng)中存在的設(shè)備。設(shè)備獨立性的實現(xiàn)為實現(xiàn)設(shè)備獨立性,應(yīng)在用戶程序中使用邏輯設(shè)備名請求某類設(shè)備,而在程序?qū)嶋H執(zhí)行時使用物理設(shè)備名。為此系統(tǒng)應(yīng)具有將邏輯設(shè)備名轉(zhuǎn)換為物理設(shè)備名的功能。可以采用邏輯設(shè)備表實現(xiàn)變換。其表項可包含:邏輯設(shè)備名物理設(shè)備名設(shè)備驅(qū)動程序地址設(shè)備分配程序—單通路設(shè)備分配當(dāng)進(jìn)程提出I/O請求時,系統(tǒng)的設(shè)備分配程序按下述步驟進(jìn)行:分配設(shè)備分配控制器分配通道單通路設(shè)備分配程序假定用戶使用物理設(shè)備名,采用單通路的I/O系統(tǒng)結(jié)構(gòu)。分配設(shè)備根據(jù)物理設(shè)備名查找SDT,從中找到該設(shè)備的DCT。再根據(jù)DCT中的設(shè)備狀態(tài)字段查看設(shè)備忙否,若忙則將進(jìn)程插入設(shè)備等待隊列;否則計算本次設(shè)備分配的安全性,若安全則進(jìn)行分配,否則仍將該進(jìn)程插入設(shè)備等待隊列。分配控制器設(shè)備分配后,再到DCT中找到與該設(shè)備相連的COCT,從該表的狀態(tài)字段中可知該控制器是否忙碌。若忙,則將進(jìn)程插入該控制器的等待隊列;否則將該控制器分配給進(jìn)程。分配通道從COCT中找到與該控制器連接的CHCT,從該表的狀態(tài)字段中可知該通道是否忙碌。若忙,則將進(jìn)程插入該通道的等待隊列;否則將該通道分配給進(jìn)程。在將相應(yīng)的設(shè)備、控制器、通道分配給進(jìn)程后,便可以啟動I/O設(shè)備實現(xiàn)I/O操作。多通路的設(shè)備分配1為了提高系統(tǒng)的靈活性和可靠性,通常采用多通路的I/O系統(tǒng)結(jié)構(gòu)。同時用戶使用邏輯設(shè)備名提出請求。其分配步驟如下:多通路的設(shè)備分配2根據(jù)進(jìn)程所提供的設(shè)備類型檢索系統(tǒng)設(shè)備表,找到第一個該類設(shè)備的DCT。若設(shè)備忙,繼續(xù)查找,僅當(dāng)所有該類設(shè)備都忙時,才把進(jìn)程插入到該類設(shè)備的等待隊列中。
多通路的設(shè)備分配3設(shè)備分配后,便可檢查與此設(shè)備相連的第一個控制器,若控制器忙,則再檢查與設(shè)備連接的下一個控制器。若與此設(shè)備相連的所有控制器都忙,則只要該設(shè)備不是該類設(shè)備的最后一個,便可退回到第一步找下一個空閑設(shè)備;否則將該進(jìn)程插入控制器等待隊列中。多通路的設(shè)備分配4若給進(jìn)程分配了控制器,便可檢查與此控制器相連的第一個通道。若通道忙,再查看與此控制器相連的第二個通道,若與此控制器相連的全部通道都忙,則只要該控制器不是與設(shè)備連接的最后一個控制器。便返回到第二步,否則將該進(jìn)程插入通道等待隊列。13.4.5錯誤處理OS可以對短暫出錯進(jìn)行彌補(bǔ)。例如:磁盤read出錯可以導(dǎo)致read重試,當(dāng)I/O失敗時,大多會返回一個錯誤碼系統(tǒng)日志記錄了出錯報告13.4.6I/O保護(hù)通過發(fā)出非法I/O指令,用戶程序可以有意或無意中斷系統(tǒng)的正常操作為防止用戶執(zhí)行非法I/O,定義所有I/O指令為特權(quán)指令。13.4.7核心數(shù)據(jù)結(jié)構(gòu)內(nèi)核需要保存I/O組件使用的狀態(tài)信息,包括打開文件表,網(wǎng)絡(luò)連接,字符設(shè)備狀態(tài)等。許多復(fù)雜的數(shù)據(jù)結(jié)構(gòu)用來跟蹤緩沖,內(nèi)存分配,及“臟”塊。某些OS用面向?qū)ο蟮姆椒ê拖鬟f的方法來實現(xiàn)I/O。UNIXI/OKernelStructure13.5轉(zhuǎn)換I/O請求為硬件操作考慮進(jìn)程從磁盤中讀取一個文件確定保存文件的設(shè)備將文件名轉(zhuǎn)換成設(shè)備實現(xiàn)表示把數(shù)據(jù)從磁盤讀到緩沖區(qū)中通知進(jìn)程數(shù)據(jù)可用把控制權(quán)返回給進(jìn)程I/O請求的周期13.6I/O軟件的層次結(jié)構(gòu)I/O軟件設(shè)計的基本思想是將設(shè)備管理軟件組織成一種層次結(jié)構(gòu)。其中低層軟件與硬件相關(guān),而高層軟件則為用戶提供一個友好的、清晰而統(tǒng)一的接口。
I/O設(shè)備軟件的層次結(jié)構(gòu)I/O設(shè)備管理軟件一般分為四層:中斷處理程序設(shè)備驅(qū)動程序與設(shè)備無關(guān)的軟件(或設(shè)備獨立性軟件)用戶空間的軟件。
13.6.1中斷處理程序設(shè)備完成I/O操作時,便發(fā)出中斷信號,CPU響應(yīng)中斷后便轉(zhuǎn)入中斷處理程序。其中斷處理過程如下:喚醒被阻塞的驅(qū)動程序進(jìn)程保護(hù)被中斷進(jìn)程的現(xiàn)場信息分析中斷原因,轉(zhuǎn)入相應(yīng)的設(shè)備中斷處理程序進(jìn)行中斷處理恢復(fù)被中斷程序的現(xiàn)場信息13.6.2設(shè)備驅(qū)動程序所有與設(shè)備相關(guān)的代碼放在設(shè)備驅(qū)動程序中。設(shè)備驅(qū)動程序與設(shè)備密切相關(guān),故應(yīng)為每一類設(shè)備配置一個驅(qū)動程序。設(shè)備驅(qū)動程序是I/O進(jìn)程與設(shè)備控制器間的通信程序。設(shè)備驅(qū)動程序的任務(wù)設(shè)備驅(qū)動程序的主要任務(wù)是:接收來自上層的與設(shè)備無關(guān)軟件的抽象請求把它轉(zhuǎn)換成設(shè)備控制器可以接收的具體命令將這些命令發(fā)送給設(shè)備控制器監(jiān)督命令的執(zhí)行磁盤驅(qū)動程序功能計算請求塊在磁盤的位置。如將磁盤邏輯塊號轉(zhuǎn)換成盤面號、磁道號、扇區(qū)號。檢查驅(qū)動器的電機(jī)是否正常運(yùn)轉(zhuǎn),磁頭是否定位在正確位置。向控制器發(fā)送I/O命令:若設(shè)備空閑則啟動設(shè)備完成I/O操作,否則將請求塊掛在設(shè)備等待隊列上。響應(yīng)由控制器或通道發(fā)來的中斷請求,并調(diào)用相應(yīng)的中斷處理程序。若正常則將數(shù)據(jù)傳送到與設(shè)備無關(guān)的軟件層,否則報告錯誤。驅(qū)動程序發(fā)出命令后的處理方式設(shè)備驅(qū)動程序發(fā)出命令后,有兩種處理方式:驅(qū)動程序阻塞,直到中斷信號將其喚醒。設(shè)備驅(qū)動程序不阻塞,用于操作時間很短的情況如幾個毫秒,這時睡眠喚醒開銷太大。13.6.3與設(shè)備無關(guān)的軟件I/O軟件的一部分(如設(shè)備驅(qū)動程序)與設(shè)備相關(guān),其他部分則與設(shè)備無關(guān)。設(shè)備驅(qū)動程序與設(shè)備無關(guān)軟件之間的界限隨操作系統(tǒng)的不同而異與設(shè)備無關(guān)軟件的基本任務(wù)是實現(xiàn)一般設(shè)備都需要的I/O功能,并向用戶層軟件提供一個統(tǒng)一的接口。與設(shè)備無關(guān)軟件的功能與設(shè)備無關(guān)軟件通常應(yīng)實現(xiàn)的功能包括:設(shè)備命名設(shè)備保護(hù)提供與設(shè)備無關(guān)的邏輯塊緩沖管理存儲設(shè)備的空間管理獨占設(shè)備的分配與釋放錯誤處理設(shè)備命名與設(shè)備無關(guān)軟件負(fù)責(zé)把設(shè)備的符號名映射到相應(yīng)的設(shè)備驅(qū)動程序上。例如,在UNIX系統(tǒng)中,像/dev/tty00這樣的設(shè)備名唯一確定了一個特殊文件的i節(jié)點,這個i節(jié)點包含了主設(shè)備號和次設(shè)備號。主設(shè)備號用于尋找對應(yīng)的設(shè)備驅(qū)動程序,而次設(shè)備號提供了設(shè)備驅(qū)動程序的有關(guān)參數(shù),用來確定要讀寫的具體設(shè)備。
設(shè)備保護(hù)對設(shè)備進(jìn)行必要的保護(hù),防止無授權(quán)的應(yīng)用或用戶的非法使用例如,在大多數(shù)大型計算機(jī)系統(tǒng)中,用戶進(jìn)程對I/O設(shè)備的直接訪問是完全禁止的;在UNIX系統(tǒng)中,使用存取權(quán)限來保護(hù)系統(tǒng)中的I/O設(shè)備。提供與設(shè)備無關(guān)的邏輯塊不同磁盤可采用不同的扇區(qū)尺寸,與設(shè)備無關(guān)軟件應(yīng)向高層軟件提供大小統(tǒng)一的邏輯塊。例如,可以將若干扇區(qū)合并成一個邏輯塊。這樣較高層軟件只與抽象設(shè)備打交道,不考慮物理扇區(qū)的尺寸而使用等長的邏輯塊。緩沖對于常見的塊設(shè)備和字符設(shè)備,一般都使用緩沖區(qū)。對塊設(shè)備,硬件一般一次讀寫一個完整塊,而用戶進(jìn)程是按任意單位讀寫數(shù)據(jù)的。如果用戶進(jìn)程只寫了半塊數(shù)據(jù),則操作系統(tǒng)通常將數(shù)據(jù)保存在內(nèi)部緩沖區(qū),等到用戶進(jìn)程寫完整塊數(shù)據(jù)才將緩沖區(qū)的數(shù)據(jù)寫到磁盤上。對字符設(shè)備,當(dāng)用戶進(jìn)程輸出數(shù)據(jù)的速度快于設(shè)備輸出數(shù)據(jù)的速度時,也必須使用緩沖。
存儲設(shè)備的空間分配在創(chuàng)建新文件并向其中寫數(shù)據(jù)時,通常要為該文件分配新的存儲塊。為完成空間分配工作,操作系統(tǒng)需為每個磁盤設(shè)置一張空閑磁盤塊表或位示圖,因查找一個空閑塊的算法與設(shè)備無關(guān),可以將該算法放在與設(shè)備無關(guān)的軟件層中處理。獨占設(shè)備的分配和釋放獨占設(shè)備在任何時刻只能被單個進(jìn)程使用,因此操作系統(tǒng)應(yīng)對設(shè)備的使用請求進(jìn)行檢查,并根據(jù)設(shè)備狀態(tài)決定是接收請求還是拒絕請求。一個簡單的處理方法是要求進(jìn)程直接通過OPEN打開設(shè)備特殊文件來提出請求。若設(shè)備不能用,則OPEN失敗。關(guān)閉獨占設(shè)備的同時釋放該設(shè)備。出錯處理一般出錯處理由設(shè)備驅(qū)動程序完成。大多數(shù)錯誤與設(shè)備相關(guān),因此只有驅(qū)動程序知道應(yīng)如何處理(比如:重試)。但有些錯誤不是設(shè)備造成的,如因磁盤塊受損而不能讀,驅(qū)動程序?qū)L試重讀一定次數(shù),若仍有錯誤則通知與設(shè)備無關(guān)軟件。若在讀用戶文件時出現(xiàn)錯誤,操作系統(tǒng)會將錯誤信息報告給調(diào)用者。若在讀一些關(guān)鍵系統(tǒng)數(shù)據(jù)時出現(xiàn)錯誤,比如位示圖,操作系統(tǒng)則打印錯誤信息,并向系統(tǒng)管理員報告相應(yīng)錯誤。13.6.4用戶空間的軟件一般來說,大部分I/O軟件都在操作系統(tǒng)中,但仍有一小部分由與用戶程序鏈接在一起的庫函數(shù)、甚至運(yùn)行于內(nèi)核之外的程序構(gòu)成。如函數(shù)printf完成輸出及輸出信息的格式化,標(biāo)準(zhǔn)I/O庫中包含許多涉及I/O的過程,它們是作為用戶程序的一部分運(yùn)行的。I/O系統(tǒng)的層次結(jié)構(gòu)
用戶空間的軟件與設(shè)備無關(guān)的軟件設(shè)備驅(qū)動程序中斷處理程序硬件I/O請求I/O回答
I/O功能進(jìn)行I/O調(diào)用;格式化I/O;Spooling命名,保護(hù),阻塞,緩沖,分配建立設(shè)備寄存器;檢查狀態(tài)當(dāng)I/O結(jié)束時喚醒驅(qū)動程序執(zhí)行I/O操作習(xí)題12.5HowdoesDMAincreasesystemconcurrency?Howdoesitcomplicatehardwaredesign?12.6Whyisitimportanttoscaleupsystem-busanddevicespeedsasCPUspeedincreases?習(xí)題習(xí)題72、4選擇題1緩沖技術(shù)中的緩沖池在_____中。A.主存B.外存C.ROMD.寄存器CPU輸出數(shù)據(jù)的速度遠(yuǎn)遠(yuǎn)高于打印機(jī)的打印速度,為了解決這一矛盾,可采用_____。A.并行技術(shù)B.通道技術(shù)C.緩沖技術(shù)D.虛存技術(shù)選擇題2通過硬件和軟件的功能擴(kuò)充,把原來獨占的設(shè)備改造成能為若干用戶共享的設(shè)備,這種設(shè)備稱為_____。A.存儲設(shè)備B.系統(tǒng)設(shè)備C.用戶設(shè)備D.虛擬設(shè)備為了使多個進(jìn)程能有效地同時處理輸入/輸出,最好使用_____結(jié)構(gòu)的緩沖技術(shù)。A.循環(huán)緩沖B.緩沖池C.單緩沖D.雙緩沖選擇題3如果I/O設(shè)備與存儲設(shè)備進(jìn)行數(shù)據(jù)交換不經(jīng)過CPU來完成,這種數(shù)據(jù)交換方式是_____。A.程序查詢B.中斷方式C.DMA方式D.無條件存取方式在采用Spooling技術(shù)的系統(tǒng)中.用戶的打印結(jié)果首先被送到_____。A.磁盤固定區(qū)域B.內(nèi)存固定區(qū)域C.終端D.打印機(jī)選擇題4設(shè)備管理程序?qū)υO(shè)備的管理是借助一些數(shù)據(jù)結(jié)構(gòu)來進(jìn)行的,下面的_____不屬于設(shè)備管理數(shù)據(jù)結(jié)構(gòu)。A.DC
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家禽飼養(yǎng)員崗中核心技能考核試卷含答案
- 煤層氣集輸工安全技能能力考核試卷含答案
- 服裝及紡織品整燙工崗前崗位安全考核試卷含答案
- 自然保護(hù)區(qū)社區(qū)共管聯(lián)絡(luò)工達(dá)標(biāo)模擬考核試卷含答案
- 井下作業(yè)工具工安全生產(chǎn)能力考核試卷含答案
- 順丁橡膠裝置操作工道德強(qiáng)化考核試卷含答案
- 2026年生物識別技術(shù)工程師安全知識庫建設(shè)
- 白馬鎮(zhèn)安全管理方案講解
- 專家安全責(zé)任手冊講解
- 傳染病患者護(hù)理循證實踐護(hù)理查房
- 心境情感障礙的護(hù)理查房
- 《公路邊坡災(zāi)害監(jiān)測技術(shù)指南》
- 腹腔鏡手術(shù)皮下氣腫處理
- 2025屆高三數(shù)學(xué)一輪復(fù)習(xí)-分段函數(shù)專項訓(xùn)練【含答案】
- 《幼兒園班級管理》:幼兒園班級管理原則
- 耳針法(耳穴埋豆)操作評分標(biāo)準(zhǔn)
- 橋梁墩柱施工方案評審
- 華為公司員工手冊培訓(xùn)
- 安全生產(chǎn)工作總體目標(biāo)和年度安全生產(chǎn)目標(biāo)
- 機(jī)器學(xué)習(xí)與深度學(xué)習(xí)PPT完整全套教學(xué)課件
- 熱注鍋爐水量自動控制
評論
0/150
提交評論