【操做系統】設備管理(五)

1、前言算法

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

2、I/O系統緩存

  2.1 I/O設備數據結構

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

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

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

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

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

  一般,設備並非直接與CPU進行通訊,而是與設備控制器通訊,所以,在I/O設備中應該含有與設備控制器之間的接口,在該接口有三種類型的信號,各對應一條信號線。3d

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

  ② 控制信號線,做爲由設備控制器向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操做,這些子通道按照時間片輪轉方式共享主通道

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

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

  因爲通道價格昂貴,計算所設置的通道較少,提升通道的利用率的一種頗有效的方法是增長設備到主機間的通路而不增長通道

3、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個字符的記錄,第5、六條指令共寫含500個字符的記錄。

4、緩衝管理

  在設備管理中,爲了緩和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)過程,將該緩衝區掛在空緩衝隊列末尾。

5、I/O軟件

  5.1 設備獨立性軟件

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

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

  ② 易於實現I/O重定向,用於I/O操做的設備能夠更換,而沒必要改變應用程序。  

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

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

  經過邏輯設備名,系統能夠查找LUT,即可找到物理設備和驅動程序。

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

6、設備分配

  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、磁盤存儲器的管理

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

  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時(做爲磁盤高速緩存)共享。此時的高速緩存大小再也不固定。

8、總結

  本篇學習了設備管理的主要內容,明白了主機如何與設備打交道的細節。也謝謝各位園友的觀看~

相關文章
相關標籤/搜索