Application I/O Interface

Basic Concept

Application I/O interface 是 OS 對 application 提供的 I/O 抽象層。它的目標不是讓 application 直接控制 hardware,而是讓 application 用少數幾種穩定的 system call pattern 去使用各種 device。

原因是 device 差異太大。若 application 必須知道每個 device 的 controller register 和 bus protocol,程式會很難寫,也會破壞系統安全。因此 OS 透過 device driver + kernel I/O subsystem 隱藏硬體差異,對上提供一致的介面。

application
→ system call interface
→ kernel I/O subsystem
→ device driver
→ controller / hardware

Device Driver as the Boundary

Device driver 是 kernel 端封裝硬體差異的模組。每個 driver 理解某種 controller 的 register、interrupt、DMA 行為,但它對 kernel I/O subsystem export 一套標準 interface。這讓 kernel 可以把不同 device 歸入幾種常見類別,而不需要每次遇到新硬體就改寫上層 I/O code。

從 application 角度看,這表示它不用知道自己背後是 SATA SSD、USB disk、keyboard、network card。它只需要知道這個 device 被 OS 抽象成哪一種介面。

Device Characteristics

OS 會根據 device 的行為把它們分類。常見差異包括:

  • Character-stream vs block:一次傳 byte stream,或一次傳 fixed-size block。
  • Sequential vs random access:只能照順序讀,或可以 seek 到任意位置。
  • Synchronous vs asynchronous behavior:response time 是否可預期(Asynchronized IO
  • Sharable vs dedicated:能否被多個 process 同時使用。
  • Speed:從幾 bytes/sec 到 GB/sec 都可能。
  • Direction:read-only、write-only、read-write、write-once。

Application I/O interface 的任務,就是把這些差異整理成幾種常用 access conventions。

Standard Device Categories