【操作系統】設備管理

一、前言

  學習了存儲器管理後,繼續學習設備管理,設備管理的主要功能有緩衝區管理、設備分配、設備處理、虛擬設備及實現設備獨立性等,由於I/O設備不僅種類繁多,而且他們的特性和操作方式往往相差甚大,使得設備管理稱爲操作系統中最繁雜且與硬件最緊密的部分,下面開始正式的學習。

二、I/O系統

  2.1 I/O設備

  I/O設備類型繁多,在OS觀點看,設備使用特性、數據傳輸速率、數據的傳輸單位、設備共享屬性等都是重要的性能指標。可以按照不同角度對他們進行分類

  ① 按設備的使用特性分類,可把設備分爲兩類,第一類是存儲設備,也稱爲外存活後備存儲器、輔助存儲器,是計算機系統用於存儲信息的主要設備,該設備速度慢,容量大,價格便宜。第二類是輸入/輸出設備,可分爲輸入設備、輸出設備和交互式設備,如鍵盤,鼠標,掃描儀,打印機,顯示器等。

  ② 按傳輸速率分類,可將I/O設備分爲三類,第一類是低速設備,其傳輸速率僅爲每秒鐘幾個字節至幾百個字節的設備,如鍵盤、鼠標等。第二類是中速設備,其傳輸速率爲每秒數千個字節至十萬個字節的設備,如行式打印機、激光打印機等。第三類是高速設備,其傳輸速率在數百個千字節至千兆字節的設備,如磁帶機、磁盤機、光盤機等。

  ③ 按信息交換的單位分類,可把I/O設備分爲兩類,第一類爲塊設備,這類設備用於存儲信息,信息以數據塊爲單位,如磁盤,每個盤塊512B~4KB,傳輸速率較高,通常每秒鐘幾兆位,另一特徵是可尋址,即對它可隨機地讀/寫任一塊,磁盤設備的I/O常採用DMA方式。第二類是字符設備,用於數據的輸入和輸出,其基本單位是字符,屬於無結構類型,如打印機等,其傳輸速率較低,通常爲幾個字節至數千個字節,另一特徵是不可尋址,即輸入/出時不能指定數據的輸入源地址及輸出的目標地址,此外,常採用中斷驅動方式。

  ④ 按設備的共享屬性分類,可以分爲三類,獨佔設備,在一段時間內只允許一個用戶(進程)訪問的設備,即臨界資源。共享設備,在一段時間內允許多個進程同時訪問的設備,當然,每一時刻仍然只允許一個進程訪問,如磁盤(可尋址和可隨機訪問)。虛擬設備,通過虛擬技術將一臺設備變換爲若干臺邏輯設備,供若干個用戶(進程)同時使用。

  通常,設備並不是直接與CPU進行通信,而是與設備控制器通信,因此,在I/O設備中應該含有與設備控制器之間的接口,在該接口有三種類型的信號,各對應一條信號線。

  ① 數據信號線,用於在設備控制器之間傳送數據信號,對於輸入設備而言,由外界輸入的信號經轉換器轉換後所形成的數據,通常先送入緩衝器中,當數量達到一定的比特(字符)數後,再從緩衝器通過一組信號線傳送給設備控制器。對輸出設備而言,則先將從設備控制器經過數據信號線傳送來的一批數據先暫存於緩衝器中,經轉換器做適當轉換後,再逐個字符地輸出。

  ② 控制信號線,作爲由設備控制器向I/O設備發送控制信號時的通路,該信號規定了設備將要執行的操作,如讀操作(指由設備向控制器傳送數據)或寫操作(由控制器接受數據),或執行磁頭移動等操作。

  ③ 狀態信號線,用於傳送設備當前狀態的信號,設備的當前狀態有正在讀(或寫);設備已讀(寫)完成,並準備好新的數據傳送。

img

  2.2 設備控制器

  設備控制器是計算機中的一個實體,其主要職責是控制一個或多個I/O設備,以實現I/O設備和計算機之間的數據交換,它是CPU與I/O設備之間的接口,它接收從CPU發來的命令,並去控制I/O設備工作,以使處理從繁雜的設備控制事務中解脫出來。其是一個可編址的設備,當它僅控制一個設備時,它只有一個唯一的設備地址,若控制器可連接多個設備時,則應該含有多個設備地址,並使每個設備地址對應一個設備。設備控制器可以分爲用於控制字符設備的控制器和用於控制塊設備的控制器

  設備控制器的基本功能如下

  ① 接收和識別命令,CPU可以向控制器發送多種不同的命令,設備控制器應能夠接收並識別這些命令,爲此,控制器中應具有相應的控制寄存器,用來存放接收的命令和參數,並對所接收的命令進行譯碼,相應的,在磁盤控制器中有多個寄存器和命令譯碼器。

  ② 數據交換,實現CPU與控制器之間、控制器與設備之間的數據交換,對於前者,通過數據總線,由CPU並行地將數據寫入控制器,或從控制器中並行地讀出數據,對於後者,是是被將數據輸入到控制器,或從控制器傳送給設備,爲此,在控制器中必須設置一個數據寄存器。

  ③ 標識和報告設備的狀態,控制器應該幾下設備的狀態供CPU瞭解,在控制器中設置一狀態寄存器,用其中的每一位來反映設備的某一種狀態,當CPU將該寄存器的內存讀入後,便可瞭解該設備的狀態。

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

  ⑤ 數據緩衝,由於I/O設備的速率較低而CPU和內存速率很高,故在控制器中必須設置一個緩衝器,在輸出時,用此緩衝器暫存由主機高速傳來的數據,然後才以I/O設備所具有的速率將緩衝器的數據傳送給I/O設備,在輸入時,緩衝器則用於暫存從I/O設備送來的數據,待接收一批數據後,再將緩衝器中的數據高速地傳送至主機。

  ⑥ 差錯控制,設備控制器監管對I/O設備傳送來的數據進行差錯檢測,若發現傳送中出現了錯誤,則向CPU報告,於是CPU將本次傳送的數據作廢,並重新傳送一次,這樣便可以確保數據輸入的正確性。

  由於設備控制器位於CPU與設備之間,既要與CPU通信,又要與設備通信,還應具有按照CPU所發來的命令去控制設備工作的功能,因此,現有的大多數控制器都是由如下的三部分組成。

  ① 設備控制器與處理機的接口,該接口用於實現CPU與設備控制器之間的通信,共有三類信號線,數據線、地址線、控制線,數據線與兩類寄存器相連接,第一類是數據寄存器,第二類是控制/狀態寄存器。

  ② 設備控制器與設備的接口,設備控制器可以連接一個或多個設備,相應地,在控制器中便有一個或多個設備接口,一個接口連接一臺設備,在每個接口中都存在數據、控制和狀態三種類型的信號,控制器中的I/O邏輯根據處理機發來的地址信號去選擇一個設備接口。

  ③ I/O邏輯,用於實現對設備的控制,通過一組控制線與處理機交互,處理機利用該邏輯向控制器發送I/O命令,I/O邏輯對收到的命令進行譯碼,每當CPU要啓動一個設備時,一方面將啓動命令發送給控制器,另一方面又同時通過地址線把地址發送給控制器,由控制器的I/O邏輯對收到的地址進行譯碼,再根據所譯出的命令對所選設備進行控制。

img

  2.2 I/O通道

  雖然在CPU與I/O設備之間增加了設備控制器後,可以大大減少CPU對I/O的干預,但是當主機所配置的外設很多時,CPU的負擔仍然很重,因此,在CPU和設備控制器之間又增設了通道。其主要目的是爲了建立獨立的I/O操作,不僅使數據的傳送能獨立於CPU,而且也希望有關對I/O操作的組織、管理及其結束處理儘量獨立,以保證CPU有更多的時間去進行數據處理。在設置了通道後,CPU只需要向通道發送一條I/O指令,通道在收到該指令後,便從內存中取出本次要執行的通道程序,然後執行該通道程序,僅當通道完成了規定的I/O任務後,才向CPU發中斷信號。I/O通道是一種特殊的處理機,具有執行I/O指令的能力,並通過執行通道(I/O)程序來控制I/O操作,但I/O通道與一般的處理機不同,因爲其指令類型單一同時沒有自己的內存,與CPU共享主內存。

  通道用於控制外圍設備(包括字符設備和塊設備),由於外圍設備的類型較多,傳輸速率相差甚大,因爲使通道具有多種類型,根據信息交換方式的不同,將通道分爲以下三種。

  ① 字節多路通道,這是一種按照字節交叉方式工作的通道,通常都含有許多非分配型子通道,其數量可以幾十到數百個,每個子通道連接一臺I/O設備,並控制該設備的I/O操作,這些子通道按照時間片輪轉方式共享主通道

img

  ② 數組選擇通道,字節多路通道不適合連接高速設備,數組選擇通道按數組進行數據傳送,其通常只含有一個分配型子通道,在一段時間內只能執行一道通道程序,控制一臺設備進行數據傳送,致使當某臺設備佔用了該通道後,便一直由它獨佔,即使是它無數據傳送,通道被閒置,也不允許其他設備使用該通道,直至該設備傳送完畢釋放該通道,其利用率很低。

  ③ 數組多路通道,由於數組選擇通道每次只允許一個設備傳送數據,數組多路通道是將數組選擇通道傳輸速率高和字節多路通道能使各子通道(設備)分時並行操作的優點相結合而形成的一種新通道,其含有多個非分配型子通道,具有很高的數據傳輸速率,其數據傳輸是按數組方式進行的。

  由於通道價格昂貴,計算所設置的通道較少,提高通道的利用率的一種很有效的方法是增加設備到主機間的通路而不增加通道

img三、I/O控制方式

*  3.1 程序I/O方式*

  在早起計算機系統中,由於無中斷機構,處理機對I/O設備的控制採取程序I/O方式,或稱爲忙-等待方式,即在處理機向控制器發出一條I/O指令啓動輸入設備輸入數據時,要同時把狀態寄存器中的忙/閒標誌busy設置爲1,然後便不斷地循環測試busy,只有當其爲0時,表示輸入已經送入控制器的數據寄存器中,於是處理機將數據寄存器中的數據取出,送入內存指定單元中,這樣便完成了一個字(符)的I/O。

  在程序I/O方式中,由於CPU的高速性和I/O設備的低速性,致使CPU的絕大部分時間都處於等待I/O設備完成數據I/O的循環測試中,造成對CPU的極大浪費。

  3.2 中斷驅動I/O控制方式

  當某進程要啓動某個I/O設備工作時,便由CPU向相應的設備控制器發出一條I/O命令,然後立即返回繼續執行原來的任務,設備控制器於是按照該命令的要求去控制指定I/O設備,此時,CPU與I/O設備並行操作。一旦數據進入數據寄存器,控制器便通過控制線向CPU發送一箇中斷信號,由CPU檢查輸入過程中是否出錯,若無錯,便由控制器發送取走數據的信號,再通過控制器及數據線將數據寫入內存指定單元中。

  在I/O設備輸入每個數據的過程中,由於無需CPU干預,因而可使CPU與I/O設備並行工作,僅當完成一個數據輸入時,才需CPU花費極短的時間去做一些中斷處理。

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

  雖然中斷驅動I/O比程序I/O方式更有效,但是,它仍是以字(節)爲單位進行I/O的,每當完成一個字(節)的I/O時,控制器便要向CPU請求一次中斷,換言之,採用中斷驅動I/O方式時的CPU是以字(節)爲單位進行干預的,將這種方式用於塊設備的I/O是非常低效的,例如,爲了從磁盤讀取1KB的數據塊,需要中斷CPU1K次,爲了進一步減少CPU對I/O的干預而引入了直接存儲器訪問方式,該方式的特點如下

  ① 數據傳輸的基本單位是數據塊,即在CPU與I/O設備之間,每次傳送至少一個數據塊。

  ② 所傳送的數據是從設備直接送入內存的,或者相反。

  ③ 僅在傳送一個或多個數據塊的開始和結束時,需要CPU干預,整塊數據的傳送是在控制器的控制下完成的。

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

img

  說明:DMA控制器中的寄存器說明如下

  ① 命令/狀態寄存器(CR),用於接收從CPU發送來的I/O命令,或有關控制信息,或設備的狀態。

  ② 內存地址寄存器(MAR),在輸入時,它存放把數據從設備傳送到內存的起始目標地址,在輸出時,它存放由內存到設備的內存源地址。

  ③ 數據寄存器(DR),用於暫存從設備到內存,或從內存到設備的數據。

  ④ 數據計數器(DC),存放本次CPU要讀或寫的字(節)數。

  當CPU要從磁盤讀入一個數據塊時,便向磁盤控制器發送一條讀命令,該命令被送到其中的命令寄存器(CR)中,同時,還需要發送本次要將數據讀入的內存起始目標地址,該地址被送入內存地址寄存器(MAR)中,本次要讀數據的字(節)數被送入數據寄存器(DC)中,還須將磁盤中的源地址直接送至DMA控制器的I/O控制邏輯上,然後,啓動DMA控制器進行數據傳送,以後,CPU便可去處理其他任務,此後,整個數據傳送過程便由DMA控制器進行控制,當DMA控制器已從磁盤中讀入一個字(節)的數據並送入數據寄存器(DR)後,再挪用一個存儲器週期,將該字(節)傳送到MAR所指示的內存單元中,接着便對MAR內容加1,將DC內存減1,若減後DC內存不爲0,表示傳送未完成,便繼續傳送下一個字(節),否則,由DMA控制發出中斷請求。

img

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

img  3.4 I/O通道控制方式

  雖然DMA方式比起中斷方式已經顯著地減少CPU的干預,即已由以字(節)爲單位的干預減少到了以數據塊爲單位進行干預,但CPU沒發出一條I/O指令,也只能去讀(或寫)一個連續的數據塊,而當我們需要一次去讀多個數據塊且將他們分別傳送到不同的內存區域,或者相反時,則須由CPU分別發出多條I/O指令及進行多次中斷才能完成。I/O通道方式是DMA的發展,它可以進一步減少CPU的干預,即把一個數據塊的讀(或寫)爲單位的干預減少爲對一組數據塊的讀(或寫)及有關的控制和管理爲單位的干預。同時,可以實現CPU、通道、I/O設備的並行操作,提高資源利用率。

  通道是通過執行通道程序,並與設備控制器共同實現對I/O設備的控制的,通道程序是由一系列通道指令(或稱爲通道命令)所構成的,通道指令與一般的機器指令不同,它的每條指令都包含下列的信息。

  ① 操作碼,操作碼規定了指令所執行的操作,如讀、寫、控制等操作。

  ② 內存地址,內存地址標明字符送入內存(讀操作)和從內存取出(寫操作)時的內存首址。

  ③ 計數,該信息表示本條指令所要讀(或寫)數據的字節數。

  ④ 通道程序結束位P,該位用於表示通道程序是否結束,P=1表示本條指令是通道程序的最後一條指令。

  ⑤ 記錄結束標誌R,R=0表示本通道指令與下一條指令所處理的數據是同屬於一個記錄,R=1表示這是處理某記錄的最後一條指令。

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

img

四、緩衝管理

  在設備管理中,爲了緩和CPU與I/O設備速度不匹配的矛盾,提高CPU與I/O設備的並行性,在I/O設備與處理機交換數據時都用到了緩衝區。

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

  ② 減少對CPU的中斷頻率,放寬對CPU中斷響應時間的限制。

  ③ 提高CPU和I/O設備之間的並行性。

  4.1 單緩衝

  每當用戶進程發出一個I/O請求時,操作系統便在主存中爲之分配一個緩衝區,假定從磁盤把一塊數據輸入到緩衝區的時間爲T,操作系統將該緩衝區中的數據傳送到用戶區的時間爲M,而CPU對這一塊數據處理(計算)的時間爲C,由於T和C是可以並行的,當T>C時,系統對每一塊數據的處理時間爲M+T,反之,爲M+C,系統對每一塊數據的處理時間爲Max(C,T) + M

img

  在字符設備輸入時,緩衝區用於暫存用戶輸入的一行數據,在輸入期間,用戶進程被掛起以等待數據輸入完畢,在輸出時,用戶進程將一行數據輸入到緩衝區後,繼續進行處理,當用戶進程已有第二行數據輸出時,如果第一行數據尚未被提取完畢,則此時用戶進程應該阻塞。

  4.2 雙緩衝

  爲了加快輸入和輸出的速度,提高設備利用率,人們又引入了雙緩衝區機制,稱爲緩衝對換,在設備輸入時,先將數據送入第一個緩衝區,裝滿後便轉向第二個緩衝區,此時操作系統可以從第一緩衝區中移出數據,並送入用戶進程,接着由CPU對數據進行計算,在雙緩衝時,系統處理一塊數據的時間可以粗略地認爲是Max(C,T),如果C