第5章設(shè)備管理 操作系統(tǒng)_第1頁
第5章設(shè)備管理 操作系統(tǒng)_第2頁
第5章設(shè)備管理 操作系統(tǒng)_第3頁
第5章設(shè)備管理 操作系統(tǒng)_第4頁
第5章設(shè)備管理 操作系統(tǒng)_第5頁
已閱讀5頁,還剩144頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第五章微備管理

5.1I/O系統(tǒng)

5.2I/O控制方式

5.3緩沖管理

5.4I/O軟件

5.5設(shè)備分配

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

5.1I/O系統(tǒng)

5.1.1I/O設(shè)備

LI/O設(shè)備的類型

重要的性能指標(biāo)有:設(shè)備使用特性、數(shù)據(jù)傳輸速率、數(shù)據(jù)

的傳輸單位、設(shè)備共享屬性等。

1)按設(shè)備的使用特性分類

第一類是存儲(chǔ)設(shè)備,也稱外存或后備存儲(chǔ)器、輔助存儲(chǔ)

器,是計(jì)算機(jī)系統(tǒng)用以存儲(chǔ)信息的主要設(shè)備。

第二類就是輸入/輸出設(shè)備,又具體可分為輸入設(shè)備、輸

出設(shè)備和交互式設(shè)備。

2)按傳輸速率分類

第一類是低速設(shè)備,這是指其傳輸速率僅為每秒鐘幾個(gè)

字節(jié)至數(shù)百個(gè)字節(jié)的一類設(shè)備。

第二類是中速設(shè)備,這是指其傳輸速率在每秒鐘數(shù)千個(gè)

字節(jié)至數(shù)十萬個(gè)字節(jié)的一類設(shè)備。

第三類是高速設(shè)備,這是指其傳輸速率在數(shù)百個(gè)千字節(jié)

至千兆字節(jié)的一類設(shè)備。

3)按信息交換的單位分類

第一類是塊設(shè)備(BlockDevice),這類設(shè)備用于存儲(chǔ)信息。

基本特征是其傳輸速率較高,通常每秒鐘為幾兆位;另一特征

是可尋址,即對(duì)它可隨機(jī)地讀/寫任一塊;止匕外,I/O常采用

DMA方式。

第二類是字符設(shè)備(CharacterDevice),用于數(shù)據(jù)的輸入和

輸出。基本特征是其傳輸速率較低,通常為幾個(gè)字節(jié)至數(shù)千字

節(jié);另一特征是不可尋址,即輸入/輸出時(shí)不能指定數(shù)據(jù)的輸

入源地址及輸出的目標(biāo)地址;止匕外,輸入/輸出常采用中斷驅(qū)

動(dòng)方式。

少按設(shè)備的共享屬性分類

(1)獨(dú)占設(shè)備。這是指在一段時(shí)間內(nèi)只允許一個(gè)用戶(進(jìn)

程)訪問的設(shè)備,即臨界資源。應(yīng)當(dāng)注意,獨(dú)占設(shè)備的分配有

可能引起進(jìn)程死鎖。

(2)共享設(shè)備。這是指在一段時(shí)間內(nèi)允許多個(gè)進(jìn)程同時(shí)

訪問的設(shè)備。當(dāng)然,對(duì)于每一時(shí)刻而言,該類設(shè)備仍然只允

許一個(gè)進(jìn)程訪問。顯然,共享設(shè)備必須是可尋址的和可隨機(jī)

訪問的設(shè)備。

(3)虛擬設(shè)備。這是指通過虛擬技術(shù)將一臺(tái)獨(dú)占設(shè)備變

換為若干臺(tái)邏輯設(shè)備,供若干個(gè)用戶(進(jìn)程)同時(shí)使用。

2.設(shè)備與控制器之間的接口

接口中有三種類型的信號(hào)(見圖5-1所示),各對(duì)應(yīng)一條

信號(hào)線。

1/m備

圖5-1設(shè)備與控制器間的接口

1)數(shù)據(jù)信號(hào)線

這類信號(hào)線用于在設(shè)備和設(shè)備控制器之間傳送數(shù)據(jù)信

號(hào)。數(shù)據(jù)的并行與串行轉(zhuǎn)換。

2)控制信號(hào)線

這是作為由設(shè)備控制器向I/O設(shè)備發(fā)送控制信號(hào)時(shí)的通路。

該信號(hào)規(guī)定了設(shè)備將要執(zhí)行的操作。

3)狀態(tài)信號(hào)線

這類信號(hào)線用于傳送指示設(shè)備當(dāng)前狀態(tài)的信號(hào)。

5.1.2設(shè)備控制器

1.攻備于金制器的基本功能

1)接收和識(shí)別命令

CPU可以向控制器發(fā)送多種不同的命令,設(shè)備控制器應(yīng)

能接收并識(shí)別這些命令。為此,在控制器中應(yīng)具有相應(yīng)的控

制寄存器,用來存放接收的命令和參數(shù),并對(duì)所接收的命令

進(jìn)行譯碼。例如,磁盤控制器可以接收CPU發(fā)來的Read、

Write>Format等15條不同的命令,而且有些命令還帶有參數(shù);

相應(yīng)地,在磁盤控制器中有多個(gè)寄存器和命令譯碼器等。

2)數(shù)據(jù)交換

這是指實(shí)現(xiàn)CPU與控制器之間、控制器與設(shè)備之間的數(shù)據(jù)

交換。對(duì)于前者,是通過數(shù)據(jù)總線,由CPU并行地把數(shù)據(jù)寫入

控制器,或從控制器中并行地讀出數(shù)據(jù);對(duì)于后者,是設(shè)備

將數(shù)據(jù)輸入到控制器,或從控制器傳送給設(shè)備。為此,在控

制器中須設(shè)置數(shù)據(jù)寄存器。

3)標(biāo)識(shí)和報(bào)告設(shè)備的狀態(tài)

控制器應(yīng)記下設(shè)備的狀態(tài)供CPU了解。例如,僅當(dāng)該設(shè)

備處于發(fā)送就緒狀態(tài)時(shí),CPU才能啟動(dòng)控制器從設(shè)備中讀出

數(shù)據(jù)。為此,在控制器中應(yīng)設(shè)置一狀態(tài)寄存器,用其中的每

一位來反映設(shè)備的某一種狀態(tài)。當(dāng)CPU將該寄存器的內(nèi)容讀

入后,便可了解該設(shè)備的狀態(tài)。

4)地址識(shí)別

一就像內(nèi)存中的每一個(gè)單元都有一個(gè)地址一樣,系統(tǒng)中的

每一個(gè)設(shè)備也都有一個(gè)地址,而設(shè)備控制器又必須能夠識(shí)別

它所控制的每個(gè)設(shè)備的地址。此外,為使CPU能向(或從)寄存

器中寫入(或讀出)數(shù)據(jù),這些寄存器都應(yīng)具有唯一的地址。例

如,在IB-MPC機(jī)中規(guī)定,硬盤控制器中各寄存器的地址分別

為320?32F之一??刂破鲬?yīng)能正確識(shí)別這些地址,為此,在

控制器中應(yīng)配置地址譯碼器。

5)數(shù)據(jù)緩沖

由于I/O設(shè)備的速率較低而CPU和內(nèi)存的速率卻很高,故

在控制器中必須設(shè)置一緩沖器。在輸出時(shí),用此緩沖器暫存

由主機(jī)高速傳來的數(shù)據(jù),然后才以I/O設(shè)備所具有的速率將緩

沖器中的數(shù)據(jù)傳送給I/O設(shè)備;在輸入時(shí),緩沖器則用于暫存

從I/O設(shè)備送來的數(shù)據(jù),待接收到一批數(shù)據(jù)后,再將緩沖器中

的數(shù)據(jù)高速地傳送給主機(jī)。

6)差錯(cuò)控制

設(shè)備控制器還兼管對(duì)由I/O設(shè)備傳送來的數(shù)據(jù)進(jìn)行差錯(cuò)檢

測。若發(fā)現(xiàn)傳送中出現(xiàn)了錯(cuò)誤,通常是將差錯(cuò)檢測碼置位,

并向CPU報(bào)告,于是CPU將本次傳送來的數(shù)據(jù)作廢,并重新

進(jìn)行一次傳送。這樣便可保證數(shù)據(jù)輸入的正確性。

2.設(shè)備控制器的組成

1)設(shè)備控制器與處理機(jī)的接口

該接口用于實(shí)現(xiàn)CPU與設(shè)備控制器之間的通信。共有三

類信號(hào)線:數(shù)據(jù)線、地址線和控制線。數(shù)據(jù)線通常與兩類寄存

器相連接,第一類是數(shù)據(jù)寄存器(在控制器中可以有一個(gè)或多

個(gè)數(shù)據(jù)寄存器,用于存放從設(shè)備送來的數(shù)據(jù)(輸入)或從CPU送

來的數(shù)據(jù)(輸出));第二類是控制/狀態(tài)寄存器(在控制器中可以

有一個(gè)或多個(gè)這類寄存器,用于存放從CPU送來的控制信息

或設(shè)備的狀態(tài)信息)。

2)設(shè)備控制器與設(shè)備的接口

在一個(gè)設(shè)備控制器上,可以連接一個(gè)或多個(gè)設(shè)備。相應(yīng)

地,在控制器中便有一個(gè)或多個(gè)設(shè)備接口,一個(gè)接口連接一

臺(tái)設(shè)備。在每個(gè)接口中都存在數(shù)據(jù)、控制和狀態(tài)三種類型的

信號(hào)??刂破髦械腎/O邏輯根據(jù)處理機(jī)發(fā)來的地址信號(hào)去選擇

一個(gè)設(shè)備接口。

3)I/O邏輯

在設(shè)備控制器中的I/O邏輯用于實(shí)現(xiàn)對(duì)設(shè)備的控制。它通

過一組控制線與處理機(jī)交互,處理機(jī)利用該邏輯向控制器發(fā)

送I/O命令;I/O邏輯對(duì)收到的命令進(jìn)行譯碼。每當(dāng)CPU要啟動(dòng)

一個(gè)設(shè)備時(shí),一方面將啟動(dòng)命令發(fā)送給控制器;另一方面又

同時(shí)通過地址線把地址發(fā)送給控制器,由控制器的I/O邏輯對(duì)

收到的地址進(jìn)行譯碼,再根據(jù)所譯出的命令對(duì)所選設(shè)備進(jìn)行

控制。設(shè)備控制器的組成示于圖5-2中。

CPLfe控制器接口控制器與設(shè)備接口

圖5-2設(shè)備控制器的組成

5.1.3I/O通道

1.I/O通道(I/OChannel)設(shè)備的引入

主要目的是為了建立獨(dú)立的I/O操作,不僅使數(shù)據(jù)的傳送

能獨(dú)立于CPU,而且也希望有關(guān)對(duì)I/O操作的組織、管理及其

結(jié)束處理盡量獨(dú)立,以保證CPU有更多的時(shí)間去進(jìn)行數(shù)據(jù)處

理;或者說,其目的是使一些原來由CPU處理的I/O任務(wù)轉(zhuǎn)由

通道來承擔(dān),從而把CPU從繁雜的I/O任務(wù)中解脫出來。

I/O通道是一種特殊的處理機(jī),主要特點(diǎn):

一是其指令類型單一;二是通道與CPU共享內(nèi)存。

2.通道類型

1)字節(jié)多路通道(ByteMultiplexorChannel)

這是一種按字節(jié)交叉方式工作的通道。只要字節(jié)多路通

道掃描每個(gè)子通道的速率足夠快,而連接到子通道上的設(shè)備

的速率不是太高時(shí),便不致丟失信息。

圖5-3字節(jié)多路通道的工作原理

2)數(shù)組選擇通道(BlockSelectorChannel)

可以連接多臺(tái)高速設(shè)備,但只含有一個(gè)分配型子通道,

在一段時(shí)間內(nèi)只能執(zhí)行一道通道程序,控制一臺(tái)設(shè)備進(jìn)行數(shù)

據(jù)傳送,致使當(dāng)某臺(tái)設(shè)備占用了該通道后,便一直由它獨(dú)占,

即使是它無數(shù)據(jù)傳送,通道被閑置,也不允許其它設(shè)備使用

該通道,直至該設(shè)備傳送完畢釋放該通道。

3)數(shù)組多路通道(BlockMultiplexorChannel)

數(shù)組選擇通道雖有很高的傳輸速率,但它卻每次只允許

一個(gè)設(shè)備傳輸數(shù)據(jù)。數(shù)組多路通道是將數(shù)組選擇通道傳輸速

率高和字節(jié)多路通道能使各子通道(設(shè)備)分時(shí)并行操作的優(yōu)

點(diǎn)相結(jié)合而形成的一種新通道。它含有多個(gè)非分配型子通道,

因而這種通道既具有很高的數(shù)據(jù)傳輸速率,又能獲得令人滿

意的通道利用率。也正因此,才使該通道能被廣泛地用于連

接多臺(tái)高、中速的外圍設(shè)備,其數(shù)據(jù)傳送是按數(shù)組方式進(jìn)行

的。

3.“瓶頸”問題

由于通道價(jià)格昂貴,致使機(jī)器中所設(shè)置的通道數(shù)量勢

必較少,這往往又使它成了I/O的瓶頸,進(jìn)而造成整個(gè)系統(tǒng)

吞吐量的下降。例如,在圖5-4中,假設(shè)設(shè)備1至設(shè)備4是四

個(gè)磁盤,為了啟動(dòng)磁盤4,必須用通道1和控制器2;但若這

兩者已被其它設(shè)備占用,必然無法啟動(dòng)磁盤4。類似地,若

要啟動(dòng)盤1和盤2,由于它們都要用到通道1,因而也不可能

啟動(dòng)。這些就是由于通道不足所造成的“瓶頸”現(xiàn)象。

圖5-4單通路I/O系統(tǒng)

解決“瓶頸”問題的最有效的方法,便是增加設(shè)備到主

機(jī)間的通路而不增加通道。

圖5-5多通路I/O系統(tǒng)

5.1.4總線系統(tǒng)

時(shí)鐘頻率、帶寬和傳輸速率。

磁盤驅(qū)動(dòng)器

系統(tǒng)總線

圖5-6總線型I/O系統(tǒng)結(jié)構(gòu)

1.ISA和EISA總線

1)(Inducts乎StandardArchitecture)總線

這是為在1984年推出的80286型微機(jī)而設(shè)計(jì)的總線結(jié)構(gòu)。

其總線的帶寬為8位,最高傳輸速率為2Mb/so之后不久又推

出了16位的(EISA)總線,其最高傳輸速率為8Mb/s,后又升

至16Mb/s,能連接12臺(tái)設(shè)備。

2)EISA(ExtendedISA)總線

到20世紀(jì)80年代末期,ISA總線已難于滿足帶寬和傳輸速

率的要求,于是人們又開發(fā)出擴(kuò)展ISA(EISA)總線,其帶寬為

32位,總線的傳輸速率高達(dá)32Mb/s,同樣可以連接12臺(tái)外部

設(shè)備。

2.局部總線(LocalBus)

—所謂局部總線,是指將多媒體卡、高速LAN網(wǎng)卡、高性

能圖形板等,從ISA總線上卸下來,再通過局部總線控制器直

接接到CPU總線上,使之與高速CPU總線相匹配,而打印機(jī)、

FAX/Modem、CDROM等仍掛在ISA總線上。在局部總線中較

有影響的是VESA總線和PCI總線。

1)VESA(VideoElectronicStandardAssociation)

總線

帶寬為32位,最高傳輸速率為132Mb/s,設(shè)備數(shù)僅為2?

4臺(tái),在控制器中無緩沖,不支持Pentium微機(jī)。

2)PCI(PeripheralComponentInterface)總線

支持64位系統(tǒng),配有緩沖,最多支持10種外設(shè),最大傳輸

速率可達(dá)132Mb/s。PCI既可連接ISA、EISA等傳統(tǒng)型總線,

又可支持Pentium的64位系統(tǒng)。

5.2I/O控制方式

5.2.1程序I/O方式

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

5.2.3直接存儲(chǔ)器訪問(DMA)I/O控制方式

下一條指令下一條指令下一條指令

(a)程序1/6式(b)中斷驅(qū)動(dòng)方式?DM泌式

圖5-7程序I/O和中斷驅(qū)動(dòng)方式的流程

5.2.3直接存儲(chǔ)器訪問(DMA)I/O控制方式

(Dirnct^MemoryAccess)控制方式的弓|入

采用中斷驅(qū)動(dòng)I/O方式時(shí)的CPU是以字(節(jié))為單位進(jìn)行干

預(yù)的。

DMA的特點(diǎn)是:

(1)數(shù)據(jù)傳輸?shù)幕締挝皇菙?shù)據(jù)塊,即在CPU與I/O設(shè)備

之間,每次傳送至少一個(gè)數(shù)據(jù)塊;

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

(3)僅在傳送一個(gè)或多個(gè)數(shù)據(jù)塊的開始和結(jié)束時(shí),才需

CPU干預(yù),整塊數(shù)據(jù)的傳送是在控制器的控制下完成的。

2.DMA控制器的組成

DMA控制器由三部分組成:主機(jī)與DMA控制器的接口;

DMA控制器與塊設(shè)備的接口;I/O控制邏輯。圖5-8示出了

DMA控制器的組成。這里主要介紹主機(jī)與控制器之間的接口。

DMA控制器中四類寄存器:

(1)命令/狀態(tài)寄存器(CR)。

(2)內(nèi)存地址寄存器(MAR)。

(3)數(shù)據(jù)寄存器(DR)。

(4)數(shù)據(jù)計(jì)數(shù)器(DC)。皿4r

CPU內(nèi)存主機(jī)一控制器接口控制器與塊設(shè)備接口

I/控O

制□

邏*

輯O

命令

--------?系統(tǒng)總線DM閡制器

圖5-8DMA控制器的組成

圖5-9DMA方式的工作流程圖

5.2.4I/O通道控制方式

LI/O通道控制方式的引入

把對(duì)一個(gè)數(shù)據(jù)塊的讀(或?qū)懀閱挝坏母深A(yù)減少為對(duì)一組數(shù)

據(jù)塊為單位的讀(或?qū)懀┘坝嘘P(guān)的控制和管理的干預(yù)。

實(shí)現(xiàn)CPU、通道和I/O設(shè)備三者的并行操作,從而更有效

地提高整個(gè)系統(tǒng)的資源利用率。

2.通道程序

----通遒是通11通行通遒油用,并與設(shè)備控制器共同實(shí)現(xiàn)對(duì)

I/O設(shè)備的控制的。通道程序是由一系列通道指令(或稱為通

道命令)所構(gòu)成的。通道指令與一般的機(jī)器指令不同,在它的

每條指令中都包含下列諸信息:

(1)操作碼。操作碼規(guī)定了指令所執(zhí)行的操作,如讀、

寫、控制等操作。

(2)內(nèi)存地址。內(nèi)存地址標(biāo)明字符送入內(nèi)存(讀操作)和

從內(nèi)存取出(寫操作)時(shí)的內(nèi)存首址。

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

數(shù)。

(4)通道程序結(jié)束位P。該位用于表示通道程序是否結(jié)束。

r一1衣小平氽才曰專是膽道程序的最后一條指令。

(5)記錄結(jié)束標(biāo)志R。R=0表示本通道指令與下一條指令

所處理的數(shù)據(jù)是同屬于一個(gè)記錄;R=1表示這是處理某記錄

的最后一條指令。

下面示出了一個(gè)由六條通道指令所構(gòu)成的簡單的通道程

序。該程序的功能是將內(nèi)存中不同地址的數(shù)據(jù)寫成多個(gè)記錄。

其中,前三條指令是分別將813?892單元中的80個(gè)字符和

1034?H73單元中的140個(gè)字符及5830?5889單元中的60個(gè)字

符寫成一個(gè)記錄;第4條指令是單獨(dú)寫一個(gè)具有300個(gè)字符的

記錄;第5、6條指令共寫含500個(gè)字符的記錄。

操作PR計(jì)數(shù)內(nèi)存地址

WRITE0080813

WRITE001401034

WRITE01605830

WRITE013002000

WRITE002501650

WRITE112502720

5.3緩沖管理

5.3.1緩沖的引入

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

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

限制。

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

9.6Kb/s

3A1位緩沖

8位緩沖寄存器

9.6Kb/s

(b)送內(nèi)存

送內(nèi)存

圖5-10利用緩沖寄存器實(shí)現(xiàn)緩沖

5.3.2單緩沖和雙緩沖

1?單緩沖(sfii趕eBuffer)

在單緩沖情況下,每當(dāng)用戶進(jìn)程發(fā)出一I/O請(qǐng)求時(shí),操

作系統(tǒng)便在主存中為之分配一緩沖區(qū),如圖5-11所示。在

塊設(shè)備輸入時(shí),假定從磁盤把一塊數(shù)據(jù)輸入到緩沖區(qū)的時(shí)間

為T,操作系統(tǒng)將該緩沖區(qū)中的數(shù)據(jù)傳送到用戶區(qū)的時(shí)間為M,

而CPU對(duì)這一塊數(shù)據(jù)處理(計(jì)算)的時(shí)間為a由于麻口c是可以

并行的(見圖5T1),當(dāng)7>麗,系統(tǒng)對(duì)每一塊數(shù)據(jù)的處理時(shí)

間為濟(jì)北反之則為伊C,故可把系統(tǒng)對(duì)每一塊數(shù)據(jù)的處理時(shí)

間表示為Max(C,T)+Mo

用戶進(jìn)程

I/CS備

圖5-H單緩沖工作示意圖

2.雙緩沖(DoubleBuffer)

—為了加快岫入相岫出情度,提高設(shè)備利用k人們又引

入了雙緩沖區(qū)機(jī)制,也稱為緩沖對(duì)換(BufferSwapping)o在

設(shè)備輸入時(shí),先將數(shù)據(jù)送入第一緩沖區(qū),裝滿后便轉(zhuǎn)向第二

緩沖區(qū)。此時(shí)操作系統(tǒng)可以從第一緩沖區(qū)中移出數(shù)據(jù),并送

入用戶進(jìn)程(見圖5-12)。接著由CPU對(duì)數(shù)據(jù)進(jìn)行計(jì)算。在雙

緩沖時(shí),系統(tǒng)處理一塊數(shù)據(jù)的時(shí)間可以粗略地認(rèn)為是Max(C,

T)o如果C〈T,可使塊設(shè)備連續(xù)輸入;如果C>T,則可使CPU

不必等待設(shè)備輸入。對(duì)于字符設(shè)備,若采用行輸入方式,則

采用雙緩沖通常能消除用戶的等待時(shí)間,即用戶在輸入完第

一行之后,在CPU執(zhí)行第一行中的命令時(shí),用戶可繼續(xù)向第

二緩沖區(qū)輸入下一行數(shù)據(jù)。

用戶進(jìn)程

I/O設(shè)備

((緩沖1)與(緩沖2)4(緩沖3)n(緩沖4)

(b)

圖5-12雙緩沖工作示意圖

MLWAMm

(a)單緩沖(b)雙緩沖

圖5-13雙機(jī)通信時(shí)緩沖區(qū)的設(shè)置

5.3.3循環(huán)緩沖

1.循環(huán)緩沖的組成

(1)多個(gè)緩沖區(qū)。在循環(huán)緩沖中包括多個(gè)緩沖區(qū),其每

個(gè)緩沖區(qū)的大小相同。作為輸入的多緩沖區(qū)可分為三種類

型:用于裝輸入數(shù)據(jù)的空緩沖區(qū)R、已裝滿數(shù)據(jù)的緩沖區(qū)G

以及計(jì)算進(jìn)程正在使用的現(xiàn)行工作緩沖區(qū)C,如圖5-14所示。

(2)多個(gè)指針。作為輸入的緩沖區(qū)可設(shè)置三個(gè)指針:用于

指示計(jì)算進(jìn)程下一個(gè)可用緩沖區(qū)G的指針Nextg、指示輸入進(jìn)

程下次可用的空緩沖區(qū)R的指針Nexti,以及用于指示計(jì)算進(jìn)

程正在使用的緩沖區(qū)C的指針Current。

[JNexti[JNexti

G62|R|G62|R

G53|_G_jC=|G53|c]c二Current

介Nextg

圖5-14循環(huán)緩沖

2.循環(huán)緩沖區(qū)的使用

計(jì)算進(jìn)程和輸入進(jìn)程可利用下述兩個(gè)過程來使用循環(huán)緩

沖區(qū)。

讀與寫

(1)Getbuf過程。G緩沖區(qū)和R緩沖區(qū)。

(2)Releasebuf過程。G緩沖區(qū)和R緩沖區(qū)。

3.進(jìn)程同步

使用輸入循環(huán)緩沖,可使輸入進(jìn)程和計(jì)算進(jìn)程并行執(zhí)行。

相應(yīng)地,指針Nexti和指針Nextg將不斷地沿著順時(shí)針方向移

動(dòng),這樣就可能出現(xiàn)下述兩種情況:

(1)Nexti指針追趕上Nextg指針。這意味著輸入進(jìn)程輸入

數(shù)據(jù)的速度大于計(jì)算進(jìn)程處理數(shù)據(jù)的速度,全部裝滿,再無

緩沖區(qū)可用。

(2)Nextg指針追趕上Nexti指針。這意味著輸入數(shù)據(jù)的速

度低于計(jì)算進(jìn)程處理數(shù)據(jù)的速度,全部抽空,再無裝有數(shù)據(jù)

的緩沖區(qū)供計(jì)算進(jìn)程提取數(shù)據(jù)。

5.3.4緩沖池

1.緩沖池的組成

對(duì)于既可用于輸入又可用于輸出的公用緩沖池,其中至

少應(yīng)含有以下三種類型的緩沖區(qū):

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

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

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

為了管理上的方便,可將相同類型的緩沖區(qū)鏈成一個(gè)隊(duì)

列,于是可形成以下三個(gè)隊(duì)列?

(1)空緩沖隊(duì)列emq。這是由空緩沖區(qū)所鏈成的隊(duì)列。

其隊(duì)首指針F(emq)和隊(duì)尾指針L(emq)分別指向該隊(duì)列的首緩

沖區(qū)和尾緩沖區(qū)。

(2)輸入隊(duì)列inq。這是由裝滿輸入數(shù)據(jù)的緩沖區(qū)所鏈成

的隊(duì)列。其隊(duì)首指針F(inq)和隊(duì)尾指針L(inq)分別指向該隊(duì)列

的首緩沖區(qū)和尾緩沖區(qū)。

(3)輸出隊(duì)列outq。這是由裝滿輸出數(shù)據(jù)的緩沖區(qū)所鏈

以網(wǎng)隊(duì)少1J。只隊(duì)目于日力^Wrtq)和隊(duì)尾指針L(outq)分別指向

該隊(duì)列的首緩沖區(qū)和尾緩沖區(qū)。

除了上述三個(gè)隊(duì)列外,還應(yīng)具有四種工作緩沖區(qū):①用

于收容輸入數(shù)據(jù)的工作緩沖區(qū);②用于提取輸入數(shù)據(jù)的工作

緩沖區(qū);③用于收容輸出數(shù)據(jù)的工作緩沖區(qū);④用于提取

輸出數(shù)據(jù)的工作緩沖區(qū)。

ProcedureGetbuf(type)

begin

?^Wait(RS(type));

2.Getbuf過程Wait(MS(type));

B(number):=Takebuf(type);

和Putbuf過程Signal(MS(type));

end

每一緩沖隊(duì)列

ProcedurePutbuf(type,number)

設(shè)置一個(gè)互斥信號(hào)begin

量MS(type)和一個(gè)Wait(MS(type));

Addbuf(type,number);

資源信號(hào)量

Signal(MS(type));

RS(type)oSignal(RS(type));

end

3.緩沖區(qū)的工作方式P177

緩沖區(qū)可以工作在收容輸入、提取輸入、收容輸出和提

取輸出四種工作方式下,如圖5-15所示。

緩沖池

收容輸入提取輸入用

提取輸出收容輸出序

圖5-15緩沖區(qū)的工作方式

5.4I/O軟件

5.4.1I/O軟件的設(shè)計(jì)目標(biāo)和原則

從系統(tǒng)的觀點(diǎn)出發(fā),采用多種技術(shù)和措施,解決由于外

部設(shè)備與CPU速度不匹配所引起的問題,提高主機(jī)和外設(shè)的

并行工作能力,提高系統(tǒng)效率,成為操作系統(tǒng)的一個(gè)重要目

標(biāo)。

具體而言,I/O軟件應(yīng)達(dá)到下面的幾個(gè)目標(biāo):

1)與具體設(shè)備無關(guān)

―對(duì)于I/O系統(tǒng)中許多種類不同的設(shè)備,作為程序員,只需

要知道如何使用這些資源來完成所需要的操作,而無需了解

設(shè)備的有關(guān)具體實(shí)現(xiàn)細(xì)節(jié)。例如,應(yīng)用程序訪問文件時(shí),不

必去考慮被訪問的是硬盤、軟盤還是CD-ROM;對(duì)于管理軟

件,也無需因?yàn)镮/O設(shè)備變化,而重新編寫涉及設(shè)備管理的程

序。

為了提高OS的可移植性和易適應(yīng)性,I/O軟件應(yīng)負(fù)責(zé)屏蔽

設(shè)備的具體細(xì)節(jié),向高層軟件提供抽象的邏輯設(shè)備,并完成

邏輯設(shè)備與具體物理設(shè)備的映射。

2)統(tǒng)一命名

—要實(shí)現(xiàn)上述的設(shè)備無關(guān)性,其中一項(xiàng)重要的工作就是如

何給I/O設(shè)備命名。不同的操作系統(tǒng)有不同的命名規(guī)則,一

般而言,是在系統(tǒng)中對(duì)各類設(shè)備采取預(yù)先設(shè)計(jì)的、統(tǒng)一的邏

輯名稱進(jìn)行命名,所有軟件都以邏輯名稱訪問設(shè)備。這種統(tǒng)

一命名與具體設(shè)備無關(guān),換言之,同一個(gè)邏輯設(shè)備的名稱,

在不同的情況下可能對(duì)應(yīng)于不同的物理設(shè)備。

3)對(duì)錯(cuò)誤的處理

一般而言,錯(cuò)誤多數(shù)是與設(shè)備緊密相關(guān)的,因此對(duì)于錯(cuò)

誤的處理,應(yīng)該盡可能在接近硬件的層面處理,在低層軟件

能夠解決的錯(cuò)誤就不讓高層軟件感知,只有低層軟件解決不

了的錯(cuò)誤才通知高層軟件解決。許多情況下,錯(cuò)誤恢復(fù)可以

在低層得到解決,而高層軟件不需要知道。

4)緩沖技術(shù)

由于CPU與設(shè)備之間的速度差異,無論是塊設(shè)備還是

字符設(shè)備,都需要使用緩沖技術(shù)。對(duì)于不同類型的設(shè)備,

其緩沖區(qū)(塊)的大小是不一樣的,塊設(shè)備的緩沖是以數(shù)據(jù)

塊為單位的,而字符設(shè)備的緩沖則以字節(jié)為單位。就是同

類型的設(shè)備,其緩沖區(qū)(塊)的大小也是存在差異的,如不

同的磁盤,其扇區(qū)的大小有可能不同。因此,I/O軟件應(yīng)能

屏蔽這種差異,向高層軟件提供統(tǒng)一大小的數(shù)據(jù)塊或字符

單元,使得高層軟件能夠只與邏輯塊大小一致的抽象設(shè)備

進(jìn)行交互。

5)設(shè)備的分配和釋放

對(duì)于系統(tǒng)中的共享設(shè)備,如磁盤等,可以同時(shí)為多個(gè)

用戶服務(wù)。對(duì)于這樣的設(shè)備,應(yīng)該允許多個(gè)進(jìn)程同時(shí)對(duì)其

提出I/O請(qǐng)求。但對(duì)于獨(dú)占設(shè)備,如鍵盤和打印機(jī)等,在某

一段時(shí)間只能供一個(gè)用戶使用,對(duì)其分配和釋放的不當(dāng),

將引起混亂,甚至死鎖。對(duì)于獨(dú)占設(shè)備和共享設(shè)備帶來的

許多問題,I/O軟件必須能夠同時(shí)進(jìn)行妥善的解決。

6)I/O控制方式

~針對(duì)具有不同傳輸速率的設(shè)備,綜合系統(tǒng)效率和系統(tǒng)代價(jià)

等因素,合理選擇I/O控制方式,如像打印機(jī)等低速設(shè)備應(yīng)采

用中斷驅(qū)動(dòng)方式,而對(duì)磁盤等高速設(shè)備則采用DMA控制方式

等,以提高系統(tǒng)的利用率。為方便用戶,I/O軟件也應(yīng)屏蔽這

種差異,向高層軟件提供統(tǒng)一的操作接口。

目前在I/O軟件中已普遍采用了層次式結(jié)構(gòu),將系統(tǒng)中

的反帝操作他,管理軟計(jì)萬為若干個(gè)層次,每一層都利用其下

層提供的服務(wù),完成輸入、輸出功能中的某些子功能,并屏

蔽這些功能實(shí)現(xiàn)的細(xì)節(jié),向高層提供服務(wù)。

在層次式結(jié)構(gòu)的I/O軟件中,只要層次間的接口不變,

對(duì)每個(gè)層次中的軟件進(jìn)行的修改都不會(huì)引起其下層或高層代

碼的變更,僅最低層才會(huì)涉及到硬件的具體特性。通常把

I/O軟件組織成四個(gè)層次:

(1)用戶層軟件:實(shí)現(xiàn)與用戶交互的接口,用戶可直接

調(diào)用在用戶層提供的、與I/O操作有關(guān)的庫函數(shù),對(duì)設(shè)備進(jìn)行

操作。

(2)設(shè)備獨(dú)立性軟件:負(fù)責(zé)實(shí)現(xiàn)與設(shè)備驅(qū)動(dòng)器的統(tǒng)一接

口、設(shè)備命名、設(shè)備的保護(hù)以及設(shè)備的分配與釋放等,同時(shí)

為設(shè)備管理和數(shù)據(jù)傳送提供必要的存儲(chǔ)空間。

(3)設(shè)備驅(qū)動(dòng)程序:與硬件直接相關(guān),負(fù)責(zé)具體實(shí)現(xiàn)系

統(tǒng)對(duì)設(shè)備發(fā)出的操作指令,驅(qū)動(dòng)I/O設(shè)備工作的驅(qū)動(dòng)程序。

(4)中斷處理程序:用于保存被中斷進(jìn)程的CPU環(huán)境,轉(zhuǎn)

入相應(yīng)的中斷處理程序進(jìn)行處理,處理完后再恢復(fù)被中斷進(jìn)

程的現(xiàn)場后返回到被中斷進(jìn)程。

I/O應(yīng)答

用戶層軟件1產(chǎn)生I/O請(qǐng)求、格式化I/O、Spooling

1設(shè)備獨(dú)立性軟件映射、保護(hù)、分塊、緩沖、分配

1設(shè)備驅(qū)動(dòng)程序1設(shè)置設(shè)備寄存器,檢查寄存器狀態(tài)

1中斷處理程序

硬件

1執(zhí)行I/O操作

圖5-16I/O系統(tǒng)的層次及功能

5.4.2中斷處理程序P179*5個(gè)步驟

1.喚醒被阻塞的驅(qū)動(dòng)(程序)進(jìn)程

當(dāng)中斷處理程序開始執(zhí)行時(shí),首先去喚醒處于阻塞狀態(tài)

的驅(qū)動(dòng)(程序)進(jìn)程。如果是采用了信號(hào)量機(jī)制,則可通過執(zhí)

行signal操作,將處于阻塞狀態(tài)的驅(qū)動(dòng)(程序)進(jìn)程喚醒;在采

用信號(hào)機(jī)制時(shí),將發(fā)送一信號(hào)給阻塞進(jìn)程。

2.保護(hù)被中斷進(jìn)程的CPU環(huán)境

—通常由硬件自動(dòng)將處理機(jī)狀態(tài)字PSW和程序計(jì)數(shù)器(PC)

中的內(nèi)容,保存在中斷保留區(qū)(棧)中,然后把被中斷進(jìn)程的

CPU現(xiàn)場信息(即包括所有的CPU寄存器,如通用寄存器、段

寄存器等內(nèi)容)都?jí)喝胫袛鄺V?,因?yàn)樵谥袛嗵幚頃r(shí)可能會(huì)用

到這些寄存器。圖5-17給出了一個(gè)簡單的保護(hù)中斷現(xiàn)場的示

意圖。該程序是指令在N位置時(shí)被中斷的,程序計(jì)數(shù)器中的

內(nèi)容為N+1,所有寄存器的內(nèi)容都被保留在棧中。

PSW4

理京涂太史

T+M

T

Y—?PC(N+1)R

寄花器

程序計(jì)數(shù)器

開始PSW

PC(N+1)

返回

中斷服務(wù)子例程中斷棧

圖5-17中斷現(xiàn)場保護(hù)示意圖

3.轉(zhuǎn)入相應(yīng)的設(shè)備處理程序

由處理機(jī)對(duì)各個(gè)中斷源進(jìn)行測試,以確定引起本次中斷

的I/O設(shè)備,并發(fā)送一應(yīng)答信號(hào)給發(fā)出中斷請(qǐng)求的進(jìn)程,使之

消除該中斷請(qǐng)求信號(hào),然后將相應(yīng)的設(shè)備中斷處理程序的入

口地址裝入到程序計(jì)數(shù)器中,使處理機(jī)轉(zhuǎn)向中斷處理程序。

4.中斷處理

―對(duì)于不同的設(shè)備,有不同的中斷處理程序點(diǎn)程序首先

從設(shè)備控制器中讀出設(shè)備狀態(tài),以判別本次中斷是正常完成

中斷,還是異常結(jié)束中斷。若是前者,中斷程序便進(jìn)行結(jié)束

處理;若還有命令,可再向控制器發(fā)送新的命令,進(jìn)行新一

輪的數(shù)據(jù)傳送。若是異常結(jié)束中斷,則根據(jù)發(fā)生異常的原因

做相應(yīng)的處理。

5.恢復(fù)被中斷進(jìn)程的現(xiàn)場

當(dāng)中斷處理完成以后,便可將保存在中斷棧中的被中

斷進(jìn)程的現(xiàn)場信息取出,并裝入到相應(yīng)的寄存器中,其中

包括該程序下一次要執(zhí)行的指令的地址N+1、處理機(jī)狀態(tài)

字PSW,以及各通用寄存器和段寄存器的內(nèi)容。這樣,當(dāng)

處理機(jī)再執(zhí)行本程序時(shí),便從N+1處開始,最終返回到被

中斷的程序。

I/O操作完成后,驅(qū)動(dòng)程序必須檢查本次I/O操作中是否

發(fā)生了錯(cuò)誤,并向上層軟件報(bào)告,最終向調(diào)用者報(bào)告本次I/O

的執(zhí)行情況。除了上述的第4步外,其它各步驟對(duì)所有I/O設(shè)

備都是相同的,因而對(duì)于某種操作系統(tǒng),例如UNIX系統(tǒng),是

把這些共同的部分集中起來,形成中斷總控程序。每當(dāng)要進(jìn)

行中斷處理時(shí),都要首先進(jìn)入中斷總控程序。而對(duì)于第4步,

則對(duì)不同設(shè)備須采用不同的設(shè)備中斷處理程序繼續(xù)執(zhí)行。圖

5-18示出了中斷處理流程。

中斷請(qǐng)求信號(hào)

圖5-18中斷處理流程

5.4.3設(shè)備驅(qū)動(dòng)程序

設(shè)備驅(qū)動(dòng)程序通常又稱為設(shè)備處理程序,它是I/O進(jìn)程與

設(shè)備控制器之間的通信程序,又由于它常以進(jìn)程的形式存在,

故以后就簡稱之為設(shè)備驅(qū)動(dòng)進(jìn)程。

其主要任務(wù)是接收上層軟件發(fā)來的抽象I/O要求,如read

或write命令,在把它轉(zhuǎn)換為具體要求后,發(fā)送給設(shè)備控制器,

啟動(dòng)設(shè)備去執(zhí)行;止匕外,它也將由設(shè)備控制器發(fā)來的信號(hào)傳

送給上層軟件。

1.設(shè)備驅(qū)動(dòng)程序的功能(5個(gè))

----為了央現(xiàn)T內(nèi)進(jìn)程勺稽當(dāng)控制器之間的通信,設(shè)備驅(qū)動(dòng)程

序應(yīng)具有以下功能:

(1)接收由設(shè)備獨(dú)立性軟件發(fā)來的命令和參數(shù),并將命令

中的抽象要求轉(zhuǎn)換為具體要求,例如,將磁盤塊號(hào)轉(zhuǎn)換為磁盤

的盤面、磁道號(hào)及扇區(qū)號(hào)。

(2)檢查用戶I/O請(qǐng)求的合法性,了解I/O設(shè)備的狀態(tài),傳

遞有關(guān)參數(shù),設(shè)置設(shè)備的工作方式。

(3)發(fā)出I/O命令。如果設(shè)備空閑,便立即啟動(dòng)I/O設(shè)備去完

成指定的I/O操作;如果設(shè)備處于忙碌狀態(tài),則將請(qǐng)求者的請(qǐng)求

塊掛在設(shè)備隊(duì)列上等待。

(4)及時(shí)響應(yīng)由控制器或通道發(fā)來的中斷請(qǐng)求,并根據(jù)

其中斷類型調(diào)用相應(yīng)的中斷處理程序進(jìn)行處理。"

(5)對(duì)于設(shè)置有通道的計(jì)算機(jī)系統(tǒng),驅(qū)動(dòng)程序還應(yīng)能夠根

據(jù)用戶的I/O請(qǐng)求,自動(dòng)地構(gòu)成通道程序。

2.設(shè)備處理方式

⑴為每一類設(shè)備設(shè)置一個(gè)進(jìn)程,專門用于執(zhí)行這類設(shè)

備的I/O操作。比如,為所有的交互式終端設(shè)置一個(gè)交互式終

端進(jìn)程;又如,為同一類型的打印機(jī)設(shè)置一個(gè)打印進(jìn)程。

(2)在整個(gè)系統(tǒng)中設(shè)置一個(gè)I/O進(jìn)程,專門用于執(zhí)行系統(tǒng)

中所有各類設(shè)備的I/O操作。也可以設(shè)置一個(gè)輸入進(jìn)程和一個(gè)

輸出進(jìn)程,分別處理系統(tǒng)中所有各類設(shè)備的輸入或輸出操作。

(3)不設(shè)置專門的設(shè)備處理進(jìn)程,而只為各類設(shè)備設(shè)置相

應(yīng)的設(shè)備處理程序(模塊),供用戶進(jìn)程或系統(tǒng)進(jìn)程調(diào)用。

3.設(shè)備驅(qū)動(dòng)程序的特點(diǎn)

"設(shè)備驅(qū)動(dòng)程序?qū)儆诘图?jí)的系統(tǒng)例程,它與一般的應(yīng)用程

序及系統(tǒng)程序之間有下述明顯差異:

(1)驅(qū)動(dòng)程序主要是指在請(qǐng)求I/O的進(jìn)程與設(shè)備控制器之

間的一個(gè)通信和轉(zhuǎn)換程序。它將進(jìn)程的I/O請(qǐng)求經(jīng)過轉(zhuǎn)換后,

傳送給控制器;又把控制器中所記錄的設(shè)備狀態(tài)和I/O操作完

成情況及時(shí)地反映給請(qǐng)求I/O的進(jìn)程。

(2)驅(qū)動(dòng)程序與設(shè)備控制器和I/O設(shè)備的硬件特性緊密相

大,因IIIJ對(duì)個(gè)I口」火盤的設(shè)備應(yīng)配置不同的驅(qū)動(dòng)程序。例如,

可以為相同的多個(gè)終端設(shè)置一個(gè)終端驅(qū)動(dòng)程序,但有時(shí)即使

是同一類型的設(shè)備,由于其生產(chǎn)廠家不同,它們也可能并不

完全兼容,此時(shí)也須為它們配置不同的驅(qū)動(dòng)程序。

(3)驅(qū)動(dòng)程序與I/O設(shè)備所采用的I/O控制方式緊密相關(guān)。

常用的I/O控制方式是中斷驅(qū)動(dòng)和DMA方式,這兩種方式的

驅(qū)動(dòng)程序明顯不同,因?yàn)楹笳邞?yīng)按數(shù)組方式啟動(dòng)設(shè)備及進(jìn)行

中斷處理。

(4)由于驅(qū)動(dòng)程序與硬件緊密相關(guān),因而其中的一部分

必須用字編語言書寫。口前有很多驅(qū)動(dòng)程序的基本部分,已

經(jīng)固化在ROM中。

(5)驅(qū)動(dòng)程序應(yīng)允許可重入。一個(gè)正在運(yùn)行的驅(qū)動(dòng)程序

常會(huì)在一次調(diào)用完成前被再次調(diào)用。例如,網(wǎng)絡(luò)驅(qū)動(dòng)程序正

在處理一個(gè)到來的數(shù)據(jù)包時(shí),另一個(gè)數(shù)據(jù)包可能到達(dá)。

(6)驅(qū)動(dòng)程序不允許系統(tǒng)調(diào)用。但是為了滿足其與內(nèi)核其

它部分的交互,可以允許對(duì)某些內(nèi)核過程的調(diào)用,如通過調(diào)

用內(nèi)核過程來分配和釋放內(nèi)存頁面作為緩沖區(qū),以及調(diào)用其

它過程來管理MMU定時(shí)器、DMA控制器、中斷控制器等。

4.設(shè)備驅(qū)動(dòng)程序的處理過程

不同類型的設(shè)備應(yīng)有不同的設(shè)備驅(qū)動(dòng)程荔"但大體上它

們都可以分成兩部分,其中,除了要有能夠驅(qū)動(dòng)I/O設(shè)備工

作的驅(qū)動(dòng)程序外,還需要有設(shè)備中斷處理程序,以處理I/O

完成后的工作。

設(shè)備驅(qū)動(dòng)程序的主要任務(wù)是啟動(dòng)指定設(shè)備。但在啟動(dòng)之

前,還必須完成必要的準(zhǔn)備工作,如檢測設(shè)備狀態(tài)是否為

“忙”等。在完成所有的準(zhǔn)備工作后,才最后向設(shè)備控制器

發(fā)送一條啟動(dòng)命令。

設(shè)備驅(qū)動(dòng)程序的處理過程(P183)

1)將抽象要求轉(zhuǎn)換為具體要求

2)檢查I/O請(qǐng)求的合法性

3)讀出和檢查設(shè)備的狀態(tài)

4)傳送必要的參數(shù)

5)工作方式的設(shè)置

6)啟動(dòng)I/O設(shè)備

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

1犯至汕fr枇的施金_______________________

基本含義:應(yīng)用程序獨(dú)立于具體使用的物理設(shè)備。為了

實(shí)現(xiàn)設(shè)備獨(dú)立性而引入了邏輯設(shè)備和物理設(shè)備這兩個(gè)概念。

在應(yīng)用程序中,使用邏輯設(shè)備名稱來請(qǐng)求使用某類設(shè)備;而

系統(tǒng)在實(shí)際執(zhí)行時(shí),還必須使用物理設(shè)備名稱。

兩方面的好處:

1)設(shè)備分配時(shí)的靈活性

2)易于實(shí)現(xiàn)I/O重定向

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

驅(qū)動(dòng)程序是一個(gè)與硬件(或設(shè)備)緊密相關(guān)的軟件。為了

實(shí)現(xiàn)設(shè)備獨(dú)立性,必須再在驅(qū)動(dòng)程序之上設(shè)置一層軟件,稱

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

主要功能可分為以下兩個(gè)方面:

(1)執(zhí)行所有設(shè)備的公有操作:

八西U雙畬口'J刀一日匕與回收;②將邏輯設(shè)備名映射為

物理設(shè)備名,進(jìn)一步可以找到相應(yīng)物理設(shè)備的驅(qū)動(dòng)程序;③

保護(hù)設(shè)備,禁止用戶直接訪問設(shè)備;④緩沖管理;⑤差錯(cuò)控

制,設(shè)備獨(dú)立性軟件只處理那些設(shè)備驅(qū)動(dòng)程序無法處理的錯(cuò)

誤;⑥提供獨(dú)立于設(shè)備的邏輯塊,向高層軟件提供大小統(tǒng)一

的邏輯數(shù)據(jù)塊。

(2)向用戶層(或文件層)軟件提供統(tǒng)一接口。

無論何種設(shè)備,它們向用戶所提供的接口應(yīng)該是相同的。

例如,對(duì)各種設(shè)備的讀操作,在應(yīng)用程序中都使用read;而

對(duì)各種設(shè)備的寫操作,也都使用write。

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

1)邏輯設(shè)備表

為了實(shí)現(xiàn)設(shè)備的獨(dú)立性,系統(tǒng)必須設(shè)置一張邏輯設(shè)備表

(LUT,LogicalUnitTable),用于將應(yīng)用程序中所使用的邏輯

設(shè)備名映射為物理設(shè)備名。在該表的每個(gè)表目中包含了三項(xiàng):

邏輯設(shè)備名、物理設(shè)備名和設(shè)備驅(qū)動(dòng)程序的入口地址,如圖

5-19⑶所示。

驅(qū)動(dòng)程序

邏輯設(shè)備名物理設(shè)備名邏輯設(shè)備名系統(tǒng)設(shè)備表指針

入口地址

/dev/tty31024/dev/tty3

/dev/printe52046/dev/printe5

****

****

(a)(b)

圖5-19邏輯設(shè)備表

2)LUT的設(shè)置問題

LUT的設(shè)置可采取兩種方式:一

第一種方式是在整個(gè)系統(tǒng)中只設(shè)置一張LUT。

不能同名,在多用戶環(huán)境下這通常是難以做到的。

第二種方式是為每個(gè)用戶設(shè)置一張LUT。

每個(gè)用戶利用系統(tǒng)設(shè)備表建立的邏輯設(shè)備表可以采用

圖5-19(b)中的格式。

5.4.5用戶層的I/O軟件

一般而言,大部分的I/O軟件都在操作系統(tǒng)內(nèi)部,但仍有

一小部分在用戶層,包括與用戶程序鏈接在一起的庫函數(shù),

以及完全運(yùn)行于內(nèi)核之外的一些程序。

用戶層軟件必須通過一組系統(tǒng)調(diào)用來取得操作系統(tǒng)服務(wù)。

C語言中的庫函數(shù),在使用C語言編寫的用戶程序中,

可以直接使用這些系統(tǒng)調(diào)用。

5.5設(shè)備分配

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

1.設(shè)備控制表(DCT)

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

本設(shè)備的情況,如圖5-20所示。

設(shè)備控制表中,除了有用于指示設(shè)備類型的字段type和

設(shè)備標(biāo)識(shí)字段deviceid外,還應(yīng)含有下列字段:

(1)設(shè)備隊(duì)列隊(duì)首指針。(2)設(shè)備狀態(tài)。

(3)與設(shè)備連接的控制器表指針。(4)重復(fù)執(zhí)行次數(shù)。

設(shè)設(shè)備類型:type

控設(shè)備標(biāo)識(shí)符:deviceid

制設(shè)備狀態(tài):等待/不等待忙/閑

集指向控制器表的指針

重復(fù)執(zhí)行次數(shù)或時(shí)間

設(shè)備隊(duì)列的隊(duì)首指針

圖5-20

設(shè)備控制表

2.控制器控制表、通道控制表和系統(tǒng)設(shè)備表

(D控制器控制衣(0X7。。系統(tǒng)為每一個(gè)控制器都設(shè)置

了一張用于記錄本控制器情況的控制器控制表,如圖5-21(a)

所示。

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

表,如圖5-21(b)所示。

(3)系統(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)程序

的入口等項(xiàng),如圖5-21(c)所示。

控制器標(biāo)識(shí)符:通道標(biāo)識(shí)符:*1=11

controlleridchannelid表目1y

?設(shè)備類

z

控制器狀態(tài):忙/閑通道狀態(tài):忙/閑?

?

?設(shè)備標(biāo)識(shí)符

與控制器連接的通道表指針與通道連接的控制器表首址?

表目iDCT

控制器隊(duì)列的隊(duì)首指針通道隊(duì)列的隊(duì)首指針

?

*驅(qū)動(dòng)程序入口

控制器隊(duì)列的隊(duì)尾指針通道隊(duì)列的隊(duì)尾指針、4

(a)控制器表COCT(b)通道表CHCT(c)系統(tǒng)設(shè)備表SDT

圖5-21COCT、CHCT和SDT

5.5.2設(shè)備分配時(shí)應(yīng)考慮的因素

為了使系統(tǒng)有條不紊地工作,系統(tǒng)在分配設(shè)備時(shí),應(yīng)

考慮這樣幾個(gè)因素:①設(shè)備的固有屬性;②設(shè)備分配算法;

③設(shè)備分配時(shí)的安全性;④設(shè)備獨(dú)立性。

1.設(shè)備的固有屬性

仕分配攻備叮,自元也有虐與取備分配有關(guān)的設(shè)備屬性。

設(shè)備的固有屬性可分成三種:

第一種是獨(dú)占性,是指這種設(shè)備在一段時(shí)間內(nèi)只允許一個(gè)進(jìn)

程獨(dú)占,此即第二章所說的“臨界資源”;

第二種是共享性,指這種設(shè)備允許多個(gè)進(jìn)程同時(shí)共享;

第三種是可虛擬設(shè)備,指設(shè)備本身雖是獨(dú)占設(shè)備,但經(jīng)過某

種技術(shù)處理,可以把它改造成虛擬設(shè)備。

2.設(shè)備分配算法

對(duì)設(shè)備進(jìn)行分配的算法,與進(jìn)程調(diào)度的算法有些相似之

處,但前者相對(duì)簡單,通常只采用以下兩種分配算法:

(1)先來先服務(wù)。

(2)優(yōu)先級(jí)高者優(yōu)先。

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

~從進(jìn)程運(yùn)行的安全性考慮,設(shè)備分配有以下兩種方式。

1)安全分配方式

在這種分配方式中,每當(dāng)進(jìn)程發(fā)出I/O請(qǐng)求后,便進(jìn)入

阻塞狀態(tài),直到其I/O操作完成時(shí)才被喚醒。在采用這種分

配策略時(shí),一旦進(jìn)程已經(jīng)獲得某種設(shè)備(資源)后便阻塞,使

該進(jìn)程不可能再請(qǐng)求任何資源,而在它運(yùn)行時(shí)又不保持任何

資源。因此,這種分配方式已經(jīng)摒棄了造成死鎖的四個(gè)必要

條件之一的“請(qǐng)求和保持”條件,從而使設(shè)備分配是安全的。

其缺點(diǎn)是進(jìn)程進(jìn)展緩慢,即CPU與I/O設(shè)備是串行工作的。

2)不安全分配方式

在這種分配方式中,龍程在發(fā)出I/O請(qǐng)求后仍繼續(xù)運(yùn)行,

需要時(shí)又發(fā)出第二個(gè)I/O請(qǐng)求、第三個(gè)I/O請(qǐng)求等。僅當(dāng)進(jìn)程

所請(qǐng)求的設(shè)備已被另一進(jìn)程占用時(shí),請(qǐng)求進(jìn)程才進(jìn)入阻塞狀

態(tài)。這種分配方式的優(yōu)點(diǎn)是,一個(gè)進(jìn)程可同時(shí)操作多個(gè)設(shè)備,

使進(jìn)程推進(jìn)迅速。

其缺點(diǎn)是可能造成死鎖。因此,在設(shè)備分配程序中,還

應(yīng)再增加一個(gè)功能,以用于對(duì)本次的設(shè)備分配是否會(huì)發(fā)生死

鎖進(jìn)行安全性計(jì)算,僅當(dāng)計(jì)算結(jié)果說明分配是安全的情況下

才進(jìn)行設(shè)備分配。

5.5.3獨(dú)占設(shè)備的分配程序

L基本的設(shè)備分配程序"

1)分配設(shè)備

首先根據(jù)I/O請(qǐng)求中的物理設(shè)備名,查找系統(tǒng)設(shè)備表

(SDT),從中找出該設(shè)備的DCT,再根據(jù)DCT中的設(shè)備狀態(tài)字段,

可知該設(shè)備是否正忙。若忙,便將請(qǐng)求I/O進(jìn)程的PCB掛在設(shè)

備隊(duì)列上;否則,便按照一定的算法來計(jì)算本次設(shè)備分配的

安全性。如果不會(huì)導(dǎo)致系統(tǒng)進(jìn)入不安全狀態(tài),便將設(shè)備分配

給請(qǐng)求進(jìn)程;否則,仍將其PCB插入設(shè)備等待隊(duì)列。

2)分配控制器

再到其DCT中找

出與該設(shè)備連接的控制器的COCT,從COCT的狀態(tài)字段中可知

該控制器是否忙碌。若忙,便將請(qǐng)求I/O進(jìn)程的PCB掛在該控

制器的等待隊(duì)列上;否則,便將該控制器分配給進(jìn)程。

3)分配通道

在該COCT中又可找到與該控制器連接的通道的CHCT,

再根據(jù)CHCT內(nèi)的狀態(tài)信息,可知該通道是否忙碌。若忙,便

將請(qǐng)求I/O的進(jìn)程掛在該通道的等待隊(duì)列上;否則,將該通道

分配給進(jìn)程。只有在設(shè)備、控制器和通道三者都分配成功時(shí),

這次的設(shè)備分配才算成功。然后,便可啟動(dòng)該I/O設(shè)備進(jìn)行數(shù)

據(jù)傳送。

2.設(shè)備分配程序的改進(jìn)

―仔細(xì)研究上述基本的設(shè)備分配程序后可以發(fā)現(xiàn):①進(jìn)程

是以物理設(shè)備名來提出I/O請(qǐng)求的;②采用的是單通路的

I/O系統(tǒng)結(jié)構(gòu),容易產(chǎn)生“瓶頸”現(xiàn)象。

改進(jìn):

1)增加設(shè)備的獨(dú)立性

為了獲得設(shè)備的獨(dú)立性,進(jìn)程應(yīng)使用邏輯設(shè)備名請(qǐng)求I/O。

2)考慮多通路情況

采用多通路的I/O系統(tǒng)結(jié)構(gòu)。

5.5.4SPOOLing技術(shù)

1什4縣SPCZ;"

為了緩和CPU的高速性與I/O設(shè)備低速性間的矛盾而引入

了脫機(jī)輸入、脫機(jī)輸出技術(shù)。該技術(shù)是利用專門的外圍控制機(jī),

將低速I/O設(shè)備上的數(shù)據(jù)傳送到高速磁盤上;或者相反。事實(shí)

上,當(dāng)系統(tǒng)中引入了多道程序技術(shù)后,完全可以利用其中的一

道程序,來模擬脫機(jī)輸入時(shí)的外圍控制機(jī)功能,把低速I/O設(shè)

備上的數(shù)據(jù)傳送到高速磁盤上;再用另一道程序來模擬脫機(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(Simultaneous

PeripheralOperatingOnLine),或稱為假脫機(jī)操作。

2.SPOOLing系統(tǒng)的組成

90Ling技術(shù)是對(duì)脫機(jī)輸入、輸出系

統(tǒng)的模擬。相應(yīng)地,SPOOLing系統(tǒng)必須建立在具有多道程

序功能的操作系統(tǒng)上,而且還應(yīng)有高速隨機(jī)外存的支持,

這通常是采用磁盤存儲(chǔ)技術(shù)。

SPOOLing系統(tǒng)主要有以下三部分:

(1)輸入井和輸出井。這是在磁盤上開辟的兩個(gè)大存儲(chǔ)

空間。輸入井是模擬脫機(jī)輸入時(shí)的磁盤設(shè)備,用于暫存I/O

設(shè)備輸入的數(shù)據(jù);輸出井是模擬脫機(jī)輸出時(shí)的磁盤,用于

暫存用戶程序的輸出數(shù)據(jù)。

(2)輸入緩沖區(qū)和輸出緩沖區(qū)。為了緩和CPU和磁盤之間

通麻不芯配的予后,在內(nèi)存中要開辟兩個(gè)緩沖區(qū):輸入緩沖

區(qū)和輸出緩沖區(qū)。輸入緩沖區(qū)用于暫存由輸入設(shè)備送來的數(shù)

據(jù),以后再傳送到輸入井。輸出緩沖區(qū)用于暫存從輸出井送

來的數(shù)據(jù),以后再傳送給輸出設(shè)備。

(3)輸入進(jìn)程SPi和輸出進(jìn)程SPo。這里利用兩個(gè)進(jìn)程來模

擬脫機(jī)I/O時(shí)的外圍控制機(jī)。其中,進(jìn)程SPi模擬脫機(jī)輸入時(shí)

的外圍控制機(jī),將用戶要求的數(shù)據(jù)從輸入機(jī)通過輸入緩沖區(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)過輸出緩沖區(qū)送到輸出設(shè)備上。

圖5-22SPOOLing系統(tǒng)的組成

3.共享打印機(jī)

當(dāng)用戶進(jìn)程請(qǐng)求打印輸出時(shí),SPOOLing系統(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ì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ì)列中的第一張表,并根據(jù)其中的要求進(jìn)行打

印,如此下去,直至請(qǐng)求打印隊(duì)列為空,輸出進(jìn)程才將自己

阻塞起來。僅當(dāng)下次再有打印請(qǐng)求時(shí),輸出進(jìn)程才被喚醒。

4.SPOOLing系統(tǒng)的特點(diǎn)

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

(1)提高了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與低

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論