操作系統(五)輸入/輸出(I/O)管理
- 一、I/O控制器
- 二、I/O控制方式
- 程序直接控制方式
- 中斷驅動方式
- DMA方式
- 通道控制方式
- I/O軟件層次結構
- 假脫機技術
- 設備的分配與回收
- 緩沖區
- 單緩沖
- 雙緩沖
- 循環緩沖區
- 緩沖池
一、I/O控制器
I/O設備由機械部件和電子部件組成
機械部件:I/O設備的機械部件主要用來執行具體I/O操作。
電子部件:I/O設備的電子部件通常是一塊插入主板擴充槽的印刷電路板。
CPU無法直接控制I/O設備的機械部件,因此I/O設備還要有一個電子部件作為CPU和I/O設備機械部件之間的“中介”,用于實現CPU對設備的控制。這個電子部件就是I/O控制器,又稱設備控制器。CPU可控制I/O控制器,又由I/O控制器來控制設備的機械部件。
①一個I/O控制器可能會對應多個設備;
②數據寄存器、控制寄存器、狀態寄存器可能有多個(如:每個控制/狀態寄存器對應一個具體的設備),且這些寄存器都要有相應的地址,才能方便CPU操作。有的計算機會讓這些寄存器占用內存地址的一部分,稱為內存映像I/O;另一些計算機則采用I/O專用地址,即寄存器獨立編址。
二、I/O控制方式
程序直接控制方式
中斷驅動方式
引入中斷機制。由于I/O設備速度很慢,因此在CPU發出讀/寫命令后,可將等待I/O的進程阻塞,先切換到別的進程執行。當I/O完成后,控制器會向CPU發出一個中斷信號,CPU檢測到中斷信號后,會保存當前進程的運行環境信息,轉去執行中斷處理程序處理該中斷。處理中斷的過程中,CPU從I/O控制器讀一個字的數據傳送到CPU寄存器,再寫入主存。接著,CPU恢復等待I/O的進程(或其他進程)的運行環境,然后繼續執行。
DMA方式
通道控制方式
I/O軟件層次結構
用戶層軟件:用戶層軟件實現了與用戶交互的接口,用戶可直接使用該層提供的、與I/O操作相關的庫函數對設備進行操作。用戶層軟件將用戶請求翻譯成格式化的I/O請求,并通過“系統調用”請求操作系統內核的服務。
設備獨立性軟件:又稱設備無關性軟件。與設備的硬件特性無關的功能幾乎都在這一層實現。
- 向上層提供統一的調用接口(如 read/write 系統調用)
- 設備的保護原理類似與文件保護。設備被看做是一種特殊的文件,不同用戶對各個文件的訪問權限是不一樣的,同理,對設備的訪問權限也不一樣。
- 差錯處理,設備獨立性軟件需要對一些設備的錯誤進行處理
- 設備的分配與回收
- 數據緩沖區管理,可以通過緩沖技術屏蔽設備之間數據交換單位大小和傳輸速度的差異
- 建立邏輯設備名到物理設備名的映射關系;根據設備類型選擇調用相應的驅動程序。
操作系統系統可以采用兩種方式管理邏輯設備表(LUT):
第一種方式,整個系統只設置一張LUT,這就意味著所有用戶不能使用相同的邏輯設備名,因此這種方式只適用于單用戶操作系統。
第二種方式,為每個用戶設置一張LUT,各個用戶使用的邏輯設備名可以重復,適用于多用戶操作系統。系統會在用戶登錄時為其建立一個用戶管理進程,而LUT就存放在用戶管理進程的PCB中。
設備驅動程序:主要負責對硬件設備的具體控制,將上層發出的一系列命令(如read/write)轉化成特定設備“能聽得懂”的一系列操作。包括設置
設備寄存器;檢查設備狀態等。因為不同的I/O設備有不同的硬件特性,具體細節只有設備的廠家才知道。因此廠家需要根據設備的硬件特性設計并提供相應的驅動程序。
中斷處理程序:當I/O任務完成時,I/O控制器會發送一個中斷信號,系統會根據中斷信號類型找到相應的中斷處理程序并執行。中斷處理程序的處理流程如下:
假脫機技術
設備的分配與回收
設備的固有屬性可分為三種:獨占設備、共享設備、虛擬設備。
獨占設備:一個時段只能分配給一個進程(如打印機)
共享設備:可同時分配給多個進程使用(如磁盤),各進程往往是宏觀上同時共享使用設備,而微觀上交替使用。
虛擬設備:采用 SPOOLing 技術將獨占設備改造成虛擬的共享設備,可同時分配給多個進程使用(如采用 SPOOLing 技術實現的共享打印機)
靜態分配:進程運行前為其分配全部所需資源,運行結束后歸還資源
動態分配:進程運行過程中動態申請設備資源
設備控制表(DCT):系統為每個設備配置一張DCT,用于記錄設備情況
控制器控制表(COCT):每個設備控制器都會對應一張COCT。操作系統根據COCT的信息對控制器進行操作和管理。
通道控制表(CHCT):每個通道都會對應一張CHCT。操作系統根據CHCT的信息對通道進行操作和管理。
系統設備表(SDT):記錄了系統中全部設備的情況,每個設備對應一個表目。
設備分配的步驟:
- 根據進程請求的物理設備名查找SDT(注:物理設備名是進程請求分配設備時提供的參數)
- 查找SDT,找到用戶進程指定類型的、并且空閑的設備,將其分配給該進程。操作系統在邏輯設備表(LUT)中新增一個表項。
- 根據DCT找到COCT,若控制器忙碌則將進程PCB掛到控制器等待隊列中,不忙碌則將控制器分配給進程。
- 根據COCT找到CHCT,若通道忙碌則將進程PCB掛到通道等待隊列中,不忙碌則將通道分配給進程。
緩沖區
緩沖區是一個存儲區域,可以由專門的硬件寄存器組成,也可利用內存作為緩沖區。使用硬件作為緩沖區的成本較高,容量也較小,一般僅用在對速度要求非常高的場合(如存儲器管理中所用的聯想寄存器,由于對頁表的訪問頻率極高,因此使用速度很快的聯想寄存器來存放頁表項的副本)一般情況下,更多的是利用內存作為緩沖區,“設備獨立性軟件”的緩沖區管理就是要組織管理好這些緩沖區。