儲存、匯流排與輸入輸出

輸入/輸出(I/O)

/ I-O /

一台只有 CPU 和記憶體的電腦,就像泡在密封罐裡的大腦:它會思考,卻看不見、聽不到、說不出話,斷電後也記不住任何東西。輸入/輸出,也就是 I/O,涵蓋了一切把機器連到處理器與主記憶體之外世界的東西——把資料送進來的鍵盤與滑鼠、把結果送出去的螢幕與喇叭、與其他機器對話的網路,以及斷電後仍保存資料的磁碟。I/O 就是機器的感官,也是它的長期記憶。

具體來說,一次 I/O 操作就是在 CPU 或記憶體與某個裝置之間搬移資料。CPU 不會直接去戳磁碟碟片或網路線;相反地,每個裝置背後都坐著一小塊叫做控制器的硬體,CPU 透過幾個叫做裝置暫存器的特殊位置來讀寫這個控制器(見 device-controller 與 memory-mapped-io)。典型的交換流程是:告訴控制器要做什麼(讀這個區塊、送這個封包),等裝置做完,再去收結果。由於真實裝置相對 CPU 很慢,有趣的問題就在於處理器如何度過等待時間——靠輪詢、靠中斷,或把整段傳輸交給 DMA。

初學者最關鍵的觀念轉變是:I/O 要從三個面向來衡量,不只是純粹的速度。一是吞吐量(每秒多少 MB,或每秒多少次操作,稱為 IOPS);二是延遲或反應時間(一個請求從頭到尾要多久);三是可靠性(資料回來時是否正確,崩潰或某顆磁碟壞掉後它能否倖存)。一顆會默默弄丟你檔案的快磁碟,比一顆從不弄丟的慢磁碟還糟。而且老實說,I/O 往往才是真正的瓶頸:一個在等磁碟或網路的程式,可能讓數 GHz 的 CPU 大半時間閒著。

你在文字編輯器裡按下「儲存」。CPU 並不會自己寫磁碟:它請作業系統建立一個請求,透過裝置暫存器把它交給磁碟控制器,並(通常)設定一次 DMA 來搬移你檔案的位元組。CPU 接著就能去做別的事;磁碟做完後,會發出一個中斷說「完成了」。

一次儲存就用上了裝置暫存器、DMA 和中斷——正是本領域的核心 I/O 機制。

在這裡 GHz 救不了你:一個受限於 I/O 的程式,跑的速度取決於它路徑上最慢的那個裝置,而非 CPU。「電腦快、磁碟慢」是現實中最常見的效能陷阱之一。

又称
I/Odevice I/O輸入輸出I/O