IO設備
I/O : Input / output
I/O設備就是可以將數據輸入到計算機或者可以接收計算機輸出數據的外部設備, 屬於計算機中的硬件部件
UNIX系統將外部設備抽象為一種特殊的文件, 用戶可以使用與文件操作相同的方式對外部設備進行操作
Write : 向外部設備寫出數據
Read : 向外部設備讀入數據
IO設備的分類
IO控制器
CPU無法直接控制I/O設備的機械部件, 因此I/O設備還要有一個電子部件作為CPU和I/O設備機械部分之間的 "中介", 用於實現CPU對設備的控制
這個機械部件就是 I / O控制器, 又稱設備控制器. CPU可控制I/O控制器, 又由I/O控制器來控制IO設備的機械部件
IO控制器的功能
- 接受和識別CPU發出的命令
- 向CPU報告設備的狀態
- 數據交換
- 地址識別
IO控制器的組成
- CPU與控制器的接口 : 用於實現CPU與控制器之間的通信, CPU通過控制線發出命令, 通過地址線指明要操作的設備, 通過數據線來取出輸入數據, 或放入輸出數據
- IO邏輯 : 負責接收和識別CPU的各種命令, 並負責對設備發出命令
- 控制器與設備的接口 : 用於實現控制器與設備之間的通信
IO控制方式
程序直接控制方式
通過 輪詢 實現
優點 : 實現簡單.
缺點 : CPU的干預很頻繁, 在IO操作開始之前, 完成之后都需要CPU的介入, 並且等待IO完成的過程中CPU需要不斷地輪詢檢查, CPU長期處於"忙等" 狀態, CPU利用率低
中斷驅動方式
引入中斷機制, 由於IO設備速度很慢, 因此在CPU發出讀/寫命令后, 可將等待IO的進程阻塞, 先切換到別的進程執行
CPU只需要在每次IO開始之前和完成之后介入, 解決了程序直接控制方式中CPU需要不停輪詢的特點, CPU的利用率得到明顯提升.
缺點 : 每個字在I/O設備與內存之間的傳輸都需要經過CPU, 而頻繁的中斷處理會消耗較多的CPU時間.
DMA方式
與 " 中斷驅動方式 " 相比, DMA方式有這樣幾個改進 :
- 數據的傳送單位是 " 塊 "
- 數據的流向是從設備直接放入內存, 或者從內存直接到設備, 不需要CPU作為中介
- 僅在傳送一個或多個數據塊的開始和結束時才需要CPU的干預
DMA控制器 :
DMA的優缺點 :
通道控制方式
通道 : 一種硬件, 通道可以識別並執行一系列通道指令
總結
IO軟件層次結構
設備驅動程序 : 直接涉及到硬件具體細節且與中斷無關的操作
設備獨立性軟件 : 不涉及硬件且對各種設備都需要進行的管理工作
I/O核心子系統
-
I/O調度 : 比如磁盤調度 ( 先來先服務, SCAN, LOOK...)
-
設備保護 : UNIX中設備被看作文件, 每個設備也會有對應的FCB ( 文件控制塊 ). 當用戶請求訪問某個設備時, 系統根據FCB中記錄的信息來判斷用戶是否有相應的訪問權限, 以此實現 " 設備保護" 的功能.
假脫機技術 ( SPOOLing )
假脫機技術 ( SPOOLing技術 ) 是用軟件的方式模擬脫機技術.
SPOOLing系統的組成如下 :
獨占式設備 : 只允許各個進程串行使用的設備
共享設備 : 允許多個進程 " 同時 " 使用的設備
打印機是一種 " 獨占式設備 " , 但是可以用SPOOLing技術改造成 " 共享設備 "
e.g. 共享打印機原理分析
設備的分配與回收
從進程運行的安全性上考慮, 設備分配有兩種方式 :
- 安全分配方式 : 為進程分配一個設備后就將進程阻塞, 本次I/O完成后才將進程喚醒.
- 不安全分配方式 : 進程發出I/O請求后, 系統為其分配I/O設備, 進程可繼續執行, 之后還可以發出新的I/O請求. 只有某個I/O請求得不到滿足時才將進程阻塞.
安全分配方式破壞了死鎖的"請求與保持"條件, 不會死鎖, 但是對於一個進程來說, CPU和I/O設備只能串行工作
不安全分配方式下進程的計算任務和I/O任務可以並行處理, 使進程迅速推進, 但是可能發生死鎖
設備分配管理中的數據結構
設備, 控制器, 通道之間的關系 :
設備控制表 ( DCT ) : 系統為每個設備配置一張DCT, 用於記錄設備情況
控制器控制表 ( COCT ) : 系統根據COCT對控制器進行操作和管理
通道控制表 ( CHCT ) : 系統根據CHCT的信息對通道進行操作和管理
**系統設備表 ( SDT ) ** : 記錄了系統中全部設備的情況, 每個設備對應一個表目
設備分配的步驟
- 根據進程請求的物理設備名查找SDT
- 根據SDT找到DCT, 若設備忙碌則將進程PCB掛到設備等待隊列中, 不忙碌則將設備分配給進程
- 根據DCT找到COCT, 若控制器忙碌則將進程PCB掛到控制器等待隊列中, 不忙碌則將控制器分配給進程
- 根據COCT找到CHCT, 若通道忙碌則將PCB掛到通道等待隊列中, 不忙碌則將通道分配給進程
只有設備, 控制器, 通道三者都分配成功時, 這次設備分配才算成功, 之后便可啟動I/O設備進行數據傳送
可改進處 : 第一步中,可以通過LUT ( 邏輯設備表 )實現邏輯設備名到物理設備名的映射, 用戶編程時只需要使用邏輯設備名申請設備而不必記憶物理設備名.
緩沖區管理
緩沖區的概念
緩沖區是一個存儲區域, 可以由專門的硬件寄存器組成, 也可以利用內存作為緩沖區.
使用硬件作為緩沖區的成本較高, 容量較小, 一般僅用在對速度要求非常高的場合. 比如聯想寄存器 ( 快表 ) 就是硬件作為緩沖區
一般情況下, 更多的是利用內存作為緩沖區
緩沖區有什么作用 ?
- 緩和CPU與IO設備之間速度不匹配的矛盾
- 減少對CPU的中斷頻率, 放寬對CPU中斷相應時間的限制
- 解決數據粒度不匹配的問題
- 提高CPU與IO設備之間的並行性
單緩沖
假設設備把緩沖區充滿的時間為\(T\) , CPU處理工作區數據的時間為\(C\), 緩沖區向工作區傳送的時間為\(M\), 則采用單緩沖策略每處理一塊數據平均耗時為 :
\[Max(C,T) + M \]
雙緩沖
循環緩沖區
緩沖池
ref : https://www.bilibili.com/video/BV1YE411D7nH?p=68
完結撒花~~~