中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
設(shè)備管理(五)

一、前言

學(xué)習(xí)了存儲(chǔ)器管理后,繼續(xù)學(xué)習(xí)設(shè)備管理,設(shè)備管理的主要功能有緩沖區(qū)管理、設(shè)備分配、設(shè)備處理、虛擬設(shè)備及實(shí)現(xiàn)設(shè)備獨(dú)立性等,由于I/O設(shè)備不僅種類繁多,而且他們的特性和操作方式往往相差甚大,使得設(shè)備管理稱為操作系統(tǒng)中最繁雜且與硬件最緊密的部分,下面開(kāi)始正式的學(xué)習(xí)。

二、I/O系統(tǒng)

2.1 I/O設(shè)備

I/O設(shè)備類型繁多,在OS觀點(diǎn)看,設(shè)備使用特性、數(shù)據(jù)傳輸速率、數(shù)據(jù)的傳輸單位、設(shè)備共享屬性等都是重要的性能指標(biāo)。可以按照不同角度對(duì)他們進(jìn)行分類

① 按設(shè)備的使用特性分類,可把設(shè)備分為兩類,第一類是存儲(chǔ)設(shè)備,也稱為外存活后備存儲(chǔ)器、輔助存儲(chǔ)器,是計(jì)算機(jī)系統(tǒng)用于存儲(chǔ)信息的主要設(shè)備,該設(shè)備速度慢,容量大,價(jià)格便宜。第二類是輸入/輸出設(shè)備,可分為輸入設(shè)備、輸出設(shè)備和交互式設(shè)備,如鍵盤,鼠標(biāo),掃描儀,打印機(jī),顯示器等。

② 按傳輸速率分類,可將I/O設(shè)備分為三類,第一類是低速設(shè)備,其傳輸速率僅為每秒鐘幾個(gè)字節(jié)至幾百個(gè)字節(jié)的設(shè)備,如鍵盤、鼠標(biāo)等。第二類是中速設(shè)備,其傳輸速率為每秒數(shù)千個(gè)字節(jié)至十萬(wàn)個(gè)字節(jié)的設(shè)備,如行式打印機(jī)、激光打印機(jī)等。第三類是高速設(shè)備,其傳輸速率在數(shù)百個(gè)千字節(jié)至千兆字節(jié)的設(shè)備,如磁帶機(jī)、磁盤機(jī)、光盤機(jī)等。

③ 按信息交換的單位分類,可把I/O設(shè)備分為兩類,第一類為塊設(shè)備,這類設(shè)備用于存儲(chǔ)信息,信息以數(shù)據(jù)塊為單位,如磁盤,每個(gè)盤塊512B~4KB,傳輸速率較高,通常每秒鐘幾兆位,另一特征是可尋址,即對(duì)它可隨機(jī)地讀/寫(xiě)任一塊,磁盤設(shè)備的I/O常采用DMA方式。第二類是字符設(shè)備,用于數(shù)據(jù)的輸入和輸出,其基本單位是字符,屬于無(wú)結(jié)構(gòu)類型,如打印機(jī)等,其傳輸速率較低,通常為幾個(gè)字節(jié)至數(shù)千個(gè)字節(jié),另一特征是不可尋址,即輸入/出時(shí)不能指定數(shù)據(jù)的輸入源地址及輸出的目標(biāo)地址,此外,常采用中斷驅(qū)動(dòng)方式。

④ 按設(shè)備的共享屬性分類,可以分為三類,獨(dú)占設(shè)備,在一段時(shí)間內(nèi)只允許一個(gè)用戶(進(jìn)程)訪問(wèn)的設(shè)備,即臨界資源。共享設(shè)備,在一段時(shí)間內(nèi)允許多個(gè)進(jìn)程同時(shí)訪問(wèn)的設(shè)備,當(dāng)然,每一時(shí)刻仍然只允許一個(gè)進(jìn)程訪問(wèn),如磁盤(可尋址和可隨機(jī)訪問(wèn))。虛擬設(shè)備,通過(guò)虛擬技術(shù)將一臺(tái)設(shè)備變換為若干臺(tái)邏輯設(shè)備,供若干個(gè)用戶(進(jìn)程)同時(shí)使用。

通常,設(shè)備并不是直接與CPU進(jìn)行通信,而是與設(shè)備控制器通信,因此,在I/O設(shè)備中應(yīng)該含有與設(shè)備控制器之間的接口,在該接口有三種類型的信號(hào),各對(duì)應(yīng)一條信號(hào)線。

① 數(shù)據(jù)信號(hào)線,用于在設(shè)備控制器之間傳送數(shù)據(jù)信號(hào),對(duì)于輸入設(shè)備而言,由外界輸入的信號(hào)經(jīng)轉(zhuǎn)換器轉(zhuǎn)換后所形成的數(shù)據(jù),通常先送入緩沖器中,當(dāng)數(shù)量達(dá)到一定的比特(字符)數(shù)后,再?gòu)木彌_器通過(guò)一組信號(hào)線傳送給設(shè)備控制器。對(duì)輸出設(shè)備而言,則先將從設(shè)備控制器經(jīng)過(guò)數(shù)據(jù)信號(hào)線傳送來(lái)的一批數(shù)據(jù)先暫存于緩沖器中,經(jīng)轉(zhuǎn)換器做適當(dāng)轉(zhuǎn)換后,再逐個(gè)字符地輸出。

② 控制信號(hào)線,作為由設(shè)備控制器向I/O設(shè)備發(fā)送控制信號(hào)時(shí)的通路,該信號(hào)規(guī)定了設(shè)備將要執(zhí)行的操作,如讀操作(指由設(shè)備向控制器傳送數(shù)據(jù))或?qū)懖僮鳎ㄓ煽刂破鹘邮軘?shù)據(jù)),或執(zhí)行磁頭移動(dòng)等操作。

③ 狀態(tài)信號(hào)線,用于傳送設(shè)備當(dāng)前狀態(tài)的信號(hào),設(shè)備的當(dāng)前狀態(tài)有正在讀(或?qū)懀辉O(shè)備已讀(寫(xiě))完成,并準(zhǔn)備好新的數(shù)據(jù)傳送。

2.2 設(shè)備控制器

設(shè)備控制器是計(jì)算機(jī)中的一個(gè)實(shí)體,其主要職責(zé)是控制一個(gè)或多個(gè)I/O設(shè)備,以實(shí)現(xiàn)I/O設(shè)備和計(jì)算機(jī)之間的數(shù)據(jù)交換,它是CPU與I/O設(shè)備之間的接口,它接收從CPU發(fā)來(lái)的命令,并去控制I/O設(shè)備工作,以使處理從繁雜的設(shè)備控制事務(wù)中解脫出來(lái)。其是一個(gè)可編址的設(shè)備,當(dāng)它僅控制一個(gè)設(shè)備時(shí),它只有一個(gè)唯一的設(shè)備地址,若控制器可連接多個(gè)設(shè)備時(shí),則應(yīng)該含有多個(gè)設(shè)備地址,并使每個(gè)設(shè)備地址對(duì)應(yīng)一個(gè)設(shè)備。設(shè)備控制器可以分為用于控制字符設(shè)備的控制器和用于控制塊設(shè)備的控制器

設(shè)備控制器的基本功能如下

接收和識(shí)別命令,CPU可以向控制器發(fā)送多種不同的命令,設(shè)備控制器應(yīng)能夠接收并識(shí)別這些命令,為此,控制器中應(yīng)具有相應(yīng)的控制寄存器,用來(lái)存放接收的命令和參數(shù),并對(duì)所接收的命令進(jìn)行譯碼,相應(yīng)的,在磁盤控制器中有多個(gè)寄存器和命令譯碼器。

數(shù)據(jù)交換,實(shí)現(xiàn)CPU與控制器之間、控制器與設(shè)備之間的數(shù)據(jù)交換,對(duì)于前者,通過(guò)數(shù)據(jù)總線,由CPU并行地將數(shù)據(jù)寫(xiě)入控制器,或從控制器中并行地讀出數(shù)據(jù),對(duì)于后者,是是被將數(shù)據(jù)輸入到控制器,或從控制器傳送給設(shè)備,為此,在控制器中必須設(shè)置一個(gè)數(shù)據(jù)寄存器。

標(biāo)識(shí)和報(bào)告設(shè)備的狀態(tài),控制器應(yīng)該幾下設(shè)備的狀態(tài)供CPU了解,在控制器中設(shè)置一狀態(tài)寄存器,用其中的每一位來(lái)反映設(shè)備的某一種狀態(tài),當(dāng)CPU將該寄存器的內(nèi)存讀入后,便可了解該設(shè)備的狀態(tài)。

地址識(shí)別,系統(tǒng)中的每一個(gè)設(shè)備都有一個(gè)地址,而設(shè)備控制器又必須能夠識(shí)別它所控制的每個(gè)設(shè)備的地址,此外,為使CPU能向(或從)寄存器中寫(xiě)入(或讀出)數(shù)據(jù),這些寄存器都應(yīng)該具有唯一的地址,如硬盤控制器中各寄存器的地址分別為320~32F之一,控制器應(yīng)該能正確識(shí)別這些地址,為此,需要在控制器中配置地址譯碼器。

數(shù)據(jù)緩沖,由于I/O設(shè)備的速率較低而CPU和內(nèi)存速率很高,故在控制器中必須設(shè)置一個(gè)緩沖器,在輸出時(shí),用此緩沖器暫存由主機(jī)高速傳來(lái)的數(shù)據(jù),然后才以I/O設(shè)備所具有的速率將緩沖器的數(shù)據(jù)傳送給I/O設(shè)備,在輸入時(shí),緩沖器則用于暫存從I/O設(shè)備送來(lái)的數(shù)據(jù),待接收一批數(shù)據(jù)后,再將緩沖器中的數(shù)據(jù)高速地傳送至主機(jī)。

差錯(cuò)控制,設(shè)備控制器監(jiān)管對(duì)I/O設(shè)備傳送來(lái)的數(shù)據(jù)進(jìn)行差錯(cuò)檢測(cè),若發(fā)現(xiàn)傳送中出現(xiàn)了錯(cuò)誤,則向CPU報(bào)告,于是CPU將本次傳送的數(shù)據(jù)作廢,并重新傳送一次,這樣便可以確保數(shù)據(jù)輸入的正確性。

由于設(shè)備控制器位于CPU與設(shè)備之間,既要與CPU通信,又要與設(shè)備通信,還應(yīng)具有按照CPU所發(fā)來(lái)的命令去控制設(shè)備工作的功能,因此,現(xiàn)有的大多數(shù)控制器都是由如下的三部分組成。

設(shè)備控制器與處理機(jī)的接口,該接口用于實(shí)現(xiàn)CPU與設(shè)備控制器之間的通信,共有三類信號(hào)線,數(shù)據(jù)線、地址線、控制線,數(shù)據(jù)線與兩類寄存器相連接,第一類是數(shù)據(jù)寄存器,第二類是控制/狀態(tài)寄存器。

設(shè)備控制器與設(shè)備的接口,設(shè)備控制器可以連接一個(gè)或多個(gè)設(shè)備,相應(yīng)地,在控制器中便有一個(gè)或多個(gè)設(shè)備接口,一個(gè)接口連接一臺(tái)設(shè)備,在每個(gè)接口中都存在數(shù)據(jù)、控制和狀態(tài)三種類型的信號(hào),控制器中的I/O邏輯根據(jù)處理機(jī)發(fā)來(lái)的地址信號(hào)去選擇一個(gè)設(shè)備接口。

I/O邏輯,用于實(shí)現(xiàn)對(duì)設(shè)備的控制,通過(guò)一組控制線與處理機(jī)交互,處理機(jī)利用該邏輯向控制器發(fā)送I/O命令,I/O邏輯對(duì)收到的命令進(jìn)行譯碼,每當(dāng)CPU要啟動(dòng)一個(gè)設(shè)備時(shí),一方面將啟動(dòng)命令發(fā)送給控制器,另一方面又同時(shí)通過(guò)地址線把地址發(fā)送給控制器,由控制器的I/O邏輯對(duì)收到的地址進(jìn)行譯碼,再根據(jù)所譯出的命令對(duì)所選設(shè)備進(jìn)行控制。

2.2 I/O通道

雖然在CPU與I/O設(shè)備之間增加了設(shè)備控制器后,可以大大減少CPU對(duì)I/O的干預(yù),但是當(dāng)主機(jī)所配置的外設(shè)很多時(shí),CPU的負(fù)擔(dān)仍然很重,因此,在CPU和設(shè)備控制器之間又增設(shè)了通道。其主要目的是為了建立獨(dú)立的I/O操作,不僅使數(shù)據(jù)的傳送能獨(dú)立于CPU,而且也希望有關(guān)對(duì)I/O操作的組織、管理及其結(jié)束處理盡量獨(dú)立,以保證CPU有更多的時(shí)間去進(jìn)行數(shù)據(jù)處理。在設(shè)置了通道后,CPU只需要向通道發(fā)送一條I/O指令,通道在收到該指令后,便從內(nèi)存中取出本次要執(zhí)行的通道程序,然后執(zhí)行該通道程序,僅當(dāng)通道完成了規(guī)定的I/O任務(wù)后,才向CPU發(fā)中斷信號(hào)。I/O通道是一種特殊的處理機(jī),具有執(zhí)行I/O指令的能力,并通過(guò)執(zhí)行通道(I/O)程序來(lái)控制I/O操作,但I(xiàn)/O通道與一般的處理機(jī)不同,因?yàn)槠渲噶铑愋蛦我煌瑫r(shí)沒(méi)有自己的內(nèi)存,與CPU共享主內(nèi)存。

通道用于控制外圍設(shè)備(包括字符設(shè)備和塊設(shè)備),由于外圍設(shè)備的類型較多,傳輸速率相差甚大,因?yàn)槭雇ǖ谰哂卸喾N類型,根據(jù)信息交換方式的不同,將通道分為以下三種。

字節(jié)多路通道,這是一種按照字節(jié)交叉方式工作的通道,通常都含有許多非分配型子通道,其數(shù)量可以幾十到數(shù)百個(gè),每個(gè)子通道連接一臺(tái)I/O設(shè)備,并控制該設(shè)備的I/O操作,這些子通道按照時(shí)間片輪轉(zhuǎn)方式共享主通道。

數(shù)組選擇通道,字節(jié)多路通道不適合連接高速設(shè)備,數(shù)組選擇通道按數(shù)組進(jìn)行數(shù)據(jù)傳送,其通常只含有一個(gè)分配型子通道,在一段時(shí)間內(nèi)只能執(zhí)行一道通道程序,控制一臺(tái)設(shè)備進(jìn)行數(shù)據(jù)傳送,致使當(dāng)某臺(tái)設(shè)備占用了該通道后,便一直由它獨(dú)占,即使是它無(wú)數(shù)據(jù)傳送,通道被閑置,也不允許其他設(shè)備使用該通道,直至該設(shè)備傳送完畢釋放該通道,其利用率很低。

數(shù)組多路通道,由于數(shù)組選擇通道每次只允許一個(gè)設(shè)備傳送數(shù)據(jù),數(shù)組多路通道是將數(shù)組選擇通道傳輸速率高和字節(jié)多路通道能使各子通道(設(shè)備)分時(shí)并行操作的優(yōu)點(diǎn)相結(jié)合而形成的一種新通道,其含有多個(gè)非分配型子通道,具有很高的數(shù)據(jù)傳輸速率,其數(shù)據(jù)傳輸是按數(shù)組方式進(jìn)行的。

由于通道價(jià)格昂貴,計(jì)算所設(shè)置的通道較少,提高通道的利用率的一種很有效的方法是增加設(shè)備到主機(jī)間的通路而不增加通道。

三、I/O控制方式

3.1 程序I/O方式

在早起計(jì)算機(jī)系統(tǒng)中,由于無(wú)中斷機(jī)構(gòu),處理機(jī)對(duì)I/O設(shè)備的控制采取程序I/O方式,或稱為忙-等待方式,即在處理機(jī)向控制器發(fā)出一條I/O指令啟動(dòng)輸入設(shè)備輸入數(shù)據(jù)時(shí),要同時(shí)把狀態(tài)寄存器中的忙/閑標(biāo)志busy設(shè)置為1,然后便不斷地循環(huán)測(cè)試busy,只有當(dāng)其為0時(shí),表示輸入已經(jīng)送入控制器的數(shù)據(jù)寄存器中,于是處理機(jī)將數(shù)據(jù)寄存器中的數(shù)據(jù)取出,送入內(nèi)存指定單元中,這樣便完成了一個(gè)字(符)的I/O。

在程序I/O方式中,由于CPU的高速性和I/O設(shè)備的低速性,致使CPU的絕大部分時(shí)間都處于等待I/O設(shè)備完成數(shù)據(jù)I/O的循環(huán)測(cè)試中,造成對(duì)CPU的極大浪費(fèi)。

3.2 中斷驅(qū)動(dòng)I/O控制方式

當(dāng)某進(jìn)程要啟動(dòng)某個(gè)I/O設(shè)備工作時(shí),便由CPU向相應(yīng)的設(shè)備控制器發(fā)出一條I/O命令,然后立即返回繼續(xù)執(zhí)行原來(lái)的任務(wù),設(shè)備控制器于是按照該命令的要求去控制指定I/O設(shè)備,此時(shí),CPU與I/O設(shè)備并行操作。一旦數(shù)據(jù)進(jìn)入數(shù)據(jù)寄存器,控制器便通過(guò)控制線向CPU發(fā)送一個(gè)中斷信號(hào),由CPU檢查輸入過(guò)程中是否出錯(cuò),若無(wú)錯(cuò),便由控制器發(fā)送取走數(shù)據(jù)的信號(hào),再通過(guò)控制器及數(shù)據(jù)線將數(shù)據(jù)寫(xiě)入內(nèi)存指定單元中。

在I/O設(shè)備輸入每個(gè)數(shù)據(jù)的過(guò)程中,由于無(wú)需CPU干預(yù),因而可使CPU與I/O設(shè)備并行工作,僅當(dāng)完成一個(gè)數(shù)據(jù)輸入時(shí),才需CPU花費(fèi)極短的時(shí)間去做一些中斷處理。

3.3 直接存儲(chǔ)器訪問(wèn)(DMA)I/O控制方式

雖然中斷驅(qū)動(dòng)I/O比程序I/O方式更有效,但是,它仍是以字(節(jié))為單位進(jìn)行I/O的,每當(dāng)完成一個(gè)字(節(jié))的I/O時(shí),控制器便要向CPU請(qǐng)求一次中斷,換言之,采用中斷驅(qū)動(dòng)I/O方式時(shí)的CPU是以字(節(jié))為單位進(jìn)行干預(yù)的,將這種方式用于塊設(shè)備的I/O是非常低效的,例如,為了從磁盤讀取1KB的數(shù)據(jù)塊,需要中斷CPU1K次,為了進(jìn)一步減少CPU對(duì)I/O的干預(yù)而引入了直接存儲(chǔ)器訪問(wèn)方式,該方式的特點(diǎn)如下

① 數(shù)據(jù)傳輸?shù)幕締挝皇菙?shù)據(jù)塊,即在CPU與I/O設(shè)備之間,每次傳送至少一個(gè)數(shù)據(jù)塊。

② 所傳送的數(shù)據(jù)是從設(shè)備直接送入內(nèi)存的,或者相反。

③ 僅在傳送一個(gè)或多個(gè)數(shù)據(jù)塊的開(kāi)始和結(jié)束時(shí),需要CPU干預(yù),整塊數(shù)據(jù)的傳送是在控制器的控制下完成的。

DMA控制器由三部分組成,主機(jī)與DMA控制器的接口;DMA控制器與塊設(shè)備的接口;I/O控制邏輯。

說(shuō)明:DMA控制器中的寄存器說(shuō)明如下

① 命令/狀態(tài)寄存器(CR),用于接收從CPU發(fā)送來(lái)的I/O命令,或有關(guān)控制信息,或設(shè)備的狀態(tài)。

② 內(nèi)存地址寄存器(MAR),在輸入時(shí),它存放把數(shù)據(jù)從設(shè)備傳送到內(nèi)存的起始目標(biāo)地址,在輸出時(shí),它存放由內(nèi)存到設(shè)備的內(nèi)存源地址。

③ 數(shù)據(jù)寄存器(DR),用于暫存從設(shè)備到內(nèi)存,或從內(nèi)存到設(shè)備的數(shù)據(jù)。

④ 數(shù)據(jù)計(jì)數(shù)器(DC),存放本次CPU要讀或?qū)懙淖郑ü?jié))數(shù)。

當(dāng)CPU要從磁盤讀入一個(gè)數(shù)據(jù)塊時(shí),便向磁盤控制器發(fā)送一條讀命令,該命令被送到其中的命令寄存器(CR)中,同時(shí),還需要發(fā)送本次要將數(shù)據(jù)讀入的內(nèi)存起始目標(biāo)地址,該地址被送入內(nèi)存地址寄存器(MAR)中,本次要讀數(shù)據(jù)的字(節(jié))數(shù)被送入數(shù)據(jù)寄存器(DC)中,還須將磁盤中的源地址直接送至DMA控制器的I/O控制邏輯上,然后,啟動(dòng)DMA控制器進(jìn)行數(shù)據(jù)傳送,以后,CPU便可去處理其他任務(wù),此后,整個(gè)數(shù)據(jù)傳送過(guò)程便由DMA控制器進(jìn)行控制,當(dāng)DMA控制器已從磁盤中讀入一個(gè)字(節(jié))的數(shù)據(jù)并送入數(shù)據(jù)寄存器(DR)后,再挪用一個(gè)存儲(chǔ)器周期,將該字(節(jié))傳送到MAR所指示的內(nèi)存單元中,接著便對(duì)MAR內(nèi)容加1,將DC內(nèi)存減1,若減后DC內(nèi)存不為0,表示傳送未完成,便繼續(xù)傳送下一個(gè)字(節(jié)),否則,由DMA控制發(fā)出中斷請(qǐng)求。

下圖展示了三種不同方式的流程。

3.4 I/O通道控制方式

雖然DMA方式比起中斷方式已經(jīng)顯著地減少CPU的干預(yù),即已由以字(節(jié))為單位的干預(yù)減少到了以數(shù)據(jù)塊為單位進(jìn)行干預(yù),但CPU沒(méi)發(fā)出一條I/O指令,也只能去讀(或?qū)懀┮粋€(gè)連續(xù)的數(shù)據(jù)塊,而當(dāng)我們需要一次去讀多個(gè)數(shù)據(jù)塊且將他們分別傳送到不同的內(nèi)存區(qū)域,或者相反時(shí),則須由CPU分別發(fā)出多條I/O指令及進(jìn)行多次中斷才能完成。I/O通道方式是DMA的發(fā)展,它可以進(jìn)一步減少CPU的干預(yù),即把一個(gè)數(shù)據(jù)塊的讀(或?qū)懀閱挝坏母深A(yù)減少為對(duì)一組數(shù)據(jù)塊的讀(或?qū)懀┘坝嘘P(guān)的控制和管理為單位的干預(yù)。同時(shí),可以實(shí)現(xiàn)CPU、通道、I/O設(shè)備的并行操作,提高資源利用率。

通道是通過(guò)執(zhí)行通道程序,并與設(shè)備控制器共同實(shí)現(xiàn)對(duì)I/O設(shè)備的控制的,通道程序是由一系列通道指令(或稱為通道命令)所構(gòu)成的,通道指令與一般的機(jī)器指令不同,它的每條指令都包含下列的信息。

操作碼,操作碼規(guī)定了指令所執(zhí)行的操作,如讀、寫(xiě)、控制等操作。

內(nèi)存地址,內(nèi)存地址標(biāo)明字符送入內(nèi)存(讀操作)和從內(nèi)存取出(寫(xiě)操作)時(shí)的內(nèi)存首址。

計(jì)數(shù),該信息表示本條指令所要讀(或?qū)懀?shù)據(jù)的字節(jié)數(shù)。

通道程序結(jié)束位P,該位用于表示通道程序是否結(jié)束,P=1表示本條指令是通道程序的最后一條指令。

記錄結(jié)束標(biāo)志R,R=0表示本通道指令與下一條指令所處理的數(shù)據(jù)是同屬于一個(gè)記錄,R=1表示這是處理某記錄的最后一條指令。

下面給出了一個(gè)由六條通道指令所構(gòu)成的簡(jiǎn)單通道程序,該程序的功能是將內(nèi)存中不同地址的數(shù)據(jù)攜程多個(gè)記錄,其中,前三條指令是分別將813~892單元中的80個(gè)字符和1034~1173單元中的140個(gè)字符及5830~5889單元的60個(gè)字符攜程一個(gè)記錄,第四條指令是單獨(dú)寫(xiě)一個(gè)具有300個(gè)字符的記錄,第五、六條指令共寫(xiě)含500個(gè)字符的記錄。

四、緩沖管理

在設(shè)備管理中,為了緩和CPU與I/O設(shè)備速度不匹配的矛盾,提高CPU與I/O設(shè)備的并行性,在I/O設(shè)備與處理機(jī)交換數(shù)據(jù)時(shí)都用到了緩沖區(qū)。

① 緩和CPU和I/O設(shè)備間速度不匹配的矛盾。

② 減少對(duì)CPU的中斷頻率,放寬對(duì)CPU中斷響應(yīng)時(shí)間的限制。

③ 提高CPU和I/O設(shè)備之間的并行性。

4.1 單緩沖

每當(dāng)用戶進(jìn)程發(fā)出一個(gè)I/O請(qǐng)求時(shí),操作系統(tǒng)便在主存中為之分配一個(gè)緩沖區(qū),假定從磁盤把一塊數(shù)據(jù)輸入到緩沖區(qū)的時(shí)間為T,操作系統(tǒng)將該緩沖區(qū)中的數(shù)據(jù)傳送到用戶區(qū)的時(shí)間為M,而CPU對(duì)這一塊數(shù)據(jù)處理(計(jì)算)的時(shí)間為C,由于T和C是可以并行的,當(dāng)T>C時(shí),系統(tǒng)對(duì)每一塊數(shù)據(jù)的處理時(shí)間為M+T,反之,為M+C,系統(tǒng)對(duì)每一塊數(shù)據(jù)的處理時(shí)間為Max(C,T) + M。

在字符設(shè)備輸入時(shí),緩沖區(qū)用于暫存用戶輸入的一行數(shù)據(jù),在輸入期間,用戶進(jìn)程被掛起以等待數(shù)據(jù)輸入完畢,在輸出時(shí),用戶進(jìn)程將一行數(shù)據(jù)輸入到緩沖區(qū)后,繼續(xù)進(jìn)行處理,當(dāng)用戶進(jìn)程已有第二行數(shù)據(jù)輸出時(shí),如果第一行數(shù)據(jù)尚未被提取完畢,則此時(shí)用戶進(jìn)程應(yīng)該阻塞。

4.2 雙緩沖

為了加快輸入和輸出的速度,提高設(shè)備利用率,人們又引入了雙緩沖區(qū)機(jī)制,稱為緩沖對(duì)換,在設(shè)備輸入時(shí),先將數(shù)據(jù)送入第一個(gè)緩沖區(qū),裝滿后便轉(zhuǎn)向第二個(gè)緩沖區(qū),此時(shí)操作系統(tǒng)可以從第一緩沖區(qū)中移出數(shù)據(jù),并送入用戶進(jìn)程,接著由CPU對(duì)數(shù)據(jù)進(jìn)行計(jì)算,在雙緩沖時(shí),系統(tǒng)處理一塊數(shù)據(jù)的時(shí)間可以粗略地認(rèn)為是Max(C,T),如果CT,則可使CPU不必等待設(shè)備輸入。對(duì)于字符設(shè)備,若采用行輸入方式,則采用雙緩沖通常能消除用戶的等待時(shí)間,即用戶在輸入完第一行后,在CPU執(zhí)行第一行中的命令時(shí),用戶可繼續(xù)向第二緩沖區(qū)輸入下一行數(shù)據(jù)。

4.3 循環(huán)緩沖

當(dāng)輸入與輸出或生產(chǎn)者與消費(fèi)者的速度基本相匹配時(shí),采用雙緩沖能獲得較好的效果,可使生產(chǎn)者和消費(fèi)者基本上能并行操作,但若兩者速度相差甚遠(yuǎn),雙緩沖的效果則不夠理想,因此,引入了多緩沖機(jī)制,可將多個(gè)緩沖組織成循環(huán)緩沖形式。對(duì)于用作輸入的循環(huán)緩沖,通常是提供給輸入進(jìn)程或計(jì)算進(jìn)程使用,輸入進(jìn)程不斷向空緩沖去輸入數(shù)據(jù),而計(jì)算進(jìn)程則從中提取數(shù)據(jù)進(jìn)行計(jì)算。

循環(huán)緩沖區(qū)的組成如下

① 多個(gè)緩沖區(qū),在循環(huán)緩沖區(qū)中包括多個(gè)緩沖區(qū),每個(gè)緩沖區(qū)的大小相同,作為輸入的多緩沖區(qū)可分為三種類型,用于裝輸入數(shù)據(jù)的空緩沖區(qū)R、已裝滿數(shù)據(jù)的緩沖區(qū)G以及計(jì)算進(jìn)程正在使用的先行工作緩沖區(qū)C

② 多個(gè)指針,作為輸入的緩沖區(qū)可設(shè)置三個(gè)指針,用于指示計(jì)算進(jìn)程下一個(gè)可用緩沖區(qū)G的指針Nextg、指示輸入進(jìn)程下次可用的空緩沖區(qū)R的指針Nexti、以及用于指示計(jì)算進(jìn)程正在使用的緩沖區(qū)C的指針Current。

計(jì)算進(jìn)程和輸入進(jìn)程可以利用下述兩個(gè)過(guò)程來(lái)使用循環(huán)緩沖區(qū)(循環(huán)緩沖的使用)。

① Getbuf過(guò)程,當(dāng)計(jì)算進(jìn)程要使用緩沖區(qū)中的數(shù)據(jù)時(shí),可調(diào)用Getbuf過(guò)程,該過(guò)程將由指針Nextg所指示的緩沖區(qū)提供給進(jìn)程使用,相應(yīng)的,須把它改為現(xiàn)行工作緩沖區(qū),并將Current指針指向該緩沖區(qū)的第一個(gè)單元,同時(shí)將Nextg移向下一個(gè)G緩沖區(qū),類似地,當(dāng)輸入進(jìn)程要使用空緩沖區(qū)來(lái)裝入數(shù)據(jù)時(shí),調(diào)用Getbuf過(guò)程,由該過(guò)程將指針Nexti所指示的緩沖區(qū)提供給輸入進(jìn)程使用,同時(shí)將Nexti指針移向下一個(gè)R緩沖區(qū)。

② Releasebuf過(guò)程,當(dāng)計(jì)算進(jìn)程把C緩沖區(qū)中的數(shù)據(jù)提取完畢時(shí),便調(diào)用Releasebuf過(guò)程,將緩沖區(qū)C釋放,此時(shí),把該緩沖區(qū)由當(dāng)前(現(xiàn)行)工作緩沖區(qū)C改為空緩沖區(qū)R,類似地,當(dāng)輸入進(jìn)程把緩沖區(qū)裝滿時(shí),也應(yīng)該調(diào)用Releasebuf過(guò)程,將該緩沖區(qū)釋放,并改為G緩沖區(qū)。

使用輸入循環(huán)緩沖,可使輸入進(jìn)程和計(jì)算進(jìn)程并行執(zhí)行(進(jìn)程同步),相應(yīng)地,指針Nexti和指針Nextg將不斷地沿著順時(shí)針?lè)较蛞苿?dòng),這樣就會(huì)出現(xiàn)如下兩種情況。

① Nexti指針追趕上Nextg指針,這意味著輸入進(jìn)程的速度大于計(jì)算進(jìn)程處理數(shù)據(jù)的速度,已把全部可用的空緩沖區(qū)裝滿,再無(wú)緩沖區(qū)可用,此時(shí),輸入進(jìn)程應(yīng)該阻塞,直到計(jì)算進(jìn)程把某個(gè)緩沖區(qū)中的數(shù)據(jù)全部提取完,使之成為空緩沖區(qū)R,并調(diào)用Releasebuf過(guò)程將它釋放時(shí),才將輸入進(jìn)程喚醒,這種情況稱為系統(tǒng)受計(jì)算限制。

② Nextg指針追趕上Nexti指針,這意味著輸入數(shù)據(jù)的速度低于計(jì)算進(jìn)程處理數(shù)據(jù)的速度,使全部裝有輸入數(shù)據(jù)的緩沖區(qū)都被抽空,再無(wú)裝有數(shù)據(jù)的緩沖區(qū)供計(jì)算進(jìn)程提取數(shù)據(jù),這時(shí),計(jì)算進(jìn)程應(yīng)該阻塞,直至輸入進(jìn)程又裝滿某個(gè)緩沖區(qū),并調(diào)用Releasebuf過(guò)程將它釋放時(shí),才去喚醒計(jì)算進(jìn)程,這種情況稱為系統(tǒng)受I/O限制。

4.4 緩沖池

上述的緩沖區(qū)僅適用于某特定的I/O進(jìn)程和計(jì)算進(jìn)程,因而它們屬于專用緩沖,當(dāng)系統(tǒng)較大時(shí),將會(huì)有許多這樣的循環(huán)緩沖,這樣會(huì)消耗大量的內(nèi)存空間,而且利用率不高,為了提高緩沖區(qū)的利用率,引入緩沖池,在池中設(shè)置了多個(gè)可供若干個(gè)進(jìn)程共享的緩沖區(qū)。

對(duì)于既可以用于輸出的共用緩沖池,其中至少包含有一下三種類型的緩沖區(qū)。

① 空(閑)緩沖區(qū)。

② 裝滿輸入數(shù)據(jù)的緩沖區(qū)。

③ 裝滿輸出數(shù)據(jù)的緩沖區(qū)。

為了管理方便,將相同類型的緩沖區(qū)鏈成一個(gè)隊(duì)列,形成了空緩沖隊(duì)列emq、輸入隊(duì)列inq、輸出隊(duì)列outq。還具有四種工作緩沖區(qū),用于收容輸入數(shù)據(jù)的工作緩沖區(qū)、用于提取輸入數(shù)據(jù)的工作緩沖區(qū)、用于收容輸出數(shù)據(jù)的工作緩沖區(qū)、用于提取輸出數(shù)據(jù)的工作緩沖區(qū)。

緩沖區(qū)可以工作在收容輸入、提取輸入、收容輸出、提取輸出四種工作方式下。

收容輸入,在輸入進(jìn)程需要輸入數(shù)據(jù)時(shí),便調(diào)用Getbuf(emp)過(guò)程,從空緩沖隊(duì)列的隊(duì)首取出一個(gè)空緩沖區(qū),把它作為收容輸入工作緩沖hin,然后,把數(shù)據(jù)輸入其中,裝滿后再調(diào)用Putbuf(inq,hin)過(guò)程,將該緩沖區(qū)掛在輸入隊(duì)列上。

提取輸入,當(dāng)計(jì)算進(jìn)程需要輸入數(shù)據(jù)時(shí),調(diào)用Getbuf(inq)過(guò)程,從輸入隊(duì)列隊(duì)首取出一個(gè)緩沖區(qū),作為提取輸入工作緩沖區(qū)sin,計(jì)算進(jìn)程從中提取數(shù)據(jù),計(jì)算進(jìn)程用完該數(shù)據(jù)后,再調(diào)用Putbuf(emq,sin)過(guò)程,將該緩沖區(qū)掛到空緩沖隊(duì)列emq上。

收容輸入,當(dāng)計(jì)算進(jìn)程需要輸出時(shí),調(diào)用Getbuf(emq)過(guò)程從空緩沖區(qū)隊(duì)列emq的隊(duì)首取出一個(gè)空緩沖區(qū),作為收容輸出工作緩沖區(qū)hout,當(dāng)其中裝滿輸出數(shù)據(jù)后,又調(diào)用Putbuf(outq,hout)過(guò)程,將該緩沖區(qū)掛在outq末尾。

提取輸出,由輸出進(jìn)程調(diào)用Getbuf(outq)過(guò)程,從輸出隊(duì)列隊(duì)首取出一個(gè)裝滿輸出數(shù)據(jù)的緩沖區(qū),作為提取輸出工作緩沖區(qū)sout,在數(shù)據(jù)提取完后,再調(diào)用Putbuf(emq,sout)過(guò)程,將該緩沖區(qū)掛在空緩沖隊(duì)列末尾。

五、I/O軟件

5.1 設(shè)備獨(dú)立性軟件

應(yīng)用程序獨(dú)立于具體使用的物理設(shè)備,為了實(shí)現(xiàn)設(shè)備獨(dú)立性而引入了邏輯設(shè)備和物理設(shè)備這兩個(gè)概念,在應(yīng)用程序中,使用邏輯設(shè)備名稱來(lái)請(qǐng)求使用某類設(shè)備,而系統(tǒng)在實(shí)際執(zhí)行時(shí),還必須使用物理設(shè)備名稱。因此,系統(tǒng)需具有將邏輯設(shè)備名稱轉(zhuǎn)換為某物理設(shè)備名稱的功能,這非常類似于存儲(chǔ)器管理所介紹的邏輯地址和物理地址的概念,在應(yīng)用程序中使用的是邏輯地址,系統(tǒng)在分配和使用內(nèi)存時(shí),必須使用物理地址。在實(shí)現(xiàn)了設(shè)備獨(dú)立性功能后,可帶來(lái)以下好處。

設(shè)備分配時(shí)的靈活性,當(dāng)應(yīng)用程序(進(jìn)程)以物理名稱來(lái)請(qǐng)求使用指定的某臺(tái)設(shè)備時(shí),如果該設(shè)備已經(jīng)分配給其他進(jìn)程或正在檢修,而此時(shí)盡管還有幾臺(tái)其他的相同設(shè)備正在空閑,該進(jìn)程仍然阻塞,但若進(jìn)程能夠以邏輯設(shè)備名稱來(lái)請(qǐng)求某類設(shè)備時(shí),系統(tǒng)可立即將該類設(shè)備中的任一臺(tái)分配給進(jìn)程,僅當(dāng)所有此類設(shè)備全部分配完畢時(shí),進(jìn)程才會(huì)阻塞。

易于實(shí)現(xiàn)I/O重定向,用于I/O操作的設(shè)備可以更換,而不必改變應(yīng)用程序。

5.2 邏輯設(shè)備名到物理設(shè)備名映射的實(shí)現(xiàn)

邏輯設(shè)備表,為了實(shí)現(xiàn)設(shè)備的獨(dú)立性,系統(tǒng)必須設(shè)置一張邏輯設(shè)備表LUT(Logical Unit Table),用于將應(yīng)用程序中所使用的邏輯設(shè)備名映射為物理設(shè)備名,該表的每個(gè)表目中包含了三項(xiàng),邏輯設(shè)備名、物理設(shè)備名、設(shè)備驅(qū)動(dòng)程序的入口地址

通過(guò)邏輯設(shè)備名,系統(tǒng)可以查找LUT,便可找到物理設(shè)備和驅(qū)動(dòng)程序。

LUT的設(shè)置問(wèn)題,LUT的設(shè)置可以采用兩種方式:在整個(gè)系統(tǒng)中設(shè)置一張LUT(由于系統(tǒng)中所有進(jìn)程的設(shè)備分配情況都記錄在同一張LUT中,因而不允許在LUT中具有相同的邏輯設(shè)備名,這就要求所有用戶都不能使用相同的邏輯設(shè)備名,多用戶下難以做到,單用戶很好實(shí)現(xiàn))。為每個(gè)用戶設(shè)置一張LUT(每當(dāng)用戶登錄時(shí),便為該用戶建立一個(gè)進(jìn)程,同時(shí)建立一張LUT,并將該表放入進(jìn)程的PCB中)

六、設(shè)備分配

6.1 設(shè)備分配中的數(shù)據(jù)結(jié)構(gòu)

在進(jìn)行設(shè)備分配時(shí),通常都需要借助于一些表格的幫助,在表格中記錄了相應(yīng)設(shè)備或控制器的狀態(tài)及對(duì)設(shè)備或控制器進(jìn)行控制所需的信息,在進(jìn)行設(shè)備分配時(shí)所需要的數(shù)據(jù)結(jié)構(gòu)有設(shè)備控制表控制器控制表、通道控制表系統(tǒng)設(shè)備表等。

設(shè)備控制表(DCT),系統(tǒng)為每個(gè)設(shè)備都配置了一張?jiān)O(shè)備控制表,用于記錄本設(shè)備的情況。

說(shuō)明:設(shè)備隊(duì)列隊(duì)首指針(凡因?yàn)檎?qǐng)求本設(shè)備而未得到滿足的進(jìn)程,其PCB都應(yīng)按照一定的策略排成一個(gè)隊(duì),稱該隊(duì)列為設(shè)備請(qǐng)求隊(duì)列或簡(jiǎn)稱設(shè)備隊(duì)列,其隊(duì)首指針指向隊(duì)首PCB),設(shè)備狀態(tài)(當(dāng)設(shè)備處于使用狀態(tài)時(shí),應(yīng)該設(shè)備設(shè)置為忙/閑標(biāo)志置為1),與設(shè)備連接的控制器表指針(該指針指向該設(shè)備所連接的控制器的控制表),重復(fù)執(zhí)行次數(shù)(由于外部設(shè)備在傳送數(shù)據(jù)時(shí),較容易發(fā)生數(shù)據(jù)傳送錯(cuò)誤,因而在許多系統(tǒng)中,如果發(fā)生傳送錯(cuò)誤,并不立即認(rèn)為傳送失敗,而是令它重傳,并由系統(tǒng)規(guī)定設(shè)備在工作中發(fā)生錯(cuò)誤時(shí)應(yīng)重復(fù)執(zhí)行的次數(shù))

控制器控制表(COCT),系統(tǒng)為每個(gè)控制器都設(shè)置了一張用于記錄本控制器情況的控制器控制表。

通道控制表(CHCT),每個(gè)通道都配有一張通道控制表。

系統(tǒng)設(shè)備表(SDT),系統(tǒng)范圍的數(shù)據(jù)結(jié)構(gòu),記錄了系統(tǒng)中全部設(shè)備的情況,每個(gè)設(shè)備占用一個(gè)表目,其中包括有設(shè)備類型、設(shè)備標(biāo)識(shí)符、設(shè)備控制表及設(shè)備驅(qū)動(dòng)程序的入口等。

6.2 SPOOLing技術(shù)

通過(guò)SPOOLing技術(shù)可將一臺(tái)物理I/O設(shè)備虛擬為多臺(tái)邏輯I/O設(shè)備,允許多個(gè)用戶共享一臺(tái)物理I/O設(shè)備。

為了緩和CPU的高速性和I/O設(shè)備的低速性間的矛盾而引入的脫機(jī)輸入、脫機(jī)輸出技術(shù),該技術(shù)是利用專門的外圍控制機(jī),將低速I/O設(shè)備上的數(shù)據(jù)傳送到高速磁盤上,或者相反。事實(shí)上,當(dāng)系統(tǒng)中引入了多道程序技術(shù)后,可以利用其中的一道程序,來(lái)模擬脫機(jī)輸入時(shí)的外圍控制機(jī)的功能,把低速I/O設(shè)備上的數(shù)據(jù)傳送到高速磁盤上,再利用另一道程序來(lái)模擬脫機(jī)輸出時(shí)外圍控制機(jī)的功能,把數(shù)據(jù)從磁盤上傳送到低速輸出設(shè)備上,這樣,便可在主機(jī)的直接控制下,實(shí)現(xiàn)脫機(jī)輸入、輸出的功能。此時(shí)的外圍操作與CPU對(duì)數(shù)據(jù)的處理同時(shí)進(jìn)行,我們把這種在聯(lián)機(jī)情況下實(shí)現(xiàn)的同時(shí)外圍操作稱為SPOOLing,或稱為假脫機(jī)操作。

SPOOLing技術(shù)是對(duì)脫機(jī)輸入、輸出系統(tǒng)的惡魔你,相應(yīng)地,SPOOLing系統(tǒng)必須建立在具有多道程序功能的操作系統(tǒng)上,而且還應(yīng)有高速隨機(jī)外存的支持,這通常采用磁盤存儲(chǔ)技術(shù)。

SPOOLing系統(tǒng)由一下三部分組成。

輸入井和輸出井,這是在磁盤上開(kāi)辟的兩個(gè)大存儲(chǔ)空間。輸入井是模擬脫機(jī)輸入時(shí)的磁盤設(shè)備,用于暫存I/O設(shè)備輸入的數(shù)據(jù),輸出井是模擬脫機(jī)輸出時(shí)的磁盤,用于暫存用戶程序和輸出數(shù)據(jù)。

輸入緩沖區(qū)和輸出緩沖區(qū),緩和CPU與磁盤之間速度不匹配,在內(nèi)存中開(kāi)辟的兩個(gè)緩沖區(qū),輸入緩沖區(qū)用于暫存由輸入設(shè)備送來(lái)的數(shù)據(jù),以后再傳送到輸入井,輸出緩沖區(qū)用于暫存從輸出井送來(lái)的數(shù)據(jù),以后再傳送給輸出設(shè)備。

輸入進(jìn)程SPi和輸出進(jìn)程SPo,利用兩個(gè)進(jìn)程來(lái)模擬脫機(jī)I/O時(shí)的外圍控制機(jī),其中,進(jìn)程SPi模擬脫機(jī)輸入時(shí)的外圍控制機(jī),將用戶要求的數(shù)據(jù)從輸入機(jī)通過(guò)輸入緩沖區(qū)再送到輸入井,當(dāng)CPU需要輸入數(shù)據(jù)時(shí),直接從輸入井讀入內(nèi)存;進(jìn)程SPo模擬脫機(jī)輸出時(shí)的外圍控制機(jī),把用戶要求輸出的數(shù)據(jù)先從內(nèi)存送到輸出井,待輸出設(shè)備空閑時(shí),再將輸出井中的數(shù)據(jù)經(jīng)過(guò)輸出緩沖區(qū)送到輸出設(shè)備上。

利用SPOOLing技術(shù),可以將獨(dú)占設(shè)備打印機(jī)改造為一臺(tái)供多個(gè)用戶共享的設(shè)備,從而提高設(shè)備的利用率,也方便了用戶。當(dāng)用戶進(jìn)程請(qǐng)求打印輸出時(shí) ,SPOOLing系統(tǒng)統(tǒng)一為它打印輸出,但是并不真正立即把打印機(jī)分配給該用戶進(jìn)程,而只為它做兩件事。

① 由輸出進(jìn)程在輸出井中為之申請(qǐng)一個(gè)空閑磁盤塊區(qū),并將要打印的數(shù)據(jù)送入其中。

② 輸出進(jìn)程再為用戶進(jìn)程申請(qǐng)一張空白的用戶請(qǐng)求打印表,并將該用戶的打印要求填入其中,再將該表掛到請(qǐng)求打印隊(duì)列上。

如果還有進(jìn)程要求打印輸出,系統(tǒng)仍可以接受該請(qǐng)求,也同樣為該進(jìn)程做上述兩件事情。

如果打印機(jī)空閑,輸出進(jìn)程將從請(qǐng)求打印隊(duì)列的隊(duì)首取出一張請(qǐng)求打印表,根據(jù)表中的要求打印數(shù)據(jù),從輸出井傳送到內(nèi)存緩沖區(qū),再由打印機(jī)進(jìn)行打印。打印完后,輸出進(jìn)程再查看請(qǐng)求打印隊(duì)列中是否還有等待打印的請(qǐng)求表,若有,又取出隊(duì)列中的第一張表,繼續(xù)打印,直至請(qǐng)求打印隊(duì)列為空,輸出進(jìn)程才將自己阻塞起來(lái),僅當(dāng)下次再有打印請(qǐng)求時(shí),輸出進(jìn)程才被喚醒。

SPOOLing系統(tǒng)主要有如下的特點(diǎn)

提高了I/O速度,對(duì)數(shù)據(jù)所進(jìn)行的I/O操作,已從對(duì)低速的I/O設(shè)備進(jìn)行I/O操作,演變?yōu)閷?duì)輸入井或輸出井中數(shù)據(jù)的存取,如同脫機(jī)輸入輸出一樣,提高了I/O速度,緩和了CPU與低速I/O設(shè)備之間速度不匹配。

將獨(dú)占設(shè)備改造為共享設(shè)備,因?yàn)樵赟POOLing系統(tǒng)中,實(shí)際上并沒(méi)有任何進(jìn)程分配設(shè)備,而只是在輸入井或輸出井中為進(jìn)程分配一個(gè)存儲(chǔ)區(qū)和建立一張I/O請(qǐng)求表,這樣,便把獨(dú)占設(shè)備改造為共享設(shè)備。

實(shí)現(xiàn)了虛擬設(shè)備功能,宏觀上,雖然是多個(gè)進(jìn)程在同時(shí)使用一臺(tái)獨(dú)占設(shè)備,而對(duì)于每個(gè)進(jìn)程而言,他們都會(huì)認(rèn)為自己是獨(dú)占了一個(gè)設(shè)備,當(dāng)然,只是邏輯上的設(shè)備,SPOOLing系統(tǒng)實(shí)現(xiàn)了將獨(dú)占設(shè)備變換為若干個(gè)對(duì)應(yīng)的邏輯設(shè)備的功能。

七、磁盤存儲(chǔ)器的管理

磁盤設(shè)備包括一個(gè)或多個(gè)物理盤片,每個(gè)盤片分一個(gè)或兩個(gè)存儲(chǔ)面,每個(gè)磁盤面被組織成若干個(gè)同心環(huán),這種環(huán)稱為磁道,各磁道之間留有必要的縫隙。每條磁道上可存儲(chǔ)相同數(shù)目的二進(jìn)制位,這樣,磁盤密度即每英寸中所存儲(chǔ)的位數(shù),顯然是內(nèi)層磁道密度較外層磁道的密度高,每條磁道又被邏輯上劃分成若干個(gè)扇區(qū),一個(gè)扇區(qū)稱為一個(gè)盤塊(數(shù)據(jù)塊)或稱為磁盤扇區(qū)。一個(gè)物理記錄存儲(chǔ)在一個(gè)扇區(qū)上,磁盤上存儲(chǔ)的物理記錄塊數(shù)目是由扇區(qū)數(shù)、磁道數(shù)以及盤面數(shù)決定的。

7.1 磁盤調(diào)度

磁盤是多個(gè)進(jìn)程共享的設(shè)備,當(dāng)有多個(gè)進(jìn)程都要求訪問(wèn)磁盤時(shí),應(yīng)采用一種最佳的調(diào)度算法,使各進(jìn)程對(duì)磁盤的平均訪問(wèn)時(shí)間最小。由于在訪問(wèn)磁盤中,主要是尋道時(shí)間,因此,磁盤調(diào)度的目標(biāo)是使磁盤的平均尋道時(shí)間最少。目前常用的磁盤調(diào)度算法有先來(lái)先服務(wù)、最短尋道時(shí)間優(yōu)先及掃描等算法。

先來(lái)先服務(wù)(FCFS, First Come First Service),這是一種最簡(jiǎn)單的磁盤調(diào)度算法,其根據(jù)進(jìn)程請(qǐng)求訪問(wèn)磁盤的先后順序進(jìn)行調(diào)度,優(yōu)點(diǎn)是公平、簡(jiǎn)單,每個(gè)進(jìn)程的請(qǐng)求都能得到依次處理,不會(huì)出現(xiàn)某個(gè)進(jìn)程的請(qǐng)求長(zhǎng)期得不到滿足的情況。

最短尋道時(shí)間優(yōu)先(SSTF,Shortest Seek Time First),要求訪問(wèn)的磁道與當(dāng)前磁頭所在的磁道距離最近,以使每次的尋道時(shí)間最短。但這種算法不能保證平均尋道時(shí)間最短。

掃描(SCAN)算法,SSTF算法雖然能獲得較好的尋道性能,但可能會(huì)導(dǎo)致某個(gè)進(jìn)程發(fā)生饑餓現(xiàn)象,因?yàn)橹灰行逻M(jìn)程的請(qǐng)求到達(dá),且其所要訪問(wèn)的磁道與磁頭當(dāng)前所在磁道的距離較近,這種新進(jìn)程的I/O請(qǐng)求必然先滿足,對(duì)SSTF算法修改后形成SCAN算法,可防止老進(jìn)程出現(xiàn)饑餓現(xiàn)象。該算法不僅考慮到欲訪問(wèn)的磁盤與當(dāng)前磁道之間的距離,更優(yōu)先考慮的是磁頭當(dāng)前的移動(dòng)方向。例如,當(dāng)磁頭正在自里向外移動(dòng)時(shí),SCAN算法所考慮的下一個(gè)訪問(wèn)對(duì)象,應(yīng)是其欲訪問(wèn)的磁道既在當(dāng)前磁道之外,又是距離最近的。其類似電梯的運(yùn)行,也稱為電梯調(diào)度算法。

循環(huán)掃描(CSCAN)算法,SCAN算法既能夠獲得較好的尋道性能,又能防止饑餓現(xiàn)象,但是,當(dāng)磁頭剛從里向外移動(dòng)而越過(guò)了某個(gè)磁道時(shí),恰好又有一進(jìn)程請(qǐng)求訪問(wèn)此磁道,這時(shí),該進(jìn)程必須等待,待磁頭繼續(xù)從里向外,然后再?gòu)耐庀蚶飹呙柰晁幸L問(wèn)的磁道后,才處理該進(jìn)程的請(qǐng)求,致使該進(jìn)程的請(qǐng)求被大大地推遲。為了減少這種延遲,CSCAN算法規(guī)定磁頭單向移動(dòng),例如,致使自里向外移動(dòng),當(dāng)磁頭移到最外的磁道訪問(wèn)后,磁頭立即返回最里的欲訪問(wèn)的磁道,即將最小的磁道號(hào)緊接著最大的磁道號(hào)構(gòu)成循環(huán),進(jìn)行循環(huán)掃描

NStepSCAN算法,在SSTF、SCAN、CSCAN幾種調(diào)度算法中,都可能會(huì)出現(xiàn)磁臂停留在某處不動(dòng)的情況,例如,有一個(gè)或幾個(gè)進(jìn)程對(duì)某個(gè)磁道具有較高的訪問(wèn)頻率,即這些進(jìn)程反復(fù)請(qǐng)求對(duì)某一磁道的I/O操作,從而壟斷了整個(gè)磁盤設(shè)備,這一現(xiàn)象稱為磁臂粘著。NStepSCAN算法將磁盤請(qǐng)求隊(duì)列分成若干個(gè)長(zhǎng)度為N的子隊(duì)列,磁盤調(diào)度將按FCFS算法一次處理這些子隊(duì)列,當(dāng)正在處理某子隊(duì)列時(shí),如果又出現(xiàn)了新的磁盤請(qǐng)求,便將新的請(qǐng)求進(jìn)程放入其他隊(duì)列,這樣就避免了出現(xiàn)粘著現(xiàn)象。當(dāng)N很大時(shí),會(huì)使N步掃描算法性能接近于SCAN算法,當(dāng)N=1時(shí),退化為FCFS算法。

FSCAN算法,其是NStepSCAN的簡(jiǎn)化,即FSCAN只將磁盤請(qǐng)求隊(duì)列分成兩個(gè)子隊(duì)列,一個(gè)是由當(dāng)前所有請(qǐng)求磁盤I/O的進(jìn)程所形成的隊(duì)列,由磁盤調(diào)度按SCAN算法進(jìn)行處理,在掃描期間,將新出現(xiàn)的請(qǐng)求磁盤I/O的進(jìn)程放入另一個(gè)等待處理的請(qǐng)求隊(duì)列。這樣,所有的新請(qǐng)求都被推遲到下一次掃描時(shí)處理。

7.2 磁盤高速緩存

利用內(nèi)存中的存儲(chǔ)空間來(lái)暫存從磁盤上讀出的一系列盤塊中的信息,這里的高速緩存是一組在邏輯上屬于磁盤,物理上是駐留在內(nèi)存中的盤塊,高速緩存在內(nèi)存中可以分成兩種形式,第一種是在內(nèi)存中開(kāi)辟一個(gè)單獨(dú)的存儲(chǔ)空間來(lái)作為磁盤高速緩存,其大小是固定的,不會(huì)受到應(yīng)用程序的影響。第二種是把所有未利用的內(nèi)存空間變?yōu)橐粋€(gè)緩沖池,供請(qǐng)求分頁(yè)系統(tǒng)和磁盤I/O時(shí)(作為磁盤高速緩存)共享。此時(shí)的高速緩存大小不再固定。

八、總結(jié)

本篇學(xué)習(xí)了設(shè)備管理的主要內(nèi)容,明白了主機(jī)如何與設(shè)備打交道的細(xì)節(jié)。也謝謝各位園友的觀看~

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【操作系統(tǒng)】輸入輸出系統(tǒng)
操作系統(tǒng)第6章
I/O 基礎(chǔ)之緩沖區(qū)
騰訊游戲工程師:LinuxI/O底層原理全面揭秘
計(jì)算機(jī)最魔幻的事情就是它能感知到你的思想
cache 和 buffer的區(qū)別
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服