天天看點

作業系統知識點總結(十八)作業系統輸入/輸出(I/O)管理(一)IO分類(二)I/O(輸入/輸出)控制方式(三)I/O子系統的層次結構(四)I/O子系統概述和I/O排程的概念(五)高速緩存與緩沖區(六)輸入/輸出(I/O)裝置配置設定與回收(七)SPOOLing技術(假脫機技術)(八)輸入/輸出(I/O)知識點彙總

(一)IO分類

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

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

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

2) 儲存設備:用于存儲程式和資料的裝置,如磁盤、錄音帶、CD光牒等。這類裝置用于資料交換,速度較快,通常以多位元組組成的塊為機關進行資料交換。

3) 網絡通信裝置:用于與遠端裝置通信的裝置,如各種網絡接口、數據機等。其速度介于前兩類裝置之間。網絡通信裝置在使用和管理上與前兩類裝置也有很大不同。

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

1) 按傳輸速率分類:

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

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操作。

作業系統知識點總結(十八)作業系統輸入/輸出(I/O)管理(一)IO分類(二)I/O(輸入/輸出)控制方式(三)I/O子系統的層次結構(四)I/O子系統概述和I/O排程的概念(五)高速緩存與緩沖區(六)輸入/輸出(I/O)裝置配置設定與回收(七)SPOOLing技術(假脫機技術)(八)輸入/輸出(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控制器的組成。

作業系統知識點總結(十八)作業系統輸入/輸出(I/O)管理(一)IO分類(二)I/O(輸入/輸出)控制方式(三)I/O子系統的層次結構(四)I/O子系統概述和I/O排程的概念(五)高速緩存與緩沖區(六)輸入/輸出(I/O)裝置配置設定與回收(七)SPOOLing技術(假脫機技術)(八)輸入/輸出(I/O)知識點彙總

圖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軟體中,隻要層次間的接口不變,對某一層次中的軟體的修改都不會引起其下層或高層代碼的變更,僅最底層才涉及硬體的具體特性。

作業系統知識點總結(十八)作業系統輸入/輸出(I/O)管理(一)IO分類(二)I/O(輸入/輸出)控制方式(三)I/O子系統的層次結構(四)I/O子系統概述和I/O排程的概念(五)高速緩存與緩沖區(六)輸入/輸出(I/O)裝置配置設定與回收(七)SPOOLing技術(假脫機技術)(八)輸入/輸出(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邏輯對位址進行譯碼,并相應地對所選裝置進行控制。
作業系統知識點總結(十八)作業系統輸入/輸出(I/O)管理(一)IO分類(二)I/O(輸入/輸出)控制方式(三)I/O子系統的層次結構(四)I/O子系統概述和I/O排程的概念(五)高速緩存與緩沖區(六)輸入/輸出(I/O)裝置配置設定與回收(七)SPOOLing技術(假脫機技術)(八)輸入/輸出(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。

作業系統知識點總結(十八)作業系統輸入/輸出(I/O)管理(一)IO分類(二)I/O(輸入/輸出)控制方式(三)I/O子系統的層次結構(四)I/O子系統概述和I/O排程的概念(五)高速緩存與緩沖區(六)輸入/輸出(I/O)裝置配置設定與回收(七)SPOOLing技術(假脫機技術)(八)輸入/輸出(I/O)知識點彙總

圖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執行第一行中的指令的同時,使用者可繼續向第二緩沖區輸入下一行資料。而單緩沖情況下則必須等待一行資料被提取完畢才可輸入下一行的資料。

作業系統知識點總結(十八)作業系統輸入/輸出(I/O)管理(一)IO分類(二)I/O(輸入/輸出)控制方式(三)I/O子系統的層次結構(四)I/O子系統概述和I/O排程的概念(五)高速緩存與緩沖區(六)輸入/輸出(I/O)裝置配置設定與回收(七)SPOOLing技術(假脫機技術)(八)輸入/輸出(I/O)知識點彙總

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

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

作業系統知識點總結(十八)作業系統輸入/輸出(I/O)管理(一)IO分類(二)I/O(輸入/輸出)控制方式(三)I/O子系統的層次結構(四)I/O子系統概述和I/O排程的概念(五)高速緩存與緩沖區(六)輸入/輸出(I/O)裝置配置設定與回收(七)SPOOLing技術(假脫機技術)(八)輸入/輸出(I/O)知識點彙總

圖5-7  雙機通信時緩沖區的設定

3) 循環緩沖

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

循環緩沖用于輸入/輸出時,還需要有兩個指針in和out。對輸入而言,首先要從裝置接收資料到緩沖區中,in指針指向可以輸入資料的第一個空緩沖區;當運作程序需要資料時,從循環緩沖區中取一個裝滿資料的緩沖區,并從此緩沖區中提取資料,out指針指向可以提取資料的第一個滿緩沖區。輸出則正好相反。

4) 緩沖池

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

作業系統知識點總結(十八)作業系統輸入/輸出(I/O)管理(一)IO分類(二)I/O(輸入/輸出)控制方式(三)I/O子系統的層次結構(四)I/O子系統概述和I/O排程的概念(五)高速緩存與緩沖區(六)輸入/輸出(I/O)裝置配置設定與回收(七)SPOOLing技術(假脫機技術)(八)輸入/輸出(I/O)知識點彙總

圖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的指針等。其中,裝置狀态訓示裝置是忙還是空閑,裝置隊列指針指向等待使用該裝置的程序組成的等待隊列,控制表指針指向與該裝置相連接配接的裝置控制器。

作業系統知識點總結(十八)作業系統輸入/輸出(I/O)管理(一)IO分類(二)I/O(輸入/輸出)控制方式(三)I/O子系統的層次結構(四)I/O子系統概述和I/O排程的概念(五)高速緩存與緩沖區(六)輸入/輸出(I/O)裝置配置設定與回收(七)SPOOLing技術(假脫機技術)(八)輸入/輸出(I/O)知識點彙總

圖5-9裝置控制表

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

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

系統裝置表SDT:整個系統隻有一張SDT,如圖5-10c所示。它記錄已連接配接到系統中的所有實體裝置的情況,每個實體裝置占一個表目。

作業系統知識點總結(十八)作業系統輸入/輸出(I/O)管理(一)IO分類(二)I/O(輸入/輸出)控制方式(三)I/O子系統的層次結構(四)I/O子系統概述和I/O排程的概念(五)高速緩存與緩沖區(六)輸入/輸出(I/O)裝置配置設定與回收(七)SPOOLing技術(假脫機技術)(八)輸入/輸出(I/O)知識點彙總

圖 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裝置輸 入的資料。輸出井模拟脫機輸出時的磁盤,用于收容使用者程式的輸出資料。

作業系統知識點總結(十八)作業系統輸入/輸出(I/O)管理(一)IO分類(二)I/O(輸入/輸出)控制方式(三)I/O子系統的層次結構(四)I/O子系統概述和I/O排程的概念(五)高速緩存與緩沖區(六)輸入/輸出(I/O)裝置配置設定與回收(七)SPOOLing技術(假脫機技術)(八)輸入/輸出(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系統結構。此時對控制器和通道的配置設定同樣要經過幾次反複,即若裝置(控制器)所連接配接的第一個控制器(通道)忙時,應檢視其所連接配接的第二個控制器(通道),僅當所有的控制器(通道)都忙時,此次的控制器(通道)配置設定才算失敗,才把程序挂在控制器(通道)的等待隊列上。而隻要有一個控制器(通道)可用,系統便可将它配置設定給程序。

繼續閱讀