裝置控制器(device controller)
CPU 只說一種語言——在位址上讀寫字組——但磁碟懂的是旋轉的碟片,網路卡懂的是電線上的電壓。裝置控制器就是坐在兩者之間的翻譯員兼交通警察。它是一小塊硬體,管理一個裝置(或一族裝置),一面對 CPU 呈現一組整潔的暫存器,另一面驅動雜亂的實體裝置。每個鍵盤、磁碟、螢幕和網路埠,都是透過這樣的控制器接到 CPU。
控制器通常對外露出三類暫存器,供 CPU 讀寫(一般用記憶體映射 I/O):命令或控制暫存器,CPU 在這裡寫下它要做的事(「讀第 4096 號磁區」、「傳送」);狀態暫存器,CPU 讀它來得知裝置的狀態(「忙碌」、「就緒」、「錯誤」);以及資料暫存器,存放進出的位元組。CPU 那側配合的軟體是裝置驅動程式。一次正常交換是:驅動程式寫下命令,輪詢或等待狀態說完成,再搬資料——而對大量傳輸,控制器可以跑 DMA,讓位元組直接進記憶體,不必 CPU 逐個複製。
為什麼這很重要:控制器是讓系統其餘部分得以「與裝置無關」的邊界。CPU 與作業系統打交道的是命令與暫存器,不是磁性或無線電的物理。把旋轉磁碟換成固態硬碟,只要控制器說同一套暫存器協定,大多數軟體都不在乎。控制器也是如今裝置許多智慧所在之處——固態硬碟的控制器跑著快閃轉換層與磨損平衡,把快閃的怪癖藏在簡單的「讀這個區塊、寫那個區塊」門面之後。
磁碟控制器的暫存器:把區塊號寫進命令暫存器並設起「開始」位元;控制器讀碟片、填滿它的資料緩衝區、把狀態暫存器的「完成」位元設起來,並(若被要求)把資料 DMA 進 RAM 並發出中斷。CPU 從頭到尾沒碰過碟片。
命令進去、狀態出來、資料穿過——大多數控制器遵循的三暫存器模式。
這裡的「控制器」指裝置的 I/O 控制器,不是記憶體控制器(管 DRAM 的)也不是處理器內部的控制單元。同一個詞、三種不同工作——靠上下文分辨。