第6章+四五六章作業(yè)_第1頁
第6章+四五六章作業(yè)_第2頁
第6章+四五六章作業(yè)_第3頁
第6章+四五六章作業(yè)_第4頁
第6章+四五六章作業(yè)_第5頁
已閱讀5頁,還剩122頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第六章輸入/輸出系統(tǒng)6.1I/O系統(tǒng)的硬件結(jié)構(gòu)6.2采用通道模型的I/O系統(tǒng)6.3I/O系統(tǒng)的軟件組織6.4緩沖技術(shù)6.5磁盤的驅(qū)動調(diào)度6.6設(shè)備分配程序6.7WindowsNT的I/O系統(tǒng)6.8Windows2000/XP設(shè)備管理機(jī)制實例分析I/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型I/O軟件設(shè)計目標(biāo)I/O軟件層次結(jié)構(gòu)磁盤調(diào)度設(shè)備分配程序I/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型I/O設(shè)備硬件概覽3.按資源分配角度分類獨占設(shè)備。一經(jīng)分配給某進(jìn)程,在進(jìn)程釋放它之前,其它設(shè)備不能使用。如打印機(jī)、紙帶讀入機(jī)等。

(2)共享設(shè)備。允許若干進(jìn)程同時共享的設(shè)備。如磁盤機(jī)。(3)虛擬設(shè)備。通過假脫機(jī)(Spooling)技術(shù)把原來的獨占設(shè)備改造成可為若干個進(jìn)程所共享的設(shè)備。4.按傳輸數(shù)據(jù)數(shù)量分類外部設(shè)備按傳輸數(shù)據(jù)的數(shù)量,分為字符設(shè)備和塊設(shè)備。

(1)字符設(shè)備。每次傳輸數(shù)據(jù)以字節(jié)為單位的設(shè)備稱為字符設(shè)備,如打印機(jī)、終端、鍵盤等低速設(shè)備。

(2)塊設(shè)備。傳輸以數(shù)據(jù)塊為單位進(jìn)行的設(shè)備稱為塊設(shè)備。如磁盤、磁帶等高速外存儲器等。I/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型2.磁盤結(jié)構(gòu)解析磁盤結(jié)構(gòu)解析cont.

磁盤結(jié)構(gòu)解析

cont.C,H,S表6-1典型的軟盤和硬盤的技術(shù)參數(shù)I/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型2.時鐘圖6.3可編程時鐘

可編程時鐘的優(yōu)點是它的中斷頻率可由軟件控制。如果使用振蕩頻率為1MHz的晶體,那么計數(shù)器每一微秒接收到一個脈沖,對于16位的寄存器,中斷可編程為按1μs至65536μs的間隔發(fā)生。時鐘采用民用電產(chǎn)生固定頻率的震蕩采用晶振RC電路思考題:對于震蕩頻率為1MHz的晶振,要產(chǎn)生1s的時鐘中斷,如果用32位計數(shù)器,該計數(shù)器的值應(yīng)該設(shè)置多大?0100001001000000F4240

時鐘硬件所做的工作僅僅是按給定的時間間隔產(chǎn)生中斷,其它和時間有關(guān)的工作必須由軟件(時鐘驅(qū)動程序)來做。時鐘軟件的任務(wù)包括:①維護(hù)日期和時間;②防止進(jìn)程運行時間超過允許界限;③對CPU使用進(jìn)行記帳;④處理用戶進(jìn)程提出的時間鬧鐘系統(tǒng)調(diào)用;⑤對系統(tǒng)某些部分提供監(jiān)視定時器;⑥支持直方圖監(jiān)視和統(tǒng)計信息搜集。3.終端(1)存儲映像終端。圖6.4存儲映像終端直接寫入視頻RAM視頻RAM卡和監(jiān)視器像素(Pixel):像素的顯示:<位置,灰度>。字符的顯示:需要知道字符的像素矩陣,也就是字符的“位?!?。

不同的字符有不同的位模,這些位模通常不會變化,因此保存在視頻ROM中。行的顯示:一行顯示80個字符,每個字符被劃分為9*14個像素

(包括字符間隔)。每次只顯示一行掃描線。大家計算一下,要顯示一行字符,需要花費多大的視頻RAM空間?4*6矩陣9*5矩陣(2)RS-232終端。圖6.5RS-232終端與計算機(jī)通信UART:UniversalAsynchronousReceiverTransmitterI/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型6.1.3I/O系統(tǒng)的硬件組織1.I/O控制方式循環(huán)I/O測試方式。程序通過in,out指令直接控制I/O設(shè)備,

進(jìn)行數(shù)據(jù)傳輸。(2)程序中斷I/O方式。I/O操作仍然由CPU控制,一次只能傳輸

一個字或字符。外設(shè)不能直接訪問內(nèi)存。(3)DMA方式。(4)通道方式。圖6.7DMA方式下的數(shù)據(jù)傳輸

采用DMA方式的數(shù)據(jù)傳輸處理過程如下:①當(dāng)進(jìn)程要求設(shè)備輸入數(shù)據(jù)時,CPU把準(zhǔn)備存放輸入數(shù)據(jù)的內(nèi)存始址及要傳輸?shù)淖止?jié)數(shù)分別送入DMA控制器中的內(nèi)存地址寄存器和傳送字節(jié)計數(shù)器;另外,還要把控制/狀態(tài)寄存器中的中斷允許位和啟動位置1,從而啟動設(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控制器在傳輸完成時通過中斷請求線發(fā)出中斷信號,CPU接到中斷信號后轉(zhuǎn)中斷處理程序進(jìn)行相應(yīng)處理。⑤中斷處理結(jié)束后,CPU返回被中斷的進(jìn)程或去運行重新被調(diào)度的進(jìn)程。(3)設(shè)備控制器圖6.8設(shè)備控制器的組成用于存放從CPU送來的數(shù)據(jù)/從設(shè)備產(chǎn)生的數(shù)據(jù)用于存放從CPU送來的控制信息/從設(shè)備產(chǎn)生的狀態(tài)信息I/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型選擇型DMA多路型DMAI/O發(fā)展階段I/O通道的特點:I/O通道本質(zhì)上是一個專用于I/O處理的處理器,它能夠執(zhí)行I/O指令,因此擁有對I/O操作的完全控制。這些指令被編制成一個I/O程序,保存在內(nèi)存中。因此CPU通過指示I/O通道去執(zhí)行內(nèi)存中的一段程序的方式來啟動I/O傳輸。這些程序會說明將要訪問的設(shè)備、內(nèi)存中的存儲區(qū)域地址、優(yōu)先級以及錯誤條件下所采取的動作等。I/O通道按照這些指令控制數(shù)據(jù)的傳輸。I/O通道的特點:I/O通道本質(zhì)上是一個專用于I/O處理的處理器,它能夠執(zhí)行I/O指令,因此擁有對I/O操作的完全控制。這些指令被編制成一個I/O程序,保存在內(nèi)存中。因此CPU通過指示I/O通道去執(zhí)行內(nèi)存中的一段程序的方式來啟動I/O傳輸。這些程序會說明將要訪問的設(shè)備、內(nèi)存中的存儲區(qū)域地址、優(yōu)先級以及錯誤條件下所采取的動作等。I/O通道按照這些指令控制數(shù)據(jù)的傳輸。

幾個重要概念:

通道命令:又稱為通道命令字(CCW,ChannelcommandWord),它是規(guī)定設(shè)備的某一種動作的指令。

通道程序:是由通道命令編制出來的一段程序,用于控制設(shè)備的工作。整個通道程序確定了外圍設(shè)備應(yīng)執(zhí)行的操作及操作順序。

通道程序存放在哪里呢?

通道地址字:通道程序是存放在主存中的,為了使通道能夠正確快速地找到通道程序的起始地址,系統(tǒng)在主存中安排一個固定的單元,用來存放通道程序的起始地址,這個固定的單元稱為通道地址字(CAW,ChanneladdressWord)。通道狀態(tài)字:通道被啟動后,控制指定的設(shè)備完成規(guī)定的操作,同時,通道在執(zhí)行對外圍設(shè)備控制的過程中,要記錄通道與設(shè)備執(zhí)行情況,為此系統(tǒng)在主存中安排另一個固定單元,用于存放這些被記錄狀態(tài),這個固定單元稱為通道狀態(tài)字(CSW,ChannelStatusWord)。

通道程序:中央處理器執(zhí)行“啟動I/O”指令啟動通道工作,通道被啟動后執(zhí)行事先編制好的由通道命令組成的通道程序來控制設(shè)備工作。通道命令又稱為通道命令字(CCW,ChannelCommandWord),每一條通道命令規(guī)定了設(shè)備的某一種操作,整個通道程序就確定了設(shè)備應(yīng)執(zhí)行的操作和操作順序。通道程序是存放在內(nèi)存中的,為了使通道能夠正確快速地找到通道程序的起始地址,系統(tǒng)在內(nèi)存中安排了一個固定的單元,用來存放通道程序的起始地址,這個固定的單元稱為通道地址字(CAW,ChannelAddressWord)。通道被啟動后,控制指定的設(shè)備完成規(guī)定的操作,同時記錄通道與設(shè)備執(zhí)行情況,為此系統(tǒng)在內(nèi)存中安排另一個固定單元,用于存放這些被記錄狀態(tài),這個固定的單元稱為通道狀態(tài)字(CSW,ChannelStatusWord)。

6.2采用通道模型的I/O系統(tǒng)6.2.1通道類型字節(jié)多路通道(ByteMultiplexorChannel)2.選擇通道3.數(shù)組多路通道IBM370的I/O結(jié)構(gòu)6.2.4CPU和通道間的通訊1.輸入/輸出指令

例如,某系統(tǒng)中輸入輸出類指令主要有:SIO,TIO,HIO,TCH。所有I/O指令都具有如下格式:操作碼B1D1

由(B1)+D1形成的地址指出通道號和設(shè)備號的存放單元,該單元的內(nèi)容為:通道號設(shè)備號SIO(STARTI/O):用于啟動指定通道和設(shè)備開始工作,SIO指令發(fā)出后,根據(jù)通道和設(shè)備狀態(tài)建立結(jié)果特征,即條件碼。CPU根據(jù)執(zhí)行結(jié)果建立的條件碼得知此次啟動是否成功,再確定下一步的動作。

TIO(TESTI/O):用以檢查I/O操作是否完成,建立相應(yīng)的條件碼。

HIO(HALTI/O):強(qiáng)行停止通道和I/O設(shè)備正在執(zhí)行的操作。

TCH(TESTCHANNEL):測試通道,根據(jù)對通道測試的結(jié)果建立相應(yīng)的條件碼。2.CPU和通道間的通訊圖6.11CPU啟動通道的工作流程

通道I/O主要過程的時間關(guān)系示意圖I/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型I/O軟件設(shè)計目標(biāo)I/O軟件層次結(jié)構(gòu)磁盤調(diào)度設(shè)備分配程序6.3I/O系統(tǒng)的軟件組織6.3.1I/O軟件設(shè)計的目標(biāo)設(shè)備無關(guān)性:使程序員寫出的軟件無需任何修改便能讀出軟盤、硬盤以及CD-ROM等不同設(shè)備上的文件,而與具體設(shè)備無關(guān)。不同設(shè)備之間的差異由操作系統(tǒng)去處理,操作系統(tǒng)會調(diào)用不同的設(shè)備驅(qū)動程序來真正地將輸入數(shù)據(jù)寫到輸出設(shè)備上。

錯誤處理:錯誤應(yīng)盡可能在接近硬件的地方處理。

同步/異步傳輸:必須能處理獨占設(shè)備和共享設(shè)備的I/O操作。6.3.6I/O系統(tǒng)軟件的層次結(jié)構(gòu)圖6.12I/O系統(tǒng)的層次結(jié)構(gòu)用戶進(jìn)程count=read(fd,buffer,nbytes)if(count==nbytes){….}喚醒用戶進(jìn)程繼續(xù)執(zhí)行設(shè)備無關(guān)軟件通過fd找到對應(yīng)的文件file結(jié)構(gòu)和數(shù)據(jù)緩沖區(qū),并在緩沖區(qū)中查看數(shù)據(jù);若沒有數(shù)據(jù),則調(diào)用驅(qū)動程序讀數(shù)據(jù)。count=設(shè)備驅(qū)動程序?qū)嵤┰O(shè)備讀控制所需的一系列操作硬件

磁盤設(shè)備控制器

讀取數(shù)據(jù)完畢中斷處理程序I/O請求處理過程系統(tǒng)功能調(diào)用為什么要引入緩沖?6.4緩沖技術(shù)I/O與用戶進(jìn)程直接進(jìn)行數(shù)據(jù)交換的方法存在下面幾個問題:盡管采用DMA和通道技術(shù),提高了CPU的使用效率,但是仍然沒有縮小一個用戶進(jìn)程等到I/O操作結(jié)束的時間;有可能出現(xiàn)單進(jìn)程死鎖現(xiàn)象。當(dāng)一個進(jìn)程發(fā)送一個I/O命令后處于阻塞狀態(tài),等待I/O完成事件的發(fā)生,然后在開始I/O操作之前被換出,也就是操作系統(tǒng)將該進(jìn)程的內(nèi)存空間換出到磁盤上的交換區(qū),此時I/O操作也將被阻塞,因為它要等待該進(jìn)程被換入,于是就出現(xiàn)了死鎖;為了避免死鎖,在發(fā)出I/O請求之前,參與I/O操作的用戶存儲空間必須被鎖定在內(nèi)存中,這樣帶來兩個問題:一是干擾了操作系統(tǒng)的交換決策,二是如果這個I/O操作正在排隊,而內(nèi)存頁面的鎖定使得正在等待該I/O完成的進(jìn)程不能被交換出去,那么就會造成內(nèi)存空間浪費。6.4.1單緩沖當(dāng)用戶進(jìn)程發(fā)出I/O請求時,操作系統(tǒng)給該操作分配一個位于內(nèi)存中系統(tǒng)部分的緩沖區(qū)。輸入傳送的數(shù)據(jù)被放到系統(tǒng)緩沖區(qū)中。當(dāng)傳送完成時,進(jìn)程把該塊移到用戶空間,并立即請求另一塊,這稱做“預(yù)讀”,或者預(yù)先輸入。根據(jù)程序的局部性原理,程序在不久的將來很可能就會讀取預(yù)讀的數(shù)據(jù)。當(dāng)準(zhǔn)備將數(shù)據(jù)發(fā)送到一臺設(shè)備時,首先把這些數(shù)據(jù)從用戶空間復(fù)制到系統(tǒng)緩沖區(qū),然后就立即返回繼續(xù)執(zhí)行,而系統(tǒng)緩沖區(qū)中的數(shù)據(jù)最終是被寫入到設(shè)備中。單緩沖工作示意圖在單緩沖技術(shù)中CPU和外設(shè)輪流使用一個緩沖。每當(dāng)一個用戶進(jìn)程發(fā)出一個I/O請求時,OS便在主存中為之分配一個緩沖區(qū)。圖7.10顯示了單緩沖的工作過程,處理一塊數(shù)據(jù)時間:Max(C,T)+M

。雙緩沖工作過程示意圖

雙緩沖工作方式的基本方法是在設(shè)備輸入時,先將數(shù)據(jù)輸入到緩沖區(qū)A,裝滿后便轉(zhuǎn)向緩沖區(qū)B。此時操作系統(tǒng)可以從緩沖區(qū)A中提取數(shù)據(jù)傳送到用戶區(qū),最后由CPU對數(shù)據(jù)進(jìn)行計算。其工作過程如下圖所示。系統(tǒng)處理一塊數(shù)據(jù)的處理時間可粗略地認(rèn)為是MAX(C,T)。若C<T,可使塊設(shè)備連續(xù)輸入;若C>T,可使CPU不必等待設(shè)備輸入。也即采用雙緩沖區(qū),CPU和外設(shè)都可以連續(xù)處理而無需等待對方。但是,要求CPU和外設(shè)的速度相近。對于單緩沖和雙緩沖,當(dāng)C<=T時,可以使外部設(shè)備全速運行;當(dāng)C>T時,可以使CPU全速運行,也就是進(jìn)程不需要等待I/O,在任何一種情況下,都有性能的提高,但這種提高是以增加了復(fù)雜性為代價的。6.4.3緩沖池1.緩沖池的組成

對于既可用于輸入又可用于輸出的公用緩沖池,其中至少應(yīng)包含以下三種類型的緩沖區(qū):①空閑緩沖區(qū);②裝滿輸入數(shù)據(jù)的緩沖區(qū);③裝滿輸出數(shù)據(jù)的緩沖區(qū)。為了管理方便,可將相同類型的緩沖區(qū)鏈成一個隊列。于是,可形成以下三個隊列:(1)空緩沖區(qū)隊列emq:由空緩沖區(qū)所鏈成的隊列;(2)輸入隊列inq:由裝滿輸入數(shù)據(jù)的緩沖區(qū)所鏈成的隊列;(3)輸出隊列outq:由裝滿輸出數(shù)據(jù)的緩沖區(qū)所鏈成的隊列。除了上述三個隊列外,還應(yīng)具有四種工作緩沖區(qū):(1)用于收容輸入數(shù)據(jù)的工作緩沖區(qū);(2)用于提取輸入數(shù)據(jù)的工作緩沖區(qū);(3)用于收容輸出數(shù)據(jù)的工作緩沖區(qū);(4)用于提取輸出數(shù)據(jù)的工作緩沖區(qū)。2.緩沖池管理的基本操作對緩沖池管理提供兩個基本操作(過程):

(1)getbuf(type):用于從type所指定的隊列的隊首,摘下一個緩沖區(qū);

(2)putbuf(type,number):用于將用參數(shù)number所指示的緩沖區(qū),掛在type隊列上。3.緩沖池的工作方式圖6.15緩沖池的工作方式6.4.4預(yù)先讀與延遲寫1.預(yù)先讀操作系統(tǒng)讀塊設(shè)備時,一般通過同步方式把一指定的數(shù)據(jù)塊讀入緩沖區(qū),此時用戶進(jìn)程不得不進(jìn)入阻塞狀態(tài),等待數(shù)據(jù)傳輸?shù)慕Y(jié)束。為了加快進(jìn)程的推進(jìn)速度,提高CPU和塊設(shè)備工作的并行程度,最好在使用某一塊之前,用異步方式提早把它讀入緩沖區(qū)。當(dāng)用戶進(jìn)程實際需要該塊數(shù)據(jù)時,可以立即從緩沖區(qū)取走而無需等待。這種技術(shù)稱為預(yù)先讀。2.延遲寫當(dāng)塊設(shè)備進(jìn)行輸出時,如果某一緩沖區(qū)只寫了一部分,則不要急于把該緩沖區(qū)的內(nèi)容寫到塊設(shè)備上,而是把寫塊操作推遲到某個適當(dāng)?shù)臅r機(jī)進(jìn)行。那么什么是適當(dāng)?shù)臅r機(jī)呢?一般有兩個:其一是延遲寫的緩沖區(qū)被寫滿時,其二是該緩沖區(qū)被重新分配時。注意,文件關(guān)閉時緩沖區(qū)被強(qiáng)行物理寫入塊設(shè)備。I/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型I/O軟件設(shè)計目標(biāo)I/O軟件層次結(jié)構(gòu)磁盤調(diào)度設(shè)備分配程序6.5磁盤的驅(qū)動調(diào)度

磁盤的驅(qū)動調(diào)度是先進(jìn)行移臂(移動存取臂)調(diào)度,再進(jìn)行旋轉(zhuǎn)調(diào)度。例如,某一時刻對磁盤的輸入/輸出請求序列是:柱面(CC)磁道(HH)物理記錄R7417487454064277

進(jìn)一步考查7號柱面上的三個輸入/輸出請求。按上述次序,磁盤需旋轉(zhuǎn)近兩周才能完成訪問。若將輸入/輸出請求按照下列的次序完成訪問:柱面(CC)磁道(HH)物理記錄R741745748

移臂調(diào)度算法有:

(1)先來先服務(wù)算法(FCFS)。先來先服務(wù)調(diào)度算法是最簡單的一種方法,它按照輸入/輸出請求到達(dá)的順序,逐一完成訪問請求。

(2)最短查找時間優(yōu)先法(SSTF)。這種算法總是先完成距當(dāng)前存取臂距離最近的柱面上的輸入/輸出請求。

(3)掃描法(SCAN)。由于請求序列具有動態(tài)性質(zhì),所以可采用掃描法。存取臂從磁盤的一端出發(fā),向另一端移動,遇到需要訪問的柱面就完成訪問請求,直至到達(dá)磁盤的另一端。到達(dá)另一端后,存取臂移動方向就倒轉(zhuǎn)過來,繼續(xù)完成這一方向上的訪問請求。圖6.16電梯調(diào)度算法流程I/O系統(tǒng)I/O硬件設(shè)備介紹磁盤時鐘設(shè)備視頻控制器RS-232I/O系統(tǒng)的硬件組織I/O系統(tǒng)的軟件組織I/O控制方式設(shè)備控制器通道模型I/O軟件設(shè)計目標(biāo)I/O軟件層次結(jié)構(gòu)設(shè)備分配程序磁盤調(diào)度6.6設(shè)備分配程序6.6.1設(shè)備分配的數(shù)據(jù)結(jié)構(gòu)

在配置有通道的計算機(jī)系統(tǒng)中,設(shè)備分配程序至少應(yīng)解決以下三個問題:(1)是否有能用來為I/O請求提供的通路?(2)是否有一條以上的通路可用?(3)如果當(dāng)前尚無通路可用,那么通路何時才能空閑?圖6.17設(shè)備管理中的三種控制塊圖6.18UCB,CUCB,CCB間的連接圖6.19UCB和PCB的連接

圖6.20系統(tǒng)設(shè)備表與UCB的關(guān)系

對于所請求的I/O設(shè)備,根據(jù)上述的查找方法,可能出現(xiàn)三種情況:

(1)對于所請求的I/O設(shè)備,僅有一條通路可用,例如:通道B——控制器C——設(shè)備E。

(2)對于所請求的I/O設(shè)備,可以找到一條以上的可用通路,例如上例中,最多可找出四條可用通路:通道A——控制器C——設(shè)備E通道A——控制器D——設(shè)備E通道B——控制器C——設(shè)備E通道B——控制器D——設(shè)備E(3)對于所請求的I/O設(shè)備,沒有一條可用的通路。6.6.2I/O調(diào)度程序

在多進(jìn)程的系統(tǒng)中,由于進(jìn)程數(shù)多于設(shè)備數(shù),就必然要引起進(jìn)程對資源的爭奪。為使系統(tǒng)有條不紊地工作,系統(tǒng)必須具有一套合理的設(shè)備分配原則。

這些原則與下述的四個因素有關(guān):

(1)I/O設(shè)備的固有屬性

(2)I/O設(shè)備的分配算法

①先請求先服務(wù)。②優(yōu)先級高者優(yōu)先。

(3)設(shè)備分配的安全性

(4)與設(shè)備的無關(guān)性

不能采用時間片輪轉(zhuǎn)法!!!6.6.3設(shè)備分配的實施1.單通路I/O系統(tǒng)的設(shè)備分配在單通路I/O系統(tǒng)中,按如下步驟實施設(shè)備分配:分配設(shè)備。(2)分配控制器。(3)分配通道。2.多通路I/O系統(tǒng)的設(shè)備分配

假定某進(jìn)程n向系統(tǒng)提出I/O請求,要求為它分配一臺I/O設(shè)備。于是系統(tǒng)可選取該類設(shè)備中的任何一臺設(shè)備分配給該進(jìn)程。其步驟如下:

(1)根據(jù)要求I/O的進(jìn)程n所提供的設(shè)備類型,檢索SDT表,找到第一個該類物理設(shè)備的UCB,由狀態(tài)信息可知其忙閑情況。若忙,則檢查第二個物理設(shè)備的UCB。若該類型的全部設(shè)備都處于忙碌狀態(tài),表明該類設(shè)備已分配完畢。進(jìn)程n的此次I/O請求無法滿足,只好把進(jìn)程n插入到等待該類設(shè)備的隊列中。只要在該類設(shè)備中有一個空閑設(shè)備,系統(tǒng)便可對其計算分配該設(shè)備給進(jìn)程n的安全性。若安全,則把設(shè)備分配給進(jìn)程n,否則將其插入該類設(shè)備的等待隊列。(2)當(dāng)系統(tǒng)把第i個設(shè)備分配給進(jìn)程n后,便可通過檢查與此設(shè)備相連的第一個CUCB,而得知該控制器是否忙碌;若忙,再檢查第二個CUCB表。若與此設(shè)備相連的所有的控制器都忙,則表明無控制器可分配給設(shè)備i。只要設(shè)備i不是該類設(shè)備中的最后一個,便可返回到步驟(1),試圖再找下一個空閑設(shè)備;否則,仍將該進(jìn)程插入控制器等待隊列中。(3)若有空閑的控制器,便可進(jìn)一步檢查與此控制器相連的第一個通道是否忙碌。若忙,再查看第二個CCB表,若與此控制器相連的全部通道都忙,表明無通道可分配給控制器j。只要控制器j不是該設(shè)備i的最后一個控制器,便返回到步驟(2),試圖找出一個空閑的控制器,否則,將該進(jìn)程插入通道等待隊列。若有空閑通道可用,則此次設(shè)備分配成功,將相應(yīng)的設(shè)備、控制器和通道分配給進(jìn)程n,接著便可啟動I/O設(shè)備,開始信息傳送。多通路I/O系統(tǒng)設(shè)備分配的流程示于圖6.21。圖6.21設(shè)備分配流程圖圖6.22I/O系統(tǒng)概貌1.I/O系統(tǒng)概貌6.7.1I/O系統(tǒng)的結(jié)構(gòu)6.7WindowsNT的I/O系統(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)緩沖存儲管理器(CacheManager);(4)設(shè)備驅(qū)動程序(DeviceDriver);(5)網(wǎng)絡(luò)轉(zhuǎn)發(fā)程序(NetWorkRedirector)和網(wǎng)絡(luò)服務(wù)程序(NetworkServer)。2.I/O管理程序

I/O管理程序建立了NT執(zhí)行體的I/O模型,它實現(xiàn)與設(shè)備無關(guān)的輸入/輸出,即它并不進(jìn)行實際的I/O處理。它的主要工作是建立一個代表I/O操作的I/O請求包IRP(I/ORequestPacket),把IRP傳送給適當(dāng)?shù)尿?qū)動程序并在I/O完成后處理其結(jié)果,最后撤消IRP。與此相反,驅(qū)動程序接收IRP,執(zhí)行IRP規(guī)定的操作,并在完成后將IRP傳回I/O管理程序或通過驅(qū)動程序再傳到另一驅(qū)動程序,以求進(jìn)一步的處理。

I/O系統(tǒng)采用包驅(qū)動方式,每個I/O請求都用一個I/O請求包來表達(dá)。每個IRP是一個數(shù)據(jù)結(jié)構(gòu),用以控制在每一操作步驟上的I/O操作的處理。3.虛擬文件除了I/O管理程序,該結(jié)構(gòu)中還有四類驅(qū)動程序:文件系統(tǒng)、緩沖存儲管理程序、設(shè)備驅(qū)動程序、網(wǎng)絡(luò)轉(zhuǎn)發(fā)程序。要把這四類功能、特性均不相同的部件組合在一起,并建立一個一體化的統(tǒng)一系統(tǒng),必須進(jìn)行高層的抽象,建立一個統(tǒng)一的邏輯模型。

NT建立的邏輯模型吸收了UNIXI/O系統(tǒng)的概念,認(rèn)為“所有的讀寫數(shù)據(jù)都看成是直接送往虛擬文件的字節(jié)流”。虛擬文件用文件描述符表示,處理虛擬文件就像處理一個真正的文件。由操作系統(tǒng)判定這個虛擬文件究竟是設(shè)備、管道、網(wǎng)絡(luò)還是磁盤上的真正文件。圖6.23打開一個文件對象6.7.2驅(qū)動程序模型每一個驅(qū)動程序都由以下標(biāo)準(zhǔn)成套(或組合)組成:(1)一個初始化程序;(2)一組調(diào)度程序;(3)一個啟動I/O的程序;(4)一個中斷服務(wù)程序;(5)一個中斷服務(wù)DPC(延遲過程調(diào)用)程序;(6)一個完成例程;(7)一個撤消I/O例程;(8)一個卸載例程;(9)一個出錯記錄例程。6.7.3同步I/O操作與異步I/O操作

圖6.24同步I/O操作

同步I/O操作過程可歸納如下:

(1)按用戶要求,I/O管理程序為之形成IRP,并把它傳送給驅(qū)動程序,由驅(qū)動程序完成I/O操作。

(2)設(shè)備完成I/O操作后,發(fā)中斷請求,設(shè)備驅(qū)動程序中的中斷處理程序進(jìn)行相應(yīng)中斷處理。

(3)I/O管理程序完成I/O請求。在大多數(shù)操作系統(tǒng)中,同步I/O是標(biāo)準(zhǔn)的,WindowsNT除了提供同步I/O外還提供異步I/O,允許子系統(tǒng)選用同步I/O或異步I/O,并根據(jù)它的應(yīng)用程序接口操作的不同,為客戶應(yīng)用程序提供不同類型的I/O。圖6.25異步I/O6.8Windows2000/XP設(shè)備管理機(jī)制實例分析6.8.1Windosw2000/XP輸入/輸出系統(tǒng)的體系結(jié)構(gòu)傳統(tǒng)上認(rèn)為,輸入/輸出(I/O)系統(tǒng)是操作系統(tǒng)設(shè)計中最難規(guī)范化的領(lǐng)域,因為I/O設(shè)備五花八門、種類繁雜,小到傳感器、鼠標(biāo),大到磁盤、磁帶、繪圖儀等等,它們的性能截然不同。總之,其數(shù)據(jù)格式、數(shù)據(jù)組織到使用方法都有很大差別。如何規(guī)范化設(shè)計,這對操作系統(tǒng)設(shè)計也是需要研究的。Windows2000/XP操作系統(tǒng)采用和強(qiáng)調(diào)了軟件工程中抽象的原則,在設(shè)計中全力找出各種事務(wù)的共性,用一致的模型、方法和界面來使其規(guī)范化,如用客戶/服務(wù)器模型來規(guī)范各個用戶進(jìn)程之間的關(guān)系。

Windows2000/XP的I/O系統(tǒng)體系結(jié)構(gòu)如圖6.26所示,它由幾個可執(zhí)行模塊和大量設(shè)備驅(qū)動程序組成。通過這張圖我們可以看到,Windows2000的I/O體系的設(shè)計使用了分層結(jié)構(gòu),這有利于實現(xiàn)其平臺無關(guān)性,也為其他目標(biāo)的實現(xiàn)帶來了便利。圖6.26Windows2000/XP的I/O系統(tǒng)體系結(jié)構(gòu)6.8.2核心態(tài)模塊大部分I/O操作并不會涉及所有的組件,一個典型的I/O操作從應(yīng)用程序調(diào)用一個與I/O操作有關(guān)的函數(shù)開始,通常會涉及I/O管理器、一個或多個設(shè)備驅(qū)動程序以及硬件抽象層。I/O系統(tǒng)相關(guān)的核心態(tài)模塊的主要功能如下。I/O管理器:把應(yīng)用程序和系統(tǒng)組件連接到各種虛擬的、邏輯的和物理的設(shè)備上,并定義了一個支持設(shè)備驅(qū)動程序的基本構(gòu)架,負(fù)責(zé)驅(qū)動I/O請求的處理,為設(shè)備驅(qū)動程序提供核心服務(wù)。它把用戶態(tài)的讀寫轉(zhuǎn)化為I/O請求包IRP。

即插即用管理器:通過與I/O管理器和總線驅(qū)動程序的協(xié)同工作來檢測硬件資源的分配,并檢測相應(yīng)硬件設(shè)備的添加和刪除。電源管理器:通過與I/O管理器的協(xié)調(diào)工作,來檢測整個系統(tǒng)和單個硬件設(shè)備,完成不同電源狀態(tài)的轉(zhuǎn)換。WMI支持例程:也叫做Windows驅(qū)動程序模型WDM(WindowsDriverModel)的提供者,運行驅(qū)動程序使用這些支持例程作為媒介,與用戶態(tài)運行的WMI服務(wù)通信。設(shè)備驅(qū)動程序:為某種類型的設(shè)備提供一個I/O接口。設(shè)備驅(qū)動程序從I/O管理器接收命令,當(dāng)處理完畢后通知I/O管理器。設(shè)備驅(qū)動程序之間的協(xié)同工作也通過I/O管理器進(jìn)行。即插即用組件:用于控制和配置設(shè)備的用戶態(tài)API。即插即用WDM接口:I/O系統(tǒng)為驅(qū)動程序提供了分層結(jié)構(gòu),這一結(jié)構(gòu)包括WDM驅(qū)動程序、驅(qū)動程序?qū)雍驮O(shè)備對象。注冊表:存儲基本硬件、驅(qū)動程序的初始化和配置信息的數(shù)據(jù)庫。硬件抽象層:I/O訪問例程把設(shè)備驅(qū)動程序與多種多樣的硬件平臺隔離開來,使它們在給定的體系結(jié)構(gòu)中是二進(jìn)制可移植的,并在Windows2000/XP支持的硬件體系結(jié)構(gòu)中是源代碼可移植的。圖6.27一個典型的I/O請求流程6.8.3輸入/輸出系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)1.文件對象文件對象提供了基于內(nèi)存的共享物理資源的表示法(除了被命名的管道和郵箱外,它們雖然是基于內(nèi)存的但不是物理的)。在Windows2000/XP的I/O系統(tǒng)中,文件對象也代表這些資源。當(dāng)調(diào)用者打開文件或單一設(shè)備時,I/O管理器將為文件對象返回一個句柄。文件對象的主要屬性如表6-2所示。表6-2文件對象屬性屬性目的文件名標(biāo)識文件對象指向的物理文件字節(jié)偏移量在文件中標(biāo)識當(dāng)前位置(只對同步I/O有效)共享模式表示當(dāng)調(diào)用者正在使用文件時,其他調(diào)用者是否可以打開文件進(jìn)行讀、寫操作或刪除操作指向設(shè)備對象的指針表示文件在其上駐留的設(shè)備類型指向卷參數(shù)塊的指針表示文件在其上駐留的卷或分區(qū)指向區(qū)域?qū)ο蟮闹羔樏枋鲆粋€映射文件的根結(jié)構(gòu)指向?qū)S酶咚倬彺嬗成涞闹羔槺硎疚募哪囊徊糠钟筛咚倬彺婀芾砥鞴芾?,以及它們駐留在高速緩存的什么地方圖6.29說明打開一個文件時系統(tǒng)所發(fā)生的情況。在這個實例中,C程序調(diào)用庫函數(shù)fopen,由它去調(diào)用WIN32的CreatFile函數(shù)。然后由系統(tǒng)DLL在NTDLL.DLL中調(diào)用本地NTCreatFile函數(shù),在NTDLL.DLL中的例程包含引發(fā)到核心態(tài)系統(tǒng)服務(wù)調(diào)度程序轉(zhuǎn)換適當(dāng)?shù)闹噶?。最后,系統(tǒng)服務(wù)調(diào)度程序在NTOSKRNL.EXE中調(diào)用真正的NTCreatFile例程。圖6.29打開一個文件對象的過程2.驅(qū)動程序?qū)ο蠛驮O(shè)備對象當(dāng)線程為一個文件對象打開一個句柄時,I/O管理器必須根據(jù)文件對象名稱來決定它將調(diào)用哪個驅(qū)動程序來處理請求。而且,I/O管理器必須在線程下一次使用同一個文件句柄時可定位這個信息。驅(qū)動程序?qū)ο蟠硐到y(tǒng)中一個獨立的驅(qū)動程序,I/O管理器從這些驅(qū)動程序?qū)ο笾蝎@得并為I/O記錄每個驅(qū)動程序的調(diào)度例程的入口。設(shè)備對象在系統(tǒng)中代表一個物理的、邏輯的或虛擬的設(shè)備,并描述它們的特征,如緩沖區(qū)的對齊方式和它用來保存即將到來的I/O請求包的設(shè)備隊列的位置。圖6.30顯示了一個設(shè)備驅(qū)動器對象。從圖中可以看出,設(shè)備對象反過來指向自己的驅(qū)動程序?qū)ο?,這樣I/O管理器就知道在接收一個I/O請求時應(yīng)該調(diào)用哪個驅(qū)動程序,即它使用設(shè)備對象找到代表該設(shè)備驅(qū)動程序的驅(qū)動程序?qū)ο螅缓罄迷诔跏蓟埱笾刑峁┑墓δ艽a來索引驅(qū)動程序?qū)ο?。每個功能碼都對應(yīng)于一個驅(qū)動程序的入口。圖6.30Windows2000/XP輸入/輸出的數(shù)據(jù)結(jié)構(gòu)3.IO請求包

IRP是I/O系統(tǒng)用來存儲處理I/O請求所需信息的地方。當(dāng)線程調(diào)用I/O服務(wù)時,I/O管理器就構(gòu)造一個IRP來表示在整個I/O過程中要進(jìn)行的操作。I/O管理器在IRP中保存一個指向調(diào)用者的文件對象指針。IRP由兩部分組成:固定部分(標(biāo)題)和一個或多個堆棧單元。圖6.31單層驅(qū)動程序中一個I/O請求涉及的數(shù)據(jù)結(jié)構(gòu)

6.8.4Windows2000/XP的設(shè)備驅(qū)動程序1.核心驅(qū)動程序核心驅(qū)動程序主要分為如下幾種:

(1)文件系統(tǒng)驅(qū)動程序:接收訪問文件的I/O請求,主要針對大容量的設(shè)備和網(wǎng)絡(luò)設(shè)備。

(2)PnP管理器和電源管理器設(shè)備驅(qū)動程序:包括大容量存儲設(shè)備、協(xié)議棧和網(wǎng)絡(luò)適配器等。

(3)為NT編寫的驅(qū)動程序:可在Windows2000/XP下工作,但一般不支持電源管理和PnP。

(4)WIN32子系統(tǒng)顯示和打印驅(qū)動程序:把與設(shè)備無關(guān)的圖形(GDI)請求轉(zhuǎn)換為設(shè)備專用請求。這些驅(qū)動的集合稱為“核心態(tài)圖形驅(qū)動程序”。

(5)WDM驅(qū)動程序:包括對PnP、電源管理和WMI的支持。2.Windows2000/XP支持的其他驅(qū)動程序

Windows2000/XP支持的其他驅(qū)動程序主要有:

(1)虛擬設(shè)備驅(qū)動程序:用于模擬16位的MSDOS的驅(qū)動程序,它們捕獲MSDOS應(yīng)用程序?qū)Χ丝诘囊?,并將其轉(zhuǎn)化為本機(jī)WIN32I/O函數(shù)。

(2)WIN32子系統(tǒng)的打印驅(qū)動程序:把與設(shè)備無關(guān)的圖形(GDI)請求轉(zhuǎn)換為打印機(jī)相關(guān)命令,這些命令再發(fā)給核心模式的驅(qū)動程序,例如,并口驅(qū)動(Parprot.sys)、USB打印機(jī)驅(qū)動(Usbprint.sys)等。

3.硬件支持的驅(qū)動程序硬件支持的驅(qū)動程序主要有:

(1)類驅(qū)動程序:該驅(qū)動程序一般提供某類設(shè)備的基本支持接口,如磁盤、CD-ROM等,它通過端口驅(qū)動程序提供的邏輯端口操作硬件。

(2)端口驅(qū)動程序:用于提供某種接口(如串行接口、并行接口、USB接口等)的操作例程庫,它是小端口驅(qū)動程序的一個功能包裝,通過這些接口,類驅(qū)動程序可以直接訪問接口而不必去和連接它們的總線交互了。

(3)小端口驅(qū)動程序:該驅(qū)動程序用于對實際硬件適配器的I/O請求映射,它負(fù)責(zé)最后驅(qū)動硬件工作。當(dāng)文件系統(tǒng)收到一個特定文件“寫”數(shù)據(jù)的請求時,如何轉(zhuǎn)換為磁盤上的柱面/磁道/扇區(qū)?圖6.32便說明了數(shù)據(jù)“寫”到磁盤上的過程。圖6.32文件驅(qū)動和磁盤驅(qū)動的層次

6.8.5Windows2000/XP的I/O處理Windows2000/XP允許用戶以同步或異步的方式進(jìn)行I/O操作。若是同步方式,設(shè)備執(zhí)行數(shù)據(jù)傳輸并在I/O完成時返回一個狀態(tài)碼,然后程序就可以立即訪問被傳輸?shù)臄?shù)據(jù)。若是異步方式,則允許應(yīng)用程序發(fā)布I/O請求,在設(shè)備傳輸數(shù)據(jù)的同時,應(yīng)用程序繼續(xù)執(zhí)行。

快速I/O是一個特殊的機(jī)制,它允許I/O系統(tǒng)不產(chǎn)生IRP而直接到文件系統(tǒng)驅(qū)動程序或高速緩存管理器去執(zhí)行I/O請求。映射文件I/O是I/O系統(tǒng)的一個重要特性,是由I/O系統(tǒng)管理器和內(nèi)存管理器共同產(chǎn)生的?!坝成湮募笔侵赴汛疟P中的文件視為進(jìn)程的虛擬內(nèi)存的一部分,程序可以將文件作為一個大數(shù)組來訪問,而無需做緩沖數(shù)據(jù)或執(zhí)行磁盤I/O的工作。下面通過對單層驅(qū)動程序的同步I/O請求例子,來介紹Windows2000/XP是如何進(jìn)行I/O處理的。對單層驅(qū)動程序的同步I/O請求處理有如下六個步驟:

(1)?I/O請求通過子系統(tǒng)DLL。

(2)子系統(tǒng)調(diào)用I/O管理器的NTWriteFile服務(wù)。

(3)I/O管理器以IRP的形式給設(shè)備驅(qū)動程序發(fā)送請求。

(4)驅(qū)動程序驅(qū)動I/O操作。

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論