操作系統核心原理-7.設備管理:I/O原理
一、I/O的基本知識
1.1 為何要有I/O
前面闡述了操作系統具有進程管理、內存管理、外存管理三大核心功能,但是計算機歸根是為人類服務的,這就要求計算機必須提供某種機制使得人們可以向計算機發出命令或操縱計算機。也就是說計算機與人之間必須存在某種溝通的機制,這種溝通的機制就是計算機的輸入輸出機制。輸入輸出的存在才使得計算機的存在有了意義,就像一個人,如果沒有輸入輸出,那么就不能與外部世界打交道。
?。?)輸入提供的是一個“人→計算機”的通道,即人或外部世界通過輸入向計算機發出命令或提供數據。
(2)輸出提供的是一個“計算機→人”的通道,計算機通過這個通道向人禍外部世界輸出自己的計算機結果。
1.2 I/O管理要達到的目的
簡單來說,I/O就是提供一個人際交互的通道,使得人和計算機能夠進行溝通。具體來說,I/O的目的有以下兩點:
?。?)屏蔽輸入輸出設備的差異:提供一個統一的界面來屏蔽輸入輸出設備的差異
(2)在不同設計之間進行數據表示的轉換:數據能夠在不同設備之間相互轉換而無需用戶操心
二、I/O的硬件和軟件
2.1 I/O的硬件

所有的I/O設備均可以分為兩個大類:塊設備和字符設備。塊設備是以數據塊為單位存儲和傳輸數據的輸入輸出設備,如磁盤、光盤、U盤等;而字符設備則是將數據按照字符為單位來存放和傳輸的設備,如鼠標、鍵盤、打印機等等。
(1)I/O設備的差異性
I/O設備由于種類不同、制造商不同、技術標準不同,其特性可以有巨大的不同。因此,屏蔽這些巨大的不同,使得不同的設備相互共存并不是一件容易的事情。
?。?)設備控制器
I/O設備本身并不是一個不可分割的整體,而是由不同的部件構成。一般來說,一個I/O設備至少可以分為兩部分:機械部分和電子部分。機械部分是設備的物理硬件部分,而電子部分則是設備的控制器??刂破骺梢蕴幚矶鄠€設備,或者說多個同類的設備可以共用一個控制器,如下圖所示:

2.2 I/O的軟件
除了有了I/O的硬件是不夠的,畢竟,對于用戶來說,直接對硬件進行操作十分困難。我們知道,操作系統的角色是魔術師和管理者,魔術是將不同I/O設備的差異屏蔽,使它們看上去似乎是一樣的東西,都具有令人賞心悅目的界面;而管理則是對這些設備進行管理,該獨享的獨享,該共用的共用,需要緩沖的緩沖,并對設備進行實際的驅動(發出讀寫命令)。
具體來說,I/O軟件的目標如下:
?。?)設備獨立:程序對I/O設備的訪問不依賴于設備的物理特征,且在I/O程序的編寫時無須事先指定I/O設備。
?。?)統一命名:設備或文件的命名不依賴于具體的計算機,這樣使用名字將使程序可以在任何機器上運行;
(3)錯誤處理:對輸入輸出過程中產生的數據錯誤進行偵測與糾正,而且糾錯應該在最靠近硬件的層面上進行;
?。?)數據傳輸:實際操控數據在主機和外設之間的傳遞;
?。?)緩沖:為數據傳輸提供一個臨時存放地,然后在方便時將數據拷貝到最后目的地。
(6)共用與獨享:將設備盡量變為共享,以增大資源利用率和降低死鎖發生的概率。例如,將磁盤、打印機變為共享。
三、I/O軟件的分層
為了完成一個繁瑣的工作,人們通常將其分為更小的任務來處理。在I/O軟件上自然也不會例外。I/O軟件通常按照I/O功能進行分層,每一層有提供獨特的功能,并與相鄰的層面設計有標準界面。一般來說,I/O軟件都有以下幾層:
(1)用戶層I/O軟件
(2)設備獨立的操作系統軟件
?。?)設備驅動程序
?。?)中斷服務程序
3.1 中斷服務程序
由于大多數I/O均為中斷驅動,中斷驅動服務程序就稱為絕大部分I/O軟件的不可分割的部分。中斷服務程序由于直接與硬件相關,因此針對不同的I/O硬件,中斷響應的處理方式也不盡相同。因此,中斷服務程序是I/O軟件系統分層里面的最底層。
3.2 設備驅動程序

設備驅動程序顧名思義就是直接驅動I/O設備進行輸入或輸出操作的軟件。它屬于與設備控制器直接聯系的I/O軟件部分,與具體的I/O設備直接相關,并針對每個特定的I/O設備進行優化。
3.3 設備獨立的操作系統軟件
設備驅動程序并不直接從用戶處接收I/O請求,而是通過操作系統軟件獲得的。操作系統在設計時之所以有這層軟件是因為I/O軟件的一部分與設備有關,一部分與設備無關。而如果與設備無關,就可以將這部分共用起來,放置在設備驅動程序之上,為用戶提供一個統一的I/O界面。
3.4 用戶層I/O軟件
設備驅動程序從設備獨立的操作系統軟件層接收I/O請求,而設備獨立的操作系統軟件則從用戶或應用軟件處接收指令。這時,還差一個發出指令的界面,這個界面就是用戶層I/O軟件。我們可能大多數都見過在一段C程序中
count = write(fd, buffer, nbytes)
這一句命令就是用戶層I/O軟件的一部分,write是一個由高級語言提供的庫函數,用戶與這個庫函數打交道,而這個庫函數在編譯之后會變成一系列指令,來完成系統調用過程。
參考資料

鄒恒明,《操作系統之哲學原理》,機械工業出版社

前面闡述了操作系統具有進程管理、內存管理、外存管理三大核心功能,但是計算機歸根是為人類服務的,這就要求計算機必須提供某種機制使得人們可以向計算機發出命令或操縱計算機。也就是說計算機與人之間必須存在某種溝通的機制,這種溝通的機制就是計算機的輸入輸出機制。輸入輸出的存在才使得計算機的存在有了意義,就像一個人,如果沒有輸入輸出,那么就不能與外部世界打交道。

浙公網安備 33010602011771號