I/O Hardware
Basic Concept
I/O hardware 是 OS 控制外部裝置時實際面對的硬體層。雖然 device 的種類非常多,但從 OS 的角度來看,控制它們通常只需要理解幾個共同元件:device、controller、port、bus、register、interrupt、DMA。
OS 不會直接「理解」每一個 device 的物理細節,而是透過 Device controller 讀寫一些 control/data registers。Controller 再把這些 register 中的命令轉成對硬體真正有意義的訊號。也就是說,CPU 和 device 之間通常不是直接溝通,而是:
CPU / OS → controller registers → device controller → physical device這樣設計的目的,是讓 device 的複雜硬體邏輯被包在 controller 裡。OS 只要知道如何讀寫 controller 提供的 register,就能控制裝置。
Port, Bus, Controller
Port
Port 是 device 與 computer system 的連接點。CPU 可以透過 port address 或 memory-mapped address 找到某個 controller 的 register,進而對 device 下命令或讀取狀態。
Bus
Controller
Device Registers
Device controller 通常提供幾種 register 給 CPU 或 driver 使用:
- data-in register:host 從這裡讀取 device 送來的 input。
- data-out register:host 把要輸出的資料寫到這裡。
- status register:device 用它回報狀態,例如 command 是否完成、是否有 byte 可讀、是否發生 error。
- control register:host 用它啟動 command 或設定 device mode,例如 full-duplex / half-duplex、parity checking、word length。
CPU 控制 I/O 的基本動作,其實就是不斷讀寫這些 registers。不同的是,register 可以透過特殊 I/O instruction 存取,也可以被映射到 memory address space,後者就是 O
Ways to Coordinate I/O
硬體本身不會自動知道 OS 何時要傳資料,也不會自動知道 CPU 何時該來拿資料,因此 host 和 controller 之間需要 coordination mechanism。
- Polling:CPU 主動反覆檢查 device status。
- O:device 有事時主動通知 CPU。
- DMA:大筆資料搬移交給 DMA controller,不讓 CPU 一個 byte 一個 byte 搬。
這三者的核心 trade-off 是 CPU 時間與反應速度:polling 很直接但可能浪費 CPU;interrupt 可以避免 CPU 一直等,但 interrupt handling 本身有 overhead;DMA 則進一步把大量資料搬移的工作從 CPU 身上移走
Why Hardware Abstraction Matters
I/O hardware 的種類會不斷變化,但 OS 不能為每個新裝置重寫整個 kernel。因此本章後面會接著討論 O interface 和 device driver:driver 把某個 controller 的細節封裝起來,O subsystem 則把不同 device driver 統一成幾種 application 可以理解的介面。