1. 程式人生 > >作業系統知識點總結(十八)作業系統輸入/輸出(I/O)管理

作業系統知識點總結(十八)作業系統輸入/輸出(I/O)管理

(一)IO分類

I/O裝置管理是作業系統設計中最凌亂也最具挑戰性的部分。由於它包含了很多領域的不同裝置以及與裝置相關的應用程式,因此很難有一個通用且一致的設計方案。所以在理解裝置管理之前,應該先了解具體的I/O裝置型別。

計算機系統中的I/O裝置按使用特性可分為以下型別:

1) 人機互動類外部裝置:用於同計算機使用者之間互動的裝置,如印表機、顯示器、滑鼠、鍵盤等。這類裝置資料交換速度相對較慢,通常是以位元組為單位進行資料交換。

2) 儲存裝置:用於儲存程式和資料的裝置,如磁碟、磁帶、光碟等。這類裝置用於資料交換,速度較快,通常以多位元組組成的塊為單位進行資料交換。

3) 網路通訊裝置:用於與遠端裝置通訊的裝置,如各種網路介面、調變解調器等。其速度介於前兩類裝置之間。網路通訊裝置在使用和管理上與前兩類裝置也有很大不同。

除了上面最常見的分類方法,I/O裝置還可以按以下方法分類:

1) 按傳輸速率分類:

  • 低速裝置:傳輸速率僅為每秒幾個到數百個位元組的一類裝置,如鍵盤、滑鼠等。
  • 中速裝置:傳輸速率在每秒數千個位元組至數萬個位元組的一類裝置,如行式印表機、 鐳射印表機等。
  • 高速裝置:傳輸速率在數百個千位元組至千兆位元組的一類裝置,如磁帶機、磁碟機、 光碟機等。

2) 按資訊交換的單位分類:

  • 塊裝置:由於資訊的存取總是以資料塊為單位,所以儲存資訊的裝置稱為塊裝置。它屬於有結構裝置,如磁碟等。磁碟裝置的基本特徵是傳輸速率較高,以及可定址,即對它可隨機地讀/寫任一塊。
  • 字元裝置:用於資料輸入/輸出的裝置為字元裝置,因為其傳輸的基本單位是字元。它屬於無結構型別,如互動式終端機、印表機等。它們的基本特徵是傳輸速率低、不可定址,並且在輸入/輸出時常釆用中斷驅動方式。

(二)I/O(輸入/輸出)控制方式

裝置管理的主要任務之一是控制裝置和記憶體或處理機之間的資料傳送,外圍裝置和記憶體之間的輸入/輸出控制方式有四種,下面分別介紹。

程式直接控制方式

如圖5-1(a)所示,計算機從外部裝置讀取資料到儲存器,每次讀一個字的資料。對讀入的每個字,CPU需要對外設狀態進行迴圈檢查,直到確定該字已經在I/O控制器的資料暫存器中。在程式直接控制方式中,由於CPU的高速性和I/O裝置的低速性,致使CPU的絕大部分時間都處於等待I/O裝置完成資料I/O的迴圈測試中,造成了 CPU資源的極大浪費。在該方式中,CPU之所以要不斷地測試I/O裝置的狀態,就是因為在CPU中沒有釆用中斷機構,使I/O裝置無法向CPU報告它已完成了一個字元的輸入操作。

程式直接控制方式雖然簡單易於實現,但是其缺點也是顯而易見的,由於cpu和I/O裝置只能序列工作,導致CPU的利用率相當低。

中斷驅動方式

中斷驅動方式的思想是,允許I/O裝置主動打斷CPU的執行並請求服務,從而“解放”CPU,使得其向I/O控制器傳送讀命令後可以繼續做其他有用的工作。如圖5-1(b)所示,我們從I/O控制器和CPU兩個角度分別來看中斷驅動方式的工作過程:
從I/O控制器的角度來看,I/O控制器從CPU接收一個讀命令,然後從外圍裝置讀資料。一旦資料讀入到該I/O控制器的資料暫存器,便通過控制線給CPU發出一箇中斷訊號,表示資料已準備好,然後等待CPU請求該資料。I/O控制器收到CPU發出的取資料請求後,將資料放到資料匯流排上,傳到CPU的暫存器中。至此,本次I/O操作完成,I/O控制器又可幵始下一次I/O操作。
 


圖5-1  I/O控制方式


從CPU的角度來看,CPU發出讀命令,然後儲存當前執行程式的上下文(現場,包括程式計數器及處理機暫存器),轉去執行其他程式。在每個指令週期的末尾,CPU檢查中斷。當有來自I/O控制器的中斷時,CPU儲存當前正在執行程式的上下文,轉去執行中斷處理程式處理該中斷。這時,CPU從I/O控制器讀一個字的資料傳送到暫存器,並存入主存。接著, CPU恢復發出I/O命令的程式(或其他程式)的上下文,然後繼續執行。

中斷驅動方式比程式直接控制方式有效,但由於資料中的每個字在儲存器與I/O控制器之間的傳輸都必須經過CPU,這就導致了中斷驅動方式仍然會消耗較多的CPU時間。

DMA方式

在中斷驅動方式中,I/O裝置與記憶體之間的資料交換必須要經過CPU中的暫存器,所以速度還是受限,而DMA(直接儲存器存取)方式的基本思想是在I/O裝置和記憶體之間開闢直接的資料交換通路,徹底“解放” CPU。DMA方式的特點是:

  • 基本單位是資料塊。
  • 所傳送的資料,是從裝置直接送入記憶體的,或者相反。
  • 僅在傳送一個或多個數據塊的開始和結束時,才需CPU干預,整塊資料的傳送是在 DMA控制器的控制下完成的。


圖5-2列出了 DMA控制器的組成。
 


圖5-2 DMA控制器的組成


為了實現在主機與控制器之間成塊資料的直接交換,必須在DMA控制器中設定如下四類暫存器:

  1. 命令/狀態暫存器(CR):用於接收從CPU發來的I/O命令或有關控制資訊,或裝置的狀態。
  2. 記憶體地址暫存器(MAR):在輸入時,它存放把資料從裝置傳送到記憶體的起始目標地址;在輸出時,它存放由記憶體到裝置的記憶體源地址。
  3. 資料暫存器(DR):用於暫存從裝置到記憶體,或從記憶體到裝置的資料。
  4. 資料計數器(DC):存放本次CPU要讀或寫的字(節)數。


如圖5-1(c)所示,DMA方式的工作過程是:CPU讀寫資料時,它給I/O控制器發出一條命令,啟動DMA控制器,然後繼續其他工作。之後CPU就把控制操作委託給DMA控制器,由該控制器負責處理。DMA控制器直接與儲存器互動,傳送整個資料塊,每次傳送一個字,這個過程不需要CPU參與。當傳送完成後,DMA控制器傳送一箇中斷訊號給處理器。因此只有在傳送開始和結束時才需要CPU的參與。

DMA控制方式與中斷驅動方式的主要區別是中斷驅動方式在每個資料需要傳輸時中斷

CPU,而DMA控制方式則是在所要求傳送的一批資料全部傳送結束時才中斷CPU;此外,中斷驅動方式資料傳送是在中斷處理時由CPU控制完成的,而DMA控制方式則是在DMA 控制器的控制下完成的。

通道控制方式

I/O通道是指專門負責輸入/輸出的處理機。I/O通道方式是DMA方式的發展,它可以進一步減少CPU的干預,即把對一個數據塊的讀(或寫)為單位的干預,減少為對一組資料塊的讀(或寫)及有關的控制和管理為單位的干預。同時,又可以實現CPU、通道和I/O裝置三者的並行操作,從而更有效地提高整個系統的資源利用率。

例如,當CPU要完成一組相關的讀(或寫)操作及有關控制時,只需向I/O通道傳送一條I/O指令,以給出其所要執行的通道程式的首地址和要訪問的I/O裝置,通道接到該指令後,通過執行通道程式便可完成CPU指定的I/O任務,資料傳送結束時向CPU發中斷請求。I/O通道與一般處理機的區別是:通道指令的型別單一,沒有自己的記憶體,通道所執行

的通道程式是放在主機的記憶體中的,也就是說通道與CPU共享記憶體。

I/O通道與DMA方式的區別是:DMA方式需要CPU來控制傳輸的資料塊大小、傳輸的記憶體位置,而通道方式中這些資訊是由通道控制的。另外,每個DMA控制器對應一臺裝置與記憶體傳遞資料,而一個通道可以控制多臺裝置與記憶體的資料交換。

(三)I/O子系統的層次結構

I/O軟體涉及的面非常廣,往下與硬體有著密切的聯絡,往上又與使用者直接互動,它與程序管理、儲存器管理、檔案管理等都存在著一定的聯絡,即它們都可能需要I/O軟體來實現I/O操作。

為了使複雜的I/O軟體具有清晰的結構,良好的可移植性和適應性,在I/O軟體中普遍釆用了層次式結構,將系統輸入/輸出功能組織成一系列的層次,每一層都利用其下層提供的服務,完成輸入/輸出功能中的某些子功能,並遮蔽這些功能實現的細節,向高層提供服務。在層次式結構的I/O軟體中,只要層次間的介面不變,對某一層次中的軟體的修改都不會引起其下層或高層程式碼的變更,僅最底層才涉及硬體的具體特性。
 


圖5-3  I/O層次結構


一個比較合理的層次劃分如圖5-3所示。整個I/O系統可以看成具有四個層次的系統結構,各層次及其功能如下:

1) 使用者層I/O軟體:實現與使用者互動的介面,使用者可直接呼叫在使用者層提供的、與I/O操作有關的庫函式,對裝置進行操作。

一般而言,大部分的I/O軟體都在作業系統內部,但仍有一小部分在使用者層,包括與使用者程式連結在一起的庫函式,以及完全運行於核心之外的一些程式。使用者層軟體必須通過一組系統呼叫來獲取作業系統服務。   

2) 裝置獨立性軟體:用於實現使用者程式與裝置驅動器的統一介面、裝置命令、裝置保護、以友裝置分配與釋放等,同時為裝置管理和資料傳送提供必要的儲存空間。

裝置獨立性也稱裝置無關性,使得應用程式獨立於具體使用的物理裝置。為了實現裝置獨立性而引入了邏輯裝置和物理裝置這兩個概念。在應用程式中,使用邏輯裝置名來請求使用某類裝置;而在系統實際執行時,必須將邏輯裝置名對映成物理裝置名使用。

使用邏輯裝置名的好處是:

  • 增加裝置分配的靈活性;
  • 易於實現I/O重定向,所謂I/O重定向,是指用於I/O操作的裝置可以更換(即重定向),而不必改變應用程式。


為了實現裝置獨立性,必須再在驅動程式之上設定一層裝置獨立性軟體。總的來說,裝置獨立性軟體的主要功能可分以為以下兩個方面:

  • 執行所有裝置的公有操作。包括:對裝置的分配與回收;將邏輯裝置名對映為物理裝置名;對裝置進行保護,禁止使用者直接訪問裝置;緩衝管理;差錯控制;提供獨立於裝置的大小統一的邏輯塊,遮蔽裝置之間資訊交換單位大小和傳輸速率的差異。
  • 向用戶層(或檔案層)提供統一介面。無論何種裝置,它們向用戶所提供的介面應該是相同的。例如,對各種裝置的讀/寫操作,在應用程式中都統一使用read/write命令等。


3) 裝置驅動程式:與硬體直接相關,負責具體實現系統對裝置發出的操作指令,驅動 I/O裝置工作的驅動程式。

通常,每一類裝置配置一個裝置驅動程式,它是I/O程序與裝置控制器之間的通訊程式,常以程序形式存在。裝置驅動程式向上層使用者程式提供一組標準介面,裝置具體的差別被裝置驅動程式所封裝,用於接收上層軟體發來的抽象I/O要求,如read和write命令,轉換為具體要求後,傳送給裝置控制器,控制I/O裝置工作;它也將由裝置控制器發來的訊號傳送給上層軟體。從而為I/O核心子系統隱藏裝置控制器之間的差異。

4)中斷處理程式:用於儲存被中斷程序的CPU環境,轉入相應的中斷處理程式進行處理,處理完並恢復被中斷程序的現場後,返回到被中斷程序。

中斷處理層的主要任務有:進行程序上下文的切換,對處理中斷訊號源進行測試,讀取裝置狀態和修改程序狀態等。由於中斷處理與硬體緊密相關,對使用者而言,應儘量加以遮蔽,故應放在作業系統的底層,系統的其餘部分儘可能少地與之發生聯絡。

5) 硬體裝置:I/O裝置通常包括一個機械部件和一個電子部件。為了達到設計的模組性和通用性,一般將其分開:電子部件稱為裝置控制器(或介面卡),在個人計算機中,通常是一塊插入主機板擴充槽的印刷電路板;機械部件則是裝置本身。

裝置控制器通過暫存器與CPU通訊,在某些計算機上,這些暫存器佔用記憶體地址的一部分,稱為記憶體映像I/O;另一些計算機則釆用I/O專用地址,暫存器獨立編址。作業系統通過向控制器暫存器寫命令字來執行I/O功能。控制器收到一條命令後,CPU可以轉向進行其他工作,而讓裝置控制器自行完成具體的I/O操作。當命令執行完畢後,控制器發出一箇中斷訊號,作業系統重新獲得CPU的控制權並檢查執行結果,此時,CPU仍舊是從控制器暫存器中讀取資訊來獲得執行結果和裝置的狀態資訊。

裝置控制器的主要功能為:

  • 接收和識別CPU或通道發來的命令,如磁碟控制器能接收讀、寫、查詢等命令。
  • 實現資料交換,包括裝置和控制器之間的資料傳輸;通過資料匯流排或通道,控制器和主存之間的資料傳輸。
  • 發現和記錄裝置及自身的狀態資訊,供CPU處理使用。
  • 裝置地址識別。


為實現上述功能,裝置控制器(如圖5-4)必須包含以下組成部分:

  • 裝置控制器與CPU的介面。該介面有三類訊號線:資料線、地址線和控制線。資料線通常與兩類暫存器相連線:資料暫存器(存放從裝置送來的輸入資料或從CPU送來的輸出資料)和控制/狀態暫存器(存放從CPU送來的控制資訊或裝置的狀態資訊)。
  • 裝置控制器與裝置的介面。裝置控制器連線裝置需要相應數量的介面,一個介面連線一臺裝置。每個介面中都存在資料、控制和狀態三種類型的訊號。
  • I/O控制邏輯。用於實現對裝置的控制。它通過一組控制線與CPU互動,對從CPU收到的I/O命令進行譯碼。CPU啟動裝置時,將啟動命令傳送給控制器,同時通過地:址線把地址傳送給控制器,由控制器的I/O邏輯對地址進行譯碼,並相應地對所選裝置進行控制。

 


圖5-4  裝置控制器的組成

(四)I/O子系統概述和I/O排程的概念

I/O子系統概述

由於I/O裝置種類繁多,功能和傳輸速率差異巨大,需要多種方法來進行裝置控制。這些方法共同組成了作業系統核心的I/O子系統,它將核心的其他方面從繁重的I/O裝置管理中解放出來。I/O核心子系統提供的服務主要有I/O排程、緩衝與快取記憶體、裝置分配與回收、假離線、裝置保護和差錯處理等。

I/O排程概念

I/O排程就是確定-個好的順序來執行這些I/O請求。應用程式所釋出的系統呼叫的順序不一定總是最佳選擇,所以需要I/o排程來改善系統整體效能,使程序之間公平地共享裝置訪問,減少I/O完成所需要的平均等待時間。

作業系統開發人員通過為每個裝置維護一個請求佇列來實現排程。當一個應用程式執行阻塞I/O系統呼叫時,該請求就加到相應裝置的佇列上。I/O排程會重新安排佇列順序以改善系統總體效率和應用程式的平均響應時間。

I/O子系統還可以使用主存或磁碟上的儲存空間的技術,如緩衝、高速緩衝、假離線等,來改善計算機效率。

(五)快取記憶體與緩衝區

1. 磁碟快取記憶體(Disk Cache)

作業系統中使用磁碟快取記憶體技術來提高磁碟的I/O速度,對快取記憶體複製的訪問要比原始資料訪問更為高效。例如,正在執行的程序的指令既儲存在磁碟上,也儲存在實體記憶體上,也被複制到CPU的二級和一級快取記憶體中。

不過,磁碟快取記憶體技術不同於通常意義下的介於CPU與記憶體之間的小容量高速儲存器,而是指利用記憶體中的儲存空間來暫存從磁碟中讀出的一系列盤塊中的資訊。因此,磁碟快取記憶體在邏輯上屬於磁碟,物理上則是駐留在記憶體中的盤塊。

快取記憶體在記憶體中分為兩種形式:一種是在記憶體中開闢一個單獨的儲存空間作為磁速快取,大小固定;另一種是把未利用的記憶體空間作為一個緩沖池,供請求分頁系統和磁碟I/O時共享。

2. 緩衝區(Buffer)

在裝置管理子系統中,引入緩衝區的目的主要有:

  • 緩和CPU與I/O裝置間速度不匹配的矛盾。
  • 減少對CPU的中斷頻率,放寬對CPU中斷響應時間的限制。
  • 解決基本資料單元大小(即資料粒度)不匹配的問題。
  • 提高CPU和I/O裝置之間的並行性。


其實現方法有:

  • 釆用硬體緩衝器,但由於成本太高,除一些關鍵部位外,一般不釆用硬體緩衝器
  • 釆用緩衝區(位於記憶體區域)。


根據系統設定緩衝器的個數,緩衝技術可以分為:

1) 單緩衝

在裝置和處理機之間設定一個緩衝區。裝置和處理機交換資料時,先把被交換資料寫入緩衝區,然後需要資料的裝置或處理機從緩衝區取走資料。

如圖5-5所示,在塊裝置輸入時,假定從磁碟把一塊資料輸入到緩衝區的時間為T,作業系統將該緩衝區中的資料傳送到使用者區的時間為M,而CPU對這一塊資料處理的時間為 C。由於T和C是可以並行的,當T>C時,系統對每一塊資料的處理時間為M十T,反之則為M+C,故可把系統對每一塊資料的處理時間表示為Max(C, T)+M。
 


圖5-5  單緩衝工作示意圖

2) 雙緩衝

根據單緩衝的特點,CPU在傳送時間M內處於空閒狀態,由此引入雙緩衝。 I/O裝置輸入資料時先裝填到緩衝區1,在緩衝區1填滿後才開始裝填緩衝區2,與此同時處理機可以從緩衝區1中取出資料放入使用者程序處理,當緩衝區1中的資料處理完後,若緩衝區2已填滿,則處理機又從緩衝區2中取出資料放入使用者程序處理,而I/O裝置又可以裝填緩衝區1。雙緩衝機制提高了處理機和輸入裝置的並行操作的程度。

如圖5-6所示,系統處理一塊資料的時間可以粗略地認為是MAC(C, T)。如果C<T,可使塊裝置連續輸入(圖中所示情況);如果C>T,則可使CPU不必等待裝置輸入。對於字元裝置,若釆用行輸入方式,則釆用雙緩衝可使使用者在輸入完第一行之後,在CPU執行第一行中的命令的同時,使用者可繼續向第二緩衝區輸入下一行資料。而單緩衝情況下則必須等待一行資料被提取完畢才可輸入下一行的資料。
 


圖5-6  雙緩衝工作示意圖


如果兩臺機器之間通訊僅配置了單緩衝,如圖5-7(a)所示。那麼,它們在任一時刻都只能實現單方向的資料傳輸。例如,只允許把資料從A機傳送到B機,或者從B機傳送到A 機,而絕不允許雙方同時向對方傳送資料。為了實現雙向資料傳輸,必須在兩臺機器中都設定兩個緩衝區,一個用做傳送緩衝區,另一個用做接收緩衝區,如圖5-7(b)所示。
 


圖5-7  雙機通訊時緩衝區的設定

3) 迴圈緩衝

包含多個大小相等的緩衝區,每個緩衝區中有一個連結指標指向下一個緩衝區,最後一個緩衝區指標指向第一個緩衝區,多個緩衝區構成一個環形。

迴圈緩衝用於輸入/輸出時,還需要有兩個指標in和out。對輸入而言,首先要從裝置接收資料到緩衝區中,in指標指向可以輸入資料的第一個空緩衝區;當執行程序需要資料時,從迴圈緩衝區中取一個裝滿資料的緩衝區,並從此緩衝區中提取資料,out指標指向可以提取資料的第一個滿緩衝區。輸出則正好相反。

4) 緩衝池

由多個系統公用的緩衝區組成,緩衝區按其使用狀況可以形成三個佇列:空緩衝佇列、裝滿輸入資料的緩衝佇列(輸入佇列)和裝滿輸出資料的緩沖佇列(輸出佇列)。還應具有四種緩衝區:用於收容輸入資料的工作緩衝區、用於提取輸入資料的工作緩衝區、 用於收容輸出資料的工作緩衝區及用於提取輸出資料的工作緩衝區,如圖5-8所示。
 


圖5-8  緩衝區的工作方式


當輸入程序需要輸入資料時,便從空緩衝佇列的隊首摘下一個空緩衝區,把它作為收容輸入工作緩衝區,然後把輸入資料輸入其中,裝滿後再將它掛到輸入佇列隊尾。當計算程序需要輸入資料時,便從輸入佇列取得一個緩衝區作為提取輸入工作緩衝區,計算程序從中提取資料,資料用完後再將它掛到空緩衝佇列尾。當計算程序需要輸出資料時,便從空緩衝佇列的隊首取得一個空緩衝區,作為收容輸出工作緩衝區,當其中裝滿輸出資料後,再將它掛到輸出佇列隊尾。當要輸出時,由輸出程序從輸出佇列中取得一個裝滿輸出資料的緩衝區,作為提取輸出工作緩衝區,當資料提取完後,再將它掛到空緩衝佇列的隊尾。

3. 快取記憶體與緩衝區的對比

快取記憶體是可以儲存資料拷貝的高速儲存器,訪問快取記憶體比訪問原始資料更高效速度更快。其對比見表5-1。

 

表5-1 快取記憶體和緩衝區的對比
  快取記憶體 緩衝區
  相同點 都是介於高速裝置和低速裝置之間
區別 存放資料 存放的是低速裝置上的某些資料的複製資料,也就是快取記憶體上有的低速裝置上面必然有 存放的是低速裝置傳遞給高速裝置的資料(或者是高速裝置傳送給低速裝置的資料),而這些資料在低速裝置(或者高速裝置)卻不一定有備份,這些資料在從快取區傳送到髙速裝置(或者低速裝置)
目的 快取記憶體存放的是高速裝置經常要訪問的資料,如果高速裝置要訪問的資料不在快取記憶體中,高速裝置就需要訪問低速裝置 高速裝置和低速裝置的通訊都要經過快取區,高速裝置永遠不會直接去訪問低速裝置

(六)輸入/輸出(I/O)裝置分配與回收

1. 裝置分配概述

裝置分配是指根據使用者的I/O請求分配所需的裝置。分配的總原則是充分發揮裝置的使用效率,儘可能地讓裝置忙碌,又要避免由於不合理的分配方法造成程序死鎖。從裝置的特性來看,釆用下述三種使用方式的裝置分別稱為獨佔裝置、共享裝置和虛擬裝置三類。

1) 獨佔式使用裝置。指在申請裝置時,如果裝置空閒,就將其獨佔,不再允許其他程序申請使用,一直等到該裝置被釋放才允許其他程序申請使用。例如,印表機,在使用它列印時,只能獨佔式使用,否則在同一張紙上交替列印不同任務的內容,無法正常閱讀。

2) 分時式共享使用裝置。獨佔式使用裝置時,裝置利用率很低,當裝置沒有獨佔使用的要求時,可以通過分時共享使用,提高利用率。例如,對磁碟裝置的I/O操作,各程序的每次I/O操作請求可以通過分時來交替進行。

3) 以SPOOLing方式使用外部裝置。SPOOLing技術是在批處理作業系統時代引入的,即假離線I/O技術。這種技術用於對裝置的操作,實質上就是對I/O操作進行批處理。

2. 裝置分配的資料結構

裝置分配依據的主要資料結構有裝置控制表(DCT)、控制器控制表(COCT)、通道控制表(CHCT)和系統裝置表(SDT),各資料結構功能如下:

裝置控制表DCT:系統為每一個裝置配置一張DCT,如圖5-9所示。它用於記錄裝置的特性以及與I/O控制器連線的情況。DCT包括裝置識別符號、裝置型別、裝置狀態、指向控制器控制表COCT的指標等。其中,裝置狀態指示裝置是忙還是空閒,裝置佇列指標指向等待使用該裝置的程序組成的等待佇列,控制表指標指向與該裝置相連線的裝置控制器。
 


圖5-9裝置控制表


控制器控制表COCT:每個控制器都配有一張COCT,如圖5-10a所示。它反映裝置控制器的使用狀態以及和通道的連線情況等。

通道控制表CHCT:每個通道配有一張CHCT,如圖5-10b所示。

系統裝置表SDT:整個系統只有一張SDT,如圖5-10c所示。它記錄已連線到系統中的所有物理裝置的情況,每個物理裝置佔一個表目。
 


圖 5-10  COCT、CHCT 和 SDT


由於在多道程式系統中,程序數多於資源數,會引起資源的競爭。因此,要有一套合理的分配原則,主要考慮的因素有:I/O裝置的固有屬性,I/O裝置的分配演算法,裝置分配的安全性以及裝置獨立性。

3. 裝置分配的策略

1) 裝置分配原則:裝置分配應根據裝置特性、使用者要求和系統配置情況。分配的總原則既要充分發揮裝置的使用效率,又要避免造成程序死鎖,還要將使用者程式和具體裝置隔離開。

2) 裝置分配方式:裝置分配方式有靜態分配和動態分配兩種。

靜態分配主要用於對獨佔裝置的分配,它在使用者作業開始執行前,由系統一次性分配該作業所要求的全部裝置、控制器(和通道)。一旦分配後,這些裝置、控制器(和通道)就一直為該作業所佔用,直到該作業被撤銷。靜態分配方式不會出現死鎖,但裝置的使用效率低。因此,靜態分配方式弁不符合分配的總原則。

動態分配是在程序執行過程中根據執行需要進行。當程序需要裝置時,通過系統呼叫命令向系統提出裝置請求,由系統按照事先規定的策略給程序分配所需要的裝置、I/O控制器,一旦用完之後,便立即釋放。動態分配方式有利於提高裝置的利用率,但如果分配演算法使用不當,則有可能造成程序死鎖。

3) 裝置分配演算法:常用的動態裝置分配演算法有先請求先分配、優先順序高者優先等。

對於獨佔裝置,既可以釆用動態分配方式也可以靜態分配方式,往往釆用靜態分配方式,即在作業執行前,將作業所要用的這一類裝置分配給它。共享裝置可被多個程序所共享,一般釆用動態分配方式,但在每個I/O傳輸的單位時間內只被一個程序所佔有,通常釆用先請求先分配和優先順序高者先分的分配演算法。

4. 裝置分配的安全性

裝置分配的安全性是指裝置分配中應防止發生程序死鎖。

1) 安全分配方式:每當程序發出I/O請求後便進入阻塞狀態,直到其I/O操作完成時才被喚醒。這樣,一旦程序已經獲得某種裝置後便阻塞,不能再請求任何資源,而且在它阻塞時也不保持任何資源。i點是裝置分配安全;缺點是CPU和I/O裝置是序列工作的(對同一程序而言)。

2) 不安全分配方式:程序在發出I/O請求後繼續執行,需要時又發出第二個、第三個 I/O請求等。僅當程序所請求的裝置已被另一程序佔用時,才進入阻塞狀態。優點是一個程序可同時操作多個裝置,從而使程序推進迅速;缺點是這種裝置分配有可能產生死鎖。

5. 邏輯裝置名到物理裝置名的對映

為了提高裝置分配的靈活性和裝置的利用率、方便實現I/O重定向,因此引入了裝置獨立性。裝置獨立性是指應用程式獨立於具體使用的物理裝置。

為了實現裝置獨立性,在應用程式中使用邏輯裝置名來請求使用某類裝置,在系統中設定一張邏輯裝置表(Logical Unit Table, LUT),用於將邏輯裝置名對映為物理裝置名。LUT 表項包括邏輯裝置名、物理裝置名和裝置驅動程式入口地址;當程序用邏輯裝置名來請求分配裝置時,系統為它分配相應的物理裝置,並在LUT中建立一個表項,以後程序再利用邏輯裝置名請求I/0操作時,系統通過查詢LUT來尋找相應的物理裝置和驅動程式。

在系統中可釆取兩種方式建立邏輯裝置表:

  • 在整個系統中只設置一張LUT。這樣,所有程序的裝置分配情況都記錄在這張表中,故不允許有相同的邏輯裝置名,主要適用於單使用者系統中。
  • 為每個使用者設定一張LUT。當用戶登入時,系統便為該使用者建立一個程序,同時也為之建立一張LUT,並將該表放入程序的PCB中。

(七)SPOOLing技術(假離線技術)

為了緩和CPU的高速性與I/O裝置低速性之間的矛盾而引入了離線輸入/輸出技術。該 技術是利用專門的外圍控制機,將低速I/O裝置上的資料傳送到高速磁碟上;或者相反。 SPOOLing的意思是外部裝置同時聯機操作,又稱為假離線輸入/輸出操作,是作業系統中釆 用的一項將獨佔裝置改造成共享裝置的技術。

SPOOLing系統組成如圖5-11所示。

輸入井和輸出井

在磁碟上開闢出的兩個儲存區域。輸入井模擬離線輸入時的磁碟,用於收容I/O裝置輸 入的資料。輸出井模擬離線輸出時的磁碟,用於收容使用者程式的輸出資料。
 


圖5-11  SPOOLing系統的組成

輸入緩衝區和輸出緩衝區

在記憶體中開闢的兩個緩衝區。輸入緩衝區用於暫存由輸入裝置送來的資料,以後再傳送 到輸入井。輸出緩衝區用於暫存從輸出井送來的資料,以後再傳送到輸出裝置。

輸入程序和輸出程序

輸入程序模擬離線輸入時的外圍控制機,將使用者要求的資料從輸入機通過輸入緩衝區再 送到輸入井。當CPU需要輸入資料時,直接將資料從輸入井讀入記憶體。輸出程序模擬離線 輸出時的外圍控制機,把使用者要求輸出的資料先從記憶體送到輸出並,待輸出裝置空閒時,再 將輸出井中的資料經過輸出緩衝區送到輸出裝置。

共享印表機是使用SPOOLing技術的一個例項,這項技術已被廣泛地用於多使用者系統和 區域網絡中。當用戶程序請求列印輸出時,SPOOLing系統同意為它列印輸出,但並不真正 立即把印表機分配給該使用者程序,而只為它做兩件事:

  • 由輸出程序在輸出井中為之申請一個空閒磁碟塊區,並將要列印的資料送入其中。
  • 輸出程序再為使用者程序申請一張空白的使用者請求打印表,並將使用者的列印要求填入 其中,再將該表掛到請求列印佇列上。


SPOOLing系統的主要特點有:提高了 I/O的速度;將獨佔裝置改造為共享裝置;實現 了虛擬裝置功能。

(八)輸入/輸出(I/O)知識點彙總

1) 分配裝置。首先根據I/O請求中的物理裝置名查詢系統裝置表(SDT),從中找出該裝置的DCT,再根據DCT中的裝置狀態欄位,可知該裝置是否正忙。若忙,便將請求I/O 程序的PCB掛在裝置佇列上;空閒則按照一定演算法計算裝置分配的安全性,安全則將裝置分配給請求程序,否則仍將其PCB掛到裝置佇列。

2) 分配控制器。系統把裝置分配給請求I/O的程序後,再到其DCT中找出與該裝置連線的控制器的COCT,從COCT中的狀態欄位中可知該控制器是否忙碌。若忙,便將請求I/O 程序的PCB掛在該控制器的等待佇列上;空閒便將控制器分配給程序。

3) 分配通道。在該COCT中又可找到與該控制器連線的通道的CHCT,再根據CHCT 內的狀態資訊,可知該通道是否忙碌。若忙,便將請求I/O的程序掛在該通道的等待佇列上;空閒便將該通道分配給程序。只有在上述三者都分配成功時,這次裝置的分配才算成功。然後,便可啟動該I/O裝置進行資料傳送。

為使獨佔裝置的分配具有更強的靈活性,提高分配的成功率,還可以從以下兩方面對基本的裝置分配程式加以改進:

  • 增加裝置的獨立性。程序使用邏輯裝置名請求I/O。這樣,系統首先從SDT中找出第一個該類裝置的DCT。若該裝置忙,又查詢第二個該類裝置的DCT。僅當所有該類裝置都忙時,才把程序掛在該類裝置的等待佇列上;只要有一個該類裝置可用,系統便進一步計算分配該裝置的安全性。
  • 考慮多通路情況。為防止I/O系統的“瓶頸”現象,通常釆用多通路的I/O系統結構。此時對控制器和通道的分配同樣要經過幾次反覆,即若裝置(控制器)所連線的第一個控制器(通道)忙時,應檢視其所連線的第二個控制器(通道),僅當所有的控制器(通道)都忙時,此次的控制器(通道)分配才算失敗,才把程序掛在控制器(通道)的等待佇列上。而只要有一個控制器(通道)可用,系統便可將它分配給程序。