天天看點

作業系統核心原理-7.裝置管理:I/O原理

作業系統核心原理-7.裝置管理:I/O原理

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

一、I/O的基本知識

1.1 為何要有I/O

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

  (1)輸入提供的是一個“人→計算機”的通道,即人或外部世界通過輸入向計算機發出指令或提供資料。

  (2)輸出提供的是一個“計算機→人”的通道,計算機通過這個通道向人禍外部世界輸出自己的計算機結果。

1.2 I/O管理要達到的目的

  簡單來說,I/O就是提供一個人際互動的通道,使得人和計算機能夠進行溝通。具體來說,I/O的目的有以下兩點:

  (1)屏蔽輸入輸出裝置的差異:提供一個統一的界面來屏蔽輸入輸出裝置的差異

  (2)在不同設計之間進行資料表示的轉換:資料能夠在不同裝置之間互相轉換而無需使用者操心

二、I/O的硬體和軟體

2.1 I/O的硬體

作業系統核心原理-7.裝置管理:I/O原理

  所有的I/O裝置均可以分為兩個大類:塊裝置和字元裝置。塊裝置是以資料塊為機關存儲和傳輸資料的輸入輸出裝置,如磁盤、CD光牒、U盤等;而字元裝置則是将資料按照字元為機關來存放和傳輸的裝置,如滑鼠、鍵盤、列印機等等。

  (1)I/O裝置的差異性

  I/O裝置由于種類不同、制造商不同、技術标準不同,其特性可以有巨大的不同。是以,屏蔽這些巨大的不同,使得不同的裝置互相共存并不是一件容易的事情。

  (2)裝置控制器

  I/O裝置本身并不是一個不可分割的整體,而是由不同的部件構成。一般來說,一個I/O裝置至少可以分為兩部分:機械部分和電子部分。機械部分是裝置的實體硬體部分,而電子部分則是裝置的控制器。控制器可以處理多個裝置,或者說多個同類的裝置可以共用一個控制器,如下圖所示:

作業系統核心原理-7.裝置管理:I/O原理

2.2 I/O的軟體

  除了有了I/O的硬體是不夠的,畢竟,對于使用者來說,直接對硬體進行操作十分困難。我們知道,作業系統的角色是魔術師和管理者,魔術是将不同I/O裝置的差異屏蔽,使它們看上去似乎是一樣的東西,都具有令人賞心悅目的界面;而管理則是對這些裝置進行管理,該獨享的獨享,該共用的共用,需要緩沖的緩沖,并對裝置進行實際的驅動(發出讀寫指令)。

  具體來說,I/O軟體的目标如下:

  (1)裝置獨立:程式對I/O裝置的通路不依賴于裝置的實體特征,且在I/O程式的編寫時無須事先指定I/O裝置。

  (2)統一命名:裝置或檔案的命名不依賴于具體的計算機,這樣使用名字将使程式可以在任何機器上運作;

  (3)錯誤處理:對輸入輸出過程中産生的資料錯誤進行偵測與糾正,而且糾錯應該在最靠近硬體的層面上進行;

  (4)資料傳輸:實際操控資料在主機和外設之間的傳遞;

  (5)緩沖:為資料傳輸提供一個臨時存放地,然後在友善時将資料拷貝到最後目的地。

  (6)共用與獨享:将裝置盡量變為共享,以增大資源使用率和降低死鎖發生的機率。例如,将磁盤、列印機變為共享。

三、I/O軟體的分層

  為了完成一個繁瑣的工作,人們通常将其分為更小的任務來處理。在I/O軟體上自然也不會例外。I/O軟體通常按照I/O功能進行分層,每一層有提供獨特的功能,并與相鄰的層面設計有标準界面。一般來說,I/O軟體都有以下幾層:

  (1)使用者層I/O軟體

  (2)裝置獨立的作業系統軟體

  (3)裝置驅動程式

  (4)中斷服務程式

3.1 中斷服務程式

  由于大多數I/O均為中斷驅動,中斷驅動服務程式就稱為絕大部分I/O軟體的不可分割的部分。中斷服務程式由于直接與硬體相關,是以針對不同的I/O硬體,中斷響應的處理方式也不盡相同。是以,中斷服務程式是I/O軟體系統分層裡面的最底層。

3.2 裝置驅動程式

作業系統核心原理-7.裝置管理:I/O原理

  裝置驅動程式顧名思義就是直接驅動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是一個由進階語言提供的庫函數,使用者與這個庫函數打交道,而這個庫函數在編譯之後會變成一系列指令,來完成系統調用過程。

參考資料

作業系統核心原理-7.裝置管理:I/O原理

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

作者:周旭龍

出處:http://edisonchou.cnblogs.com

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連結。

繼續閱讀