1. 程式人生 > >作業系統 學習筆記5-輸入輸出管理

作業系統 學習筆記5-輸入輸出管理

第五章 輸入輸出管理

5.1 I/O管理概述

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

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

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

3)網路通訊裝置,用於與遠端裝置通訊的裝置,如各種網路介面、調變解調器等。其資料交換速度介於外部裝置與儲存裝置之間。網路通訊裝置在使用和管理上與前兩者裝置有很大的不同。

按傳輸速率分類

1)低速裝置,傳輸速率僅為每秒鐘幾個位元組至數百個位元組的一類裝置,如鍵盤、滑鼠等。

2)中速裝置,傳輸速率在每秒數千個位元組至數萬個位元組的一類裝置,如行式印表機、鐳射印表機等。

3)高速裝置,傳輸速率在數百個千位元組至千兆位元組的一類裝置,如磁帶機、磁碟機、光碟機等。

按資訊交換的單位分類

1)塊裝置:由於資訊的存取總是以資料塊為單位,所以儲存資訊的裝置稱為塊裝置。它屬於有結構裝置,如磁碟等。磁碟裝置的基本特徵是傳輸速率高,以及可定址,即對他可隨機地讀寫任意塊。

2)字元裝置:用於資料輸入輸出的裝置為字元裝置,因為其傳輸的基本單位是字元。它屬於無結構型別,如互動式終端機、印表機等。他們的傳輸速率低、不可定址、並且在輸入輸出時常採用中斷驅動方式。

對於I/O裝置,有以下三種不同型別的使用方式:

獨佔式使用裝置。獨佔式使用裝置是指在申請裝置時,如果裝置空閒,就將其獨佔,不再允許其他程序申請使用,一直等到該裝置被釋放才允許其他程序申請使用。例如:印表機。

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

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

採用上面三種使用方式的裝置分別稱為獨佔裝置、共享裝置和虛擬裝置。

5.1.2 I/O管理目標

I/O裝置管理的主要目標有以下三個方面。

方便使用:方便使用者使用外部裝置,控制裝置工作完成使用者的輸入輸出要求。

提高效率:提高系統的並行工作能力,提高裝置的使用效率。

方便控制:提高外圍裝置和系統的可靠性和安全性,以使系統能正常工作。

5.1.3 I/O管理功能

I/O裝置管理的功能是按照輸入輸出子系統的結構和裝置型別制定分配和使用裝置的策略,主要包括:裝置的分配和回收。外圍裝置的啟動。對磁碟的驅動排程。外部裝置中斷處理。虛擬裝置的實現。

5.1.4 I/O應用介面

I/O應用介面就是從不同的輸入輸出裝置中抽象出一些通用型別。每個型別都可以通過一組標準函式(即介面)來訪問。具體的差別被核心模組(也稱裝置驅動程式)所封裝。這些裝置驅動程式一方面可以定製,以設和各種裝置,另一方面也提供了一些標準介面。

5.2 I/O控制方式

裝置管理的主要任務之一是控制裝置和記憶體或處理器之間的資料傳送,外圍裝置和記憶體之間的輸入輸出控制方式有四種:

(1)程式直接控制方式

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

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

(2)中斷驅動方式

中斷驅動方式的思想是:允許I/O裝置主動打斷CPU的執行並請求服務,從而“解放”CPU,使得其向I/O控制器傳送命令後可以繼續做其他有用的工作。

我們從I/O控制器和CPU兩個角度分別來看中斷驅動方式的工作過程:         從I/O控制器的角度來看,I/O控制器從CPU接受一個讀命令,然後從外圍裝置讀資料。一旦資料讀入到該I/O控制器的資料暫存器,便通過控制線給CPU發出一箇中斷訊號,表示資料已準備好,然後等待CPU請求該資料。I/O控制器收到CPU發出的取資料請求後,將資料放到資料匯流排上,傳到CPU的暫存器中。至此,本次I/O操作完成,I/O控制器又可以開始下一次I/O操作。

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

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

(3)直接記憶體存取方式(DMA)

中斷驅動方式中,CPU仍然需要主動處理在儲存器和I/O裝置之間的資料傳送,所以速度還是受限,而直接記憶體存取(DMA)方式的基本思想是在外圍裝置和記憶體之間開闢直接的資料交換通路,徹底解放CPU。該方式的特點是:

l  基本單位是資料塊。

l  所傳誦的資料,是從裝置直接送入記憶體的,或者相反。

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

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

l  命令/狀態暫存器(CR)。用於接收從CPU發來的I/O命令或有關控制資訊,或裝置的狀態。

l  記憶體地址暫存器(MAR)。在輸入時,它存放把資料從裝置傳送到記憶體的起始目標地址;在輸出時,它存放由記憶體到裝置的記憶體源地址。

l  資料暫存器(DR)。用於暫存從裝置到記憶體或從記憶體到裝置的資料。

l  資料計數器(DC)。存放本次CPU要讀或寫的位元組數。

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

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

(4)通道控制方式

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

I/O通道和一般處理器的區別是:通道指令的型別單一,沒有自己的記憶體,通道所執行的通道程式釋放在主機記憶體中的,也就是說通道與CPU共享記憶體。

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

5.3裝置控制器(I/O部件)

I/O裝置通常包括一個機械部件和一個電子部件。為了達到設計的模組性和通用性,一般將其分開。電子部件成為裝置控制器(或介面卡)。

裝置控制器的引入大大簡化了作業系統的設計,特別是有利於計算機系統和作業系統對各類控制器和裝置的相容;同時也實現了主存和裝置之間的資料傳輸操作,使CPU從繁重的裝置控制操作中解放出來。

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

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

l  接收和識別CPU或通道發來的命令,如磁碟控制器能就收讀、寫、查詢、搜尋等命令。

l  實現資料交換,包括裝置和控制器之間的資料傳輸;通過資料匯流排或通道,控制器和主存之間的資料傳輸。

l  發現和記錄裝置及自身的狀態資訊,供CPU處理使用。

l  裝置地址識別。

為實現上述功能,裝置控制器必須包含以下組成部分:

1)裝置控制器與處理器的介面:該介面有三類訊號線:資料線、地址線和控制線。資料線通常與兩類暫存器相連線:資料儲存器(存放從裝置送來的輸入資料或從CPU送來的輸出資料)和控制/狀態暫存器(存放從CPU送來的控制資訊或裝置的狀態資訊)。

2)裝置控制器與裝置的介面:裝置控制器連結裝置需要相應數量的介面,一個藉口連結一臺裝置。每個介面中都存在資料、控制和狀態三種類型的訊號。

3)I/O控制邏輯:用於實現對裝置的控制。它通過一組控制線與處理器互動,對從處理器收到的I/O命令進行譯碼。CPU啟動裝置時,將啟動命令傳送給控制器,並同時通過地址線吧地址傳送給控制器,由控制器的I/O邏輯對地址進行譯碼,並相應地對所選裝置進行控制。

5.4 I/O核心子系統

5.4.1 I/O層次結構

I/O實現普遍採用了層次式的結構。其基本思想與計算機網路中的層次結構相同:將系統I/O的功能組織成一系列的層次,每一層完成整個系統功能的一個子集,其實現依賴於下層完成更原始的功能,並遮蔽這些功能的實現細節,從而為上層提供各種服務。

一個比較合理的層次劃分為四個層次的系統結構,各層次及其功能如下:

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

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

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

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

5.4.2 I/O排程概念

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

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

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

5.5快取記憶體與緩衝區

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

作業系統總是用磁碟快取記憶體技術來提高磁碟的I/O速度,對快取記憶體複製的訪問要比原始資料訪問更為高效。

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

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

2)緩衝區(Buffer)

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

1)緩和CPU與I/O 裝置間速度不匹配的矛盾。

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

3)解決基本資料單元大小不匹配的問題。

4)提高CPU和I/O裝置之間的並行性。

其實現方法有:

1)採用硬體緩衝器,但由於成本太高,出一些關鍵部位外,一般情況下不採用硬體緩衝器。

2)採用緩衝區(位於記憶體區域)

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

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

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

2)雙緩衝。又稱緩衝對換。I/O裝置輸入資料時先輸入到緩衝區1,直到緩衝區1滿後才輸入到緩衝區2,此時作業系統可以從緩衝區1中取出資料放入使用者程序,並由CPU計算。雙緩衝的使用提高了處理器和輸入裝置的並行操作的程度。

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

3)迴圈緩衝:包含多個大小相等的緩衝區,每個緩衝區中有一個緩衝區,最後一個緩衝區指標指向第一個緩衝區,多個緩衝區構成一個環形。用於輸入輸出時,還需要有兩個指標in和out。對輸入而言,首先要從裝置接收資料到緩衝區中,in指標指向可以輸入資料的第一個空緩衝區;當執行程序需要資料時,從迴圈緩衝去中去一個裝滿資料的緩衝區,並從此緩衝區中提取資料,out指標指向可以提取資料的第一個滿緩衝區。輸出正好相反。

4)緩衝池:由多個系統共用的緩衝區組成,緩衝區按其使用狀況可以形成三個佇列:空緩衝佇列、裝滿輸入資料的緩衝佇列(輸入佇列)和裝滿輸出資料的緩衝佇列(輸出佇列)。還應具有四種緩衝區:用於收容輸入資料的工作緩衝區、用於提取輸入資料的工作緩衝區、用於收容輸出資料的工作緩衝區、用於提取輸出資料的工作緩衝區。

(4)快取記憶體與緩衝區的對比

快取記憶體是可以儲存複製資料的高速儲存器。訪問快取記憶體比訪問原始資料更高效,速度更快。

快取記憶體和緩衝區的對比

快取記憶體

緩衝區

相同點

都是介於高速裝置和低速裝置之間

區別

存放資料

存放的是低速裝置上的某些資料的複製資料,也就是快取記憶體上有的低速裝置上面必然有

存放的是低速裝置傳遞給高速裝置的資料(或者是高速裝置傳送給低速裝置的資料),而這些資料在低速裝置(或者高速裝置)卻不一定有備份,這些資料在從快取區傳送到髙速裝置(或者低速裝置)

目的

快取記憶體存放的是高速裝置經常要訪問的資料,如果高速裝置要訪問的資料不在快取記憶體中,高速裝置就需要訪問低速裝置

高速裝置和低速裝置的通訊都要經過快取區,高速裝置永遠不會直接去訪問低速裝置

5.6裝置的分配與回收

1)裝置分配概述

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

2)裝置分配的資料結構

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

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

3)裝置分配的策略

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

2)裝置分配方式。

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

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

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

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

(4)裝置分配的安全性

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

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

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

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

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

5.7 SPOOLing(假離線技術)(將獨佔裝置改造成共享裝置的技術)

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

(1)輸入井和輸出井

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

(2)輸入緩衝區和輸出緩衝區

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

(3)輸入程序和輸出程序

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

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

1)由輸出程序在輸出井中為之申請一個空閒磁碟塊區,並將要列印的資料送入其中。

2)輸出程序再為使用者程序申請一張空白的使用者請求打印表,並將使用者的列印要求填入其中,再將該表掛到請求列印佇列中。

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