輸入輸出硬體(I/O hardware)
一台電腦本身只是一個封閉的盒子,唯一擅長的就是飛快地把數字相加。要真正派上用場,它必須伸手碰觸外在世界:感受一次按鍵、在螢幕上畫出像素、把位元組存到磁碟、透過網路送出封包。所有讓它能做到這些事的實體零件——鍵盤、螢幕、磁碟機、網路卡,以及把它們連到處理器的線路——就是我們所說的輸入輸出硬體。I/O 代表輸入/輸出(input/output):進來的東西與出去的東西。
從實體上看,這幅圖有幾個層次。每個真正的裝置(磁碟碟片、網路插孔、螢幕)都由一小塊電子電路操控,這塊電路稱為它的裝置控制器,是專屬於那一個裝置的迷你電腦。控制器並不直接插在 CPU 上;它們掛在一組共用的線路上,這組線路稱為匯流排(bus)。CPU 透過讀寫少數幾個特殊格子來和控制器溝通,這些格子稱為暫存器——通常包括一個狀態暫存器(裝置忙碌還是完成了?是否失敗?)、一個控制暫存器(開始、停止、接下來要做什麼)以及一個資料暫存器(正在搬移的那個位元組或字組)。要碰到這些暫存器,方式不是透過瞄準有編號的連接埠的特殊輸入輸出指令,就是讓這些暫存器看起來像普通的記憶體位址(記憶體映射輸入輸出)。
為什麼重要:各種裝置彼此差異極大,而且幾乎全都比 CPU 慢得多——磁碟慢上數十萬倍,人類打字員更慢。作業系統工作的一大部分,就是把這些雜亂、遲緩的硬體藏在一個乾淨、統一的介面後面,讓一般程式只要說「讀」或「寫」,而不必知道任何這些細節。本領域就是上面那些較高層次所立足的硬體基礎。
當你儲存一份文件時,你的程式呼叫 write。作業系統透過匯流排,把資料交給磁碟的裝置控制器——做法是寫入它的控制暫存器與資料暫存器;控制器本身是一台小電腦,會把那些位元組實際記錄到碟片上,再透過它的狀態暫存器回報結果。
每一次儲存、點擊與按鍵,都走過 CPU -> 匯流排 -> 控制器 -> 裝置這條路。
CPU 從不直接碰觸旋轉的碟片或網路線;它能做的只有讀寫某個控制器的暫存器。其餘的一切都是控制器的工作——這個分界很容易被忽略。