IO管理概述
一、IO設備
IO設備管理是操作系統設計中最凌亂也最具挑戰性的部分。由於它包含了很多領域的不同設備以及與設備相關的應用程序,因此很難有一個通用且一直的設計方案。所以在理解設備管理之前,應該先了解具體的IO設備類型。
計算機系統中的IO設備按使用特性可以分為一下類型:
1)人機交互類外部設備,又稱慢速IO設備,用於桶計算機用戶之間交互的設備,如打印機、顯示器、鼠標、鍵盤等。這類設備數據交換速度相對較慢,通常是以字節為單位進行數據交換。
2)存儲設備,用於存儲程序和數據的設備,如磁盤、磁帶、光盤等。這類設備用於數據交換,速度較快,通常以多字節組成的塊為單位進行數據交換。
3)網絡通信設備,用於與遠程設備通信的設備,如各種網絡接口、調制解調器等。其數據交換速度介於外部設備與存儲設備之間。網絡通信設備在使用和管理上與前兩者設備有很大的不同。
按傳輸速率可分為以下幾類
1)低速設備,傳輸速率僅為每秒鍾幾個字節至數百個字節的一類設備,如鍵盤、鼠標等。
2)中速設備,傳輸速率在每秒數千個字節至數萬個字節的一類設備,如行式打印機、激光打印機等。
3)高速設備,傳輸速率在數百個千字節至千兆字節的一類設備,如磁帶機、磁盤機、光盤機等。
按信息交換的單位分類
1)塊設備:由於信息的存取總是以數據塊為單位,所以存儲信息的設備稱為塊設備。它屬於有結構設備,如磁盤等。磁盤設備的基本特征是傳輸速率高,以及可尋址,即對他可隨機地讀寫任意塊。
2)字符設備:用於數據輸入輸出的設備為字符設備,因為其傳輸的基本單位是字符。它屬於無結構類型,如交互式終端機、打印機等。他們的傳輸速率低、不可尋址、並且在輸入輸出時常采用中斷驅動方式。
對於IO設備,有以下三種不同類型的使用方式:
獨占式使用設備。獨占式使用設備是指在申請設備是,如果設備空閑,就將其獨占,不再允許其他進程申請使用,一直等到該設備被釋放才允許其他進程申請使用。例如:打印機。
分時式共享使用設備。獨占式使用設備時,設備利用率低,當設備沒有獨占使用的要求時,可以通過分時共享使用,提高利用率。例如:對磁盤設備的IO操作,各進程每次IO操作請求可以通過分時來交替進行。
以SPOOLing方式使用外部設備。SPOOLing技術是在批處理操作系統時代引入的,即假脫機IO技術。這種技術用於對設備的操作,實質上就是對IO操作進行批處理。具體的內容后面有單獨講解。
采用上面三種使用方式的設備分別稱為獨占設備、共享設備和虛擬設備。
二、IO管理目標
IO設備管理的主要目標有以下三個方面。
方便使用:方便用戶使用外部設備,控制設備工作完成用戶的輸入輸出要求。
提高效率:提高系統的並行工作能力,提高設備的使用效率。
方便控制:提高外圍設備和系統的可靠性和安全性,以使系統能正常工作。
三、IO管理功能
IO設備管理的功能是按照輸入輸出子系統的結構和設備類型制定分配和使用設備的策略,主要包括:設備的分配和回收、外圍設備的啟動、對磁盤的驅動調度、外部設備中斷處理、虛擬設備的實現。
四、IO應用接口
IO應用接口就是從不同的輸入輸出設備中抽象出一些通用類型。每個類型都可以通過一組標准函數(即接口)來訪問。具體的差別被內核模塊(也稱設備驅動程序)所封裝。這些設備驅動程序一方面可以定制,以設和各種設備,另一方面也提供了一些標准接口。
IO應用接口的具體實現方式是:先把IO設備划分為若干種類的通用類型;然后對每一種類型提供一組標准函數來訪問,這里的標准函數就是接口;為每個IO設備提供各自的設備驅動程序,各種設備間的差異就體現在設備驅動程序的不同之中,而對於訪問這些設備的接口卻是按照該設備分數的類型而統一。
划分IO設備所屬的通用類型的依據:
①字符設備還是塊設備。
②順序訪問還是隨機訪問。
③IO傳輸是同步還是異步。
④共享設備還是獨占設備。
⑤操作速度的高低。
⑥訪問模式是讀寫、只讀還是只寫。
五、設備控制器(IO部件)
IO設備通常包括一個機械部件和一個電子部件。為了達到設計的模塊性和通用性,一般將其分開。電子部件成為設備控制器(或適配器),在個人計算機中,通常是一塊插入主板擴充槽的印制電路板;機械部件即設備本身。
由於具體的設備操作涉及硬件接口,且不同的設備有不同的硬件特性和參數,所以這些復雜的操作交由操作系統用戶編寫程序來操作是不實際的。引入控制器后,系統可以通過幾個簡單的參數完成對控制器的操作,而具體的硬件操作則由控制器調用相應的設備接口完成。設備控制器的引入大大簡化了操作系統的設計,特別是有利於計算機系統和操作系統對各類控制器和設備的兼容;同時也實現了主存和設備之間的數據傳輸操作,使CPU從繁重的設備控制操作中解放出來。
設備控制器通過寄存器與CPU通信,在某些計算機上,這些寄存器占用內存地址的一部分,稱為內存映像IO;另一些計算機則采用IO專用地址,寄存器獨立編址。操作系統通過想控制器寄存器寫命令字來執行IO功能。控制器收到一條命令后,CPU可以轉向進行其他工作,而讓設備控制器自行完成具體IO操作。當命令執行完畢后,控制器發出一個中斷信號,操作系統重新獲得CPU的控制權並檢查執行結果,此時,CPU仍舊是從控制器寄存器中讀取信息來獲得執行結果和設備的狀態信息。
設備控制器的主要功能為:
①接收和識別CPU或通道發來的命令,如磁盤控制器能就收讀、寫、查找、搜索等命令。
②實現數據交換,包括設備和控制器之間的數據傳輸;通過數據總線或通道,控制器和主存之間的數據傳輸。
③發現和記錄設備及自身的狀態信息,供CPU處理使用。
④設備地址識別。
為實現上述功能,設備控制器必須包含以下組成部分:
該接口有三類信號線:數據線、地址線和控制線。數據線通常與兩類寄存器相連接:數據存儲器(存放從設備送來的輸入數據或從CPU送來的輸出數據)和控制/狀態寄存器(存放從CPU送來的控制信息或設備的狀態信息)。設備控制器鏈接設備需要相應數量的接口,一個借口鏈接一台設備。每個接口中都存在數據、控制和狀態三種類型的信號。用於實現對設備的控制。它通過一組控制線與處理器交互,對從處理器收到的IO命令進行譯碼。CPU啟動設備時,將啟動命令發送給控制器,並同時通過地址線吧地址發送給控制器,由控制器的IO邏輯對地址進行譯碼,並相應地對所選設備進行控制。
六、IO控制方式
設備管理的主要任務之一是控制設備和內存或處理器之間的數據傳送,外圍設備和內存之間的輸入輸出控制方式有四種,下面分別介紹。
計算機從外部設備讀取數據到存儲器,每次讀一個字的數據。對讀入的每個字,CPU需要對狀態循環檢查,知道確定該字已經在IO控制器的數據寄存器中。在程序IO方式中,由於CPU的高速型和IO設備的低速性,致使CPU的絕大部分時間都處於等待IO設備完成數據IO的循環測試中,造成CPU的極大浪費。在該方式中,CPU之所以要不斷地測試IO設備的狀態,就是因為在CPU中無中斷機構,使IO設備無法向CPU報告它已完成了一個字符的輸入操作。
程序直接控制方式雖然簡單易於實現,但是其缺點也是顯然的,由於CPU和外部設備只能串行工作,導致CPU的利用率相當低。
中斷驅動方式的思想是:允許IO設備主動打斷CPU的運行並請求服務,從而“解放”CPU,使得其向IO控制器發送命令后可以繼續做其他有用的工作。我們從IO控制器和CPU兩個角度分別來看中斷驅動方式的工作過程: 從IO控制器的角度來看,IO控制器從COU接受一個讀命令,然后從外圍設備讀數據。一旦數據讀入到該IO控制器的數據寄存器,便通過控制線給CPU發出一個中斷信號,表示數據已准備好,然后等待CPU請求該數據。IO控制器收到CPU發出的取數據請求后,將數據放到數據總線上,傳到CPU的寄存器中。至此,本次IO操作完成,IO控制器又可以開始下一次IO操作。
從CPU的角度來看,CPU發送讀命令,然后保存當前運行程序的上下文(現場,包括程序計數器及處理器寄存器),轉去執行其他程序。在每個指令周期的末尾,CPU檢查中斷。當有來自IO控制器的中斷時,CPU保存當前正在運行程序的上下文,轉去執行中斷處理程序處理該中斷。這時,CPU從IO控制器讀一個字的數據傳送到寄存器,並存入主存。接着,CPU恢復發出IO命令的程序(或其他程序)的上下文,然后繼續運行。
中斷驅動方式比程序直接控制方式有效,但由於數據中的每個字在存儲器與IO控制器之間的傳輸都必須通過CPU處理,這就導致了中斷驅動方式仍然會花費較多的CPU時間。
中斷驅動方式中,CPU仍然需要主動處理在存儲器和IO設備之間的數據傳送,所以速度還是受限,而直接內存存取(DMA)方式的基本思想是在外圍設備和內存之間開辟直接的數據交換通路,徹底解放CPU。該方式的特點是:
①基本單位是數據塊。
②所傳誦的數據,是從設備直接送入內存的,或者相反。
③僅在傳送一個或多個數據塊的開始和結束時,才需CPU干預,整塊數據的傳送是在DMA控制器的控制下完成的。
為了實現在主機與控制器之間成塊數據的直接交換,必須在DMA控制器中設置如下四類寄存器:
①命令/狀態寄存器(CR)。用於接收從CPU發來的IO命令或有關控制信息,或設備的狀態。
②內存地址寄存器(MAR)。在輸入時,它存放把數據從設備傳送到內存的起始目標地址;在輸出時,它存放由內存到設備的內存源地址。
③數據寄存器(DR)。用於暫存從設備到內存或從內存到設備的數據。
④數據計數器(DC)。存放本次CPU要讀或寫的字節數。
DMA的工作過程是:CPU讀寫數據時,他給IO控制器發出一條命令,啟動DMA控制器,然后繼續其他工作。之后CPU就把這個操作委托給DMA控制器,由該控制器負責處理。DMA控制器直接與存儲器交互,傳送整個數據塊,這個過程不需要CPU參與。當傳送完成后,DMA控制器發送一個中斷信號給處理器。因此,只有在傳送開始和結束時才需要CPU的參與。
DMA控制方式與中斷驅動方式的主要區別是中斷驅動方式在每個數據傳送玩后中斷CPU,而DMA控制方式則是在所要求傳送的一批數據全部傳送結束時中斷CPU;此外,中斷驅動方式數據傳送的是在中斷處理時由CPU控制完成,而DMA控制方式則是在DMA控制器的控制下完成的。
IO通道方式是DMA方式的發展,它可以進一步減少CPU的干預,即把對一個數據塊的讀或寫為一個單位的干預,減少為對一組數據塊的讀或寫及有關的控制盒管理為單位的干預。同時,又可以實現CPU、通道和IO設備三者的並行操作,從而更有效的提高整個系統的資源利用率。
例如,當CPU要完成一組相關的讀或寫操作及有關控制時,只需向IO通道發送一條IO指令,已給出其所要執行的通道程序的首址和要訪問的IO設備,通道接到該指令后,通過執行通道程序便可完成CPU指定的IO任務。
IO通道和一般處理器的區別是:通道指令的類型單一,沒有自己的內存,通道所執行的通道程序釋放在主機內存中的,也就是說通道與CPU共享內存。
IO通道與DMA的區別是:DMA方式需要CPU來控制傳輸的數據塊大小、傳輸的內存位置,而通道方式中這些信息是由通道控制的。另外,每個DMA控制器對應一台設備與內存傳遞數據,而一個通道可以控制多台設備與內存的數據交換。