作業系統的I/O結構

2020-07-16 10:04:38
記憶體只是眾多計算機 I/O 裝置中的一種。作業系統的大部分程式碼專門用於 I/O 管理,這是由於它對系統的可靠性和效能至關重要,也是由於不同裝置具有不同特性。因此,我們首先概述一下 I/O。

每個通用計算機系統由一個 CPU 和多個裝置控制器組成,它們通過共同匯流排連在一起。每個裝置控制器管理某一特定型別的裝置。根據裝置控制器的特性,可以允許多個裝置與其相連。例如,小型計算機系統介面(Small Computer System Interface,SCSI)控制器可連線 7 個或更多的裝置。每個裝置控制器維護一定量的本地緩衝儲存和一組特定用途的暫存器。裝置控制器負責在所控制的外圍裝置與本地緩衝儲存之間進行資料傳遞。

通常,作業系統為每個裝置控制器提供一個裝置驅動程式(device driver)。該裝置驅動程式負責裝置控制器,並且為作業系統的其他部分提供統一的裝置存取介面。

在開始 I/O 時,裝置驅動程式載入裝置控制器的適當暫存器。相應地,裝置控制器檢查這些暫存器內容,以便決定採取什麼操作(如“從鍵盤中讀取一個字元”)。控制器開始從裝置向本地緩衝區傳輸資料。一旦完成資料傳輸,裝置控制器就會通過中斷通知裝置驅動程式,它已完成了操作。然後,裝置驅動程式返回控制到作業系統。對於讀操作,資料或資料指標也會返回;而對於其他操作,裝置驅動程式返回狀態資訊。

這種 I/O 中斷驅動適合移動少量資料,但是對於大量資料的移動,如磁碟 I/O,就會帶來很髙的開銷。為了解決這個問題,可以採用直接記憶體存取(Direct Memory Access,DMA)。

在為這種 I/O 裝置設定好緩衝、指標和計數器之後,裝置控制器可在本地緩衝和記憶體之間傳送整塊的資料,而無需 CPU 的干預。每塊只產生一個中斷,來告知裝置驅動程式操作已完成,而不是像低速裝置那樣每個位元組產生一個中斷。當裝置控制器執行這些操作時,CPU 可以進行其他工作。

現代計算機系統的工作原理
圖 1 現代計算機系統的工作原理