計算機操作系統之IO管理

本文出處:http://www.cnblogs.com/leesf456/p/5622859.html

一、前言

  學習了存儲器管理後,繼續學習設備管理,設備管理的主要功能有緩衝區管理、設備分配、設備處理、虛擬設備及實現設備獨立性等,由於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設備發送控制信號時的通路,該信號規定了設備將要執行的操作,如讀操作(指由設備向控制器傳送數據)或寫操作(由控制器接受數據),或執行磁頭移動等操作。

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

  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邏輯對收到的地址進行譯碼,再根據所譯出的命令對所選設備進行控制。

  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操作,這些子通道按照時間片輪轉方式共享主通道

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

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

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

三、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控制邏輯。

  說明: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控制發出中斷請求。

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

  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個字符的記錄。

四、緩衝管理

  在設備管理中,爲了緩和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

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

  4.2 雙緩衝

  爲了加快輸入和輸出的速度,提高設備利用率,人們又引入了雙緩衝區機制,稱爲緩衝對換,在設備輸入時,先將數據送入第一個緩衝區,裝滿後便轉向第二個緩衝區,此時操作系統可以從第一緩衝區中移出數據,並送入用戶進程,接着由CPU對數據進行計算,在雙緩衝時,系統處理一塊數據的時間可以粗略地認爲是Max(C,T),如果C<T,可使塊設備連續輸入,如果C>T,則可使CPU不必等待設備輸入。對於字符設備,若採用行輸入方式,則採用雙緩衝通常能消除用戶的等待時間,即用戶在輸入完第一行後,在CPU執行第一行中的命令時,用戶可繼續向第二緩衝區輸入下一行數據。

  4.3 循環緩衝

  當輸入與輸出或生產者與消費者的速度基本相匹配時,採用雙緩衝能獲得較好的效果,可使生產者和消費者基本上能並行操作,但若兩者速度相差甚遠,雙緩衝的效果則不夠理想,因此,引入了多緩衝機制,可將多個緩衝組織成循環緩衝形式。對於用作輸入的循環緩衝,通常是提供給輸入進程或計算進程使用,輸入進程不斷向空緩衝去輸入數據,而計算進程則從中提取數據進行計算。

  循環緩衝區的組成如下

  ① 多個緩衝區,在循環緩衝區中包括多個緩衝區,每個緩衝區的大小相同,作爲輸入的多緩衝區可分爲三種類型,用於裝輸入數據的空緩衝區R、已裝滿數據的緩衝區G以及計算進程正在使用的先行工作緩衝區C

  ② 多個指針,作爲輸入的緩衝區可設置三個指針,用於指示計算進程下一個可用緩衝區G的指針Nextg、指示輸入進程下次可用的空緩衝區R的指針Nexti、以及用於指示計算進程正在使用的緩衝區C的指針Current。

  計算進程和輸入進程可以利用下述兩個過程來使用循環緩衝區(循環緩衝的使用)。

  ① Getbuf過程,當計算進程要使用緩衝區中的數據時,可調用Getbuf過程,該過程將由指針Nextg所指示的緩衝區提供給進程使用,相應的,須把它改爲現行工作緩衝區,並將Current指針指向該緩衝區的第一個單元,同時將Nextg移向下一個G緩衝區,類似地,當輸入進程要使用空緩衝區來裝入數據時,調用Getbuf過程,由該過程將指針Nexti所指示的緩衝區提供給輸入進程使用,同時將Nexti指針移向下一個R緩衝區。

  ② Releasebuf過程,當計算進程把C緩衝區中的數據提取完畢時,便調用Releasebuf過程,將緩衝區C釋放,此時,把該緩衝區由當前(現行)工作緩衝區C改爲空緩衝區R,類似地,當輸入進程把緩衝區裝滿時,也應該調用Releasebuf過程,將該緩衝區釋放,並改爲G緩衝區。

  使用輸入循環緩衝,可使輸入進程和計算進程並行執行(進程同步,相應地,指針Nexti和指針Nextg將不斷地沿着順時針方向移動,這樣就會出現如下兩種情況。

  ① Nexti指針追趕上Nextg指針,這意味着輸入進程的速度大於計算進程處理數據的速度,已把全部可用的空緩衝區裝滿,再無緩衝區可用,此時,輸入進程應該阻塞,直到計算進程把某個緩衝區中的數據全部提取完,使之成爲空緩衝區R,並調用Releasebuf過程將它釋放時,纔將輸入進程喚醒,這種情況稱爲系統受計算限制

  ② Nextg指針追趕上Nexti指針,這意味着輸入數據的速度低於計算進程處理數據的速度,使全部裝有輸入數據的緩衝區都被抽空,再無裝有數據的緩衝區供計算進程提取數據,這時,計算進程應該阻塞,直至輸入進程又裝滿某個緩衝區,並調用Releasebuf過程將它釋放時,纔去喚醒計算進程,這種情況稱爲系統受I/O限制

  4.4 緩衝池

  上述的緩衝區僅適用於某特定的I/O進程和計算進程,因而它們屬於專用緩衝,當系統較大時,將會有許多這樣的循環緩衝,這樣會消耗大量的內存空間,而且利用率不高,爲了提高緩衝區的利用率,引入緩衝池,在池中設置了多個可供若干個進程共享的緩衝區。

   對於既可以用於輸出的共用緩衝池,其中至少包含有一下三種類型的緩衝區。

  ① 空(閒)緩衝區。

  ② 裝滿輸入數據的緩衝區。

  ③ 裝滿輸出數據的緩衝區。

  爲了管理方便,將相同類型的緩衝區鏈成一個隊列,形成了空緩衝隊列emq輸入隊列inq輸出隊列outq。還具有四種工作緩衝區,用於收容輸入數據的工作緩衝區用於提取輸入數據的工作緩衝區用於收容輸出數據的工作緩衝區用於提取輸出數據的工作緩衝區

  緩衝區可以工作在收容輸入、提取輸入、收容輸出、提取輸出四種工作方式下。

  ① 收容輸入,在輸入進程需要輸入數據時,便調用Getbuf(emp)過程,從空緩衝隊列的隊首取出一個空緩衝區,把它作爲收容輸入工作緩衝hin,然後,把數據輸入其中,裝滿後再調用Putbuf(inq,hin)過程,將該緩衝區掛在輸入隊列上。

  ② 提取輸入,當計算進程需要輸入數據時,調用Getbuf(inq)過程,從輸入隊列隊首取出一個緩衝區,作爲提取輸入工作緩衝區sin,計算進程從中提取數據,計算進程用完該數據後,再調用Putbuf(emq,sin)過程,將該緩衝區掛到空緩衝隊列emq上。

  ③ 收容輸入,當計算進程需要輸出時,調用Getbuf(emq)過程從空緩衝區隊列emq的隊首取出一個空緩衝區,作爲收容輸出工作緩衝區hout,當其中裝滿輸出數據後,又調用Putbuf(outq,hout)過程,將該緩衝區掛在outq末尾。

  ④ 提取輸出,由輸出進程調用Getbuf(outq)過程,從輸出隊列隊首取出一個裝滿輸出數據的緩衝區,作爲提取輸出工作緩衝區sout,在數據提取完後,再調用Putbuf(emq,sout)過程,將該緩衝區掛在空緩衝隊列末尾。

五、I/O軟件

  5.1 設備獨立性軟件

  應用程序獨立於具體使用的物理設備,爲了實現設備獨立性而引入了邏輯設備和物理設備這兩個概念,在應用程序中,使用邏輯設備名稱來請求使用某類設備,而系統在實際執行時,還必須使用物理設備名稱。因此,系統需具有將邏輯設備名稱轉換爲某物理設備名稱的功能,這非常類似於存儲器管理所介紹的邏輯地址和物理地址的概念,在應用程序中使用的是邏輯地址,系統在分配和使用內存時,必須使用物理地址。在實現了設備獨立性功能後,可帶來以下好處。

  ① 設備分配時的靈活性,當應用程序(進程)以物理名稱來請求使用指定的某臺設備時,如果該設備已經分配給其他進程或正在檢修,而此時儘管還有幾臺其他的相同設備正在空閒,該進程仍然阻塞,但若進程能夠以邏輯設備名稱來請求某類設備時,系統可立即將該類設備中的任一臺分配給進程,僅當所有此類設備全部分配完畢時,進程纔會阻塞。

  ② 易於實現I/O重定向,用於I/O操作的設備可以更換,而不必改變應用程序。  

  5.2 邏輯設備名到物理設備名映射的實現

  ① 邏輯設備表,爲了實現設備的獨立性,系統必須設置一張邏輯設備表LUT(Logical Unit Table),用於將應用程序中所使用的邏輯設備名映射爲物理設備名,該表的每個表目中包含了三項,邏輯設備名物理設備名設備驅動程序的入口地址

  通過邏輯設備名,系統可以查找LUT,便可找到物理設備和驅動程序。

  ② LUT的設置問題,LUT的設置可以採用兩種方式:在整個系統中設置一張LUT(由於系統中所有進程的設備分配情況都記錄在同一張LUT中,因而不允許在LUT中具有相同的邏輯設備名,這就要求所有用戶都不能使用相同的邏輯設備名,多用戶下難以做到,單用戶很好實現)。爲每個用戶設置一張LUT每當用戶登錄時,便爲該用戶建立一個進程,同時建立一張LUT,並將該表放入進程的PCB中)

六、設備分配

  6.1 設備分配中的數據結構

  在進行設備分配時,通常都需要藉助於一些表格的幫助,在表格中記錄了相應設備或控制器的狀態及對設備或控制器進行控制所需的信息,在進行設備分配時所需要的數據結構有設備控制表控制器控制表通道控制表系統設備表等。

  ① 設備控制表(DCT),系統爲每個設備都配置了一張設備控制表,用於記錄本設備的情況。

  說明:設備隊列隊首指針(凡因爲請求本設備而未得到滿足的進程,其PCB都應按照一定的策略排成一個隊,稱該隊列爲設備請求隊列或簡稱設備隊列,其隊首指針指向隊首PCB),設備狀態(當設備處於使用狀態時,應該設備設置爲忙/閒標誌置爲1),與設備連接的控制器表指針(該指針指向該設備所連接的控制器的控制表),重複執行次數(由於外部設備在傳送數據時,較容易發生數據傳送錯誤,因而在許多系統中,如果發生傳送錯誤,並不立即認爲傳送失敗,而是令它重傳,並由系統規定設備在工作中發生錯誤時應重複執行的次數)

  ② 控制器控制表(COCT),系統爲每個控制器都設置了一張用於記錄本控制器情況的控制器控制表。

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

  ④ 系統設備表(SDT),系統範圍的數據結構,記錄了系統中全部設備的情況,每個設備佔用一個表目,其中包括有設備類型、設備標識符、設備控制表及設備驅動程序的入口等。

  6.2 SPOOLing技術

  通過SPOOLing技術可將一臺物理I/O設備虛擬爲多臺邏輯I/O設備,允許多個用戶共享一臺物理I/O設備

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

  SPOOLing技術是對脫機輸入、輸出系統的惡魔你,相應地,SPOOLing系統必須建立在具有多道程序功能的操作系統上,而且還應有高速隨機外存的支持,這通常採用磁盤存儲技術。

  SPOOLing系統由一下三部分組成。

  ① 輸入井和輸出井,這是在磁盤上開闢的兩個大存儲空間。輸入井是模擬脫機輸入時的磁盤設備,用於暫存I/O設備輸入的數據,輸出井是模擬脫機輸出時的磁盤,用於暫存用戶程序和輸出數據。

  ② 輸入緩衝區和輸出緩衝區,緩和CPU與磁盤之間速度不匹配,在內存中開闢的兩個緩衝區,輸入緩衝區用於暫存由輸入設備送來的數據,以後再傳送到輸入井,輸出緩衝區用於暫存從輸出井送來的數據,以後再傳送給輸出設備。

  ③ 輸入進程SPi和輸出進程SPo,利用兩個進程來模擬脫機I/O時的外圍控制機,其中,進程SPi模擬脫機輸入時的外圍控制機,將用戶要求的數據從輸入機通過輸入緩衝區再送到輸入井,當CPU需要輸入數據時,直接從輸入井讀入內存;進程SPo模擬脫機輸出時的外圍控制機,把用戶要求輸出的數據先從內存送到輸出井,待輸出設備空閒時,再將輸出井中的數據經過輸出緩衝區送到輸出設備上。

  利用SPOOLing技術,可以將獨佔設備打印機改造爲一臺供多個用戶共享的設備,從而提高設備的利用率,也方便了用戶。當用戶進程請求打印輸出時 ,SPOOLing系統統一爲它打印輸出,但是並不真正立即把打印機分配給該用戶進程,而只爲它做兩件事。

  ① 由輸出進程在輸出井中爲之申請一個空閒磁盤塊區,並將要打印的數據送入其中。

  ② 輸出進程再爲用戶進程申請一張空白的用戶請求打印表,並將該用戶的打印要求填入其中,再將該表掛到請求打印隊列上。

  如果還有進程要求打印輸出,系統仍可以接受該請求,也同樣爲該進程做上述兩件事情。

  如果打印機空閒,輸出進程將從請求打印隊列的隊首取出一張請求打印表,根據表中的要求打印數據,從輸出井傳送到內存緩衝區,再由打印機進行打印。打印完後,輸出進程再查看請求打印隊列中是否還有等待打印的請求表,若有,又取出隊列中的第一張表,繼續打印,直至請求打印隊列爲空,輸出進程纔將自己阻塞起來,僅當下次再有打印請求時,輸出進程才被喚醒。

  SPOOLing系統主要有如下的特點

  ① 提高了I/O速度,對數據所進行的I/O操作,已從對低速的I/O設備進行I/O操作,演變爲對輸入井或輸出井中數據的存取,如同脫機輸入輸出一樣,提高了I/O速度,緩和了CPU與低速I/O設備之間速度不匹配。

  ② 將獨佔設備改造爲共享設備,因爲在SPOOLing系統中,實際上並沒有任何進程分配設備,而只是在輸入井或輸出井中爲進程分配一個存儲區和建立一張I/O請求表,這樣,便把獨佔設備改造爲共享設備。

  ③ 實現了虛擬設備功能,宏觀上,雖然是多個進程在同時使用一臺獨佔設備,而對於每個進程而言,他們都會認爲自己是獨佔了一個設備,當然,只是邏輯上的設備,SPOOLing系統實現了將獨佔設備變換爲若干個對應的邏輯設備的功能。

七、磁盤存儲器的管理

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

  7.1 磁盤調度

  磁盤是多個進程共享的設備,當有多個進程都要求訪問磁盤時,應採用一種最佳的調度算法,使各進程對磁盤的平均訪問時間最小。由於在訪問磁盤中,主要是尋道時間,因此,磁盤調度的目標是使磁盤的平均尋道時間最少。目前常用的磁盤調度算法有先來先服務、最短尋道時間優先及掃描等算法。

  ① 先來先服務(FCFS, First Come First Service),這是一種最簡單的磁盤調度算法,其根據進程請求訪問磁盤的先後順序進行調度,優點是公平、簡單,每個進程的請求都能得到依次處理,不會出現某個進程的請求長期得不到滿足的情況。

  ② 最短尋道時間優先(SSTF,Shortest Seek Time First)要求訪問的磁道與當前磁頭所在的磁道距離最近,以使每次的尋道時間最短。但這種算法不能保證平均尋道時間最短

  ③ 掃描(SCAN)算法,SSTF算法雖然能獲得較好的尋道性能,但可能會導致某個進程發生飢餓現象,因爲只要有新進程的請求到達,且其所要訪問的磁道與磁頭當前所在磁道的距離較近,這種新進程的I/O請求必然先滿足,對SSTF算法修改後形成SCAN算法,可防止老進程出現飢餓現象。該算法不僅考慮到欲訪問的磁盤與當前磁道之間的距離,更優先考慮的是磁頭當前的移動方向。例如,當磁頭正在自裏向外移動時,SCAN算法所考慮的下一個訪問對象,應是其欲訪問的磁道既在當前磁道之外,又是距離最近的。其類似電梯的運行,也稱爲電梯調度算法。

  ④ 循環掃描(CSCAN)算法,SCAN算法既能夠獲得較好的尋道性能,又能防止飢餓現象,但是,當磁頭剛從裏向外移動而越過了某個磁道時,恰好又有一進程請求訪問此磁道,這時,該進程必須等待,待磁頭繼續從裏向外,然後再從外向裏掃描完所有要訪問的磁道後,才處理該進程的請求,致使該進程的請求被大大地推遲。爲了減少這種延遲,CSCAN算法規定磁頭單向移動,例如,致使自裏向外移動,當磁頭移到最外的磁道訪問後,磁頭立即返回最裏的欲訪問的磁道,即將最小的磁道號緊接着最大的磁道號構成循環,進行循環掃描

  ⑤ NStepSCAN算法,在SSTF、SCAN、CSCAN幾種調度算法中,都可能會出現磁臂停留在某處不動的情況,例如,有一個或幾個進程對某個磁道具有較高的訪問頻率,即這些進程反覆請求對某一磁道的I/O操作,從而壟斷了整個磁盤設備,這一現象稱爲磁臂粘着。NStepSCAN算法將磁盤請求隊列分成若干個長度爲N的子隊列,磁盤調度將按FCFS算法一次處理這些子隊列,當正在處理某子隊列時,如果又出現了新的磁盤請求,便將新的請求進程放入其他隊列,這樣就避免了出現粘着現象。當N很大時,會使N步掃描算法性能接近於SCAN算法,當N=1時,退化爲FCFS算法。

  ⑥ FSCAN算法,其是NStepSCAN的簡化,即FSCAN只將磁盤請求隊列分成兩個子隊列,一個是由當前所有請求磁盤I/O的進程所形成的隊列,由磁盤調度按SCAN算法進行處理,在掃描期間,將新出現的請求磁盤I/O的進程放入另一個等待處理的請求隊列。這樣,所有的新請求都被推遲到下一次掃描時處理。

  7.2 磁盤高速緩存

  利用內存中的存儲空間來暫存從磁盤上讀出的一系列盤塊中的信息,這裏的高速緩存是一組在邏輯上屬於磁盤,物理上是駐留在內存中的盤塊,高速緩存在內存中可以分成兩種形式,第一種是在內存中開闢一個單獨的存儲空間來作爲磁盤高速緩存,其大小是固定的,不會受到應用程序的影響。第二種是把所有未利用的內存空間變爲一個緩衝池,供請求分頁系統和磁盤I/O時(作爲磁盤高速緩存)共享。此時的高速緩存大小不再固定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章