Linux外部設(shè)備的硬件接口
計(jì)算機(jī)的外部設(shè)各通常由電氣部分和機(jī)械部分兩部分組成。電氣部分是用來(lái)控制機(jī)械部分的,因此電氣部分也叫做外部設(shè)各的控制器。
控制器通過(guò)計(jì)算機(jī)系統(tǒng)總線掛接到系統(tǒng)上?;蛘哒f(shuō),計(jì)算機(jī)系統(tǒng)就是通過(guò)控制器來(lái)控制和操作外部設(shè)備的。典型的方式是,把外部設(shè)各中的各個(gè)控制器看做是一組互不沖突的寄存器組,并賦予它們相應(yīng)的地址,從而使處理器可以像訪問(wèn)存儲(chǔ)器一樣來(lái)訪問(wèn)控制器,并通過(guò)控制器來(lái)訪問(wèn)外部設(shè)各。
外部設(shè)各通常包含4組寄存器,即狀態(tài)寄存器、控制寄存器、數(shù)據(jù)輸入寄存器和數(shù)據(jù)輸出寄存器。這些寄存器有各自的地址,這個(gè)地址叫做端口。這些寄存器的作用分別為:
·狀態(tài)寄存器用來(lái)向處理器提供外部設(shè)備的工作狀態(tài)。例如,設(shè)各的當(dāng)前操作是否執(zhí)行完畢,數(shù)據(jù)是否可被讀出或?qū)懭胍约板e(cuò)誤提示等。
·控制寄存器是被用來(lái)管理外部設(shè)備工作模式的。也就是說(shuō),在設(shè)備初始化或運(yùn)行時(shí), 處理器可通過(guò)向控制寄存器寫(xiě)入命令來(lái)啟動(dòng)或改變?cè)O(shè)各工作模式。
·數(shù)據(jù)輸入寄存器和數(shù)據(jù)輸出寄存器是用來(lái)與處理器傳遞數(shù)據(jù)的。
外部設(shè)各與處理器關(guān)系示意圖如圖所示。
圖 外部設(shè)備與處理器關(guān)系示意圖
為了識(shí)別外部設(shè)各的這些寄存器,系統(tǒng)給這些寄存器都賦予了地址,于是外部設(shè)各寄存器占用的地址空間叫做I/O空間。對(duì)于I/O空間的處理,目前有兩種方式:一種是與存儲(chǔ)器統(tǒng)一編址,即在整個(gè)內(nèi)存空間中劃出一個(gè)范圍作為I/O空間,這種方式的特點(diǎn)是處理器沒(méi)有獨(dú)立的I/O指令,而是把外部設(shè)各的寄存器作為存儲(chǔ)單元來(lái)對(duì)待的;另一種方式是處理器具有單獨(dú)的I/O指令,所以在這種方式中I/O地址空間是獨(dú)立編址的。不管是統(tǒng)一編址還是獨(dú)立編址,從邏輯上來(lái)看,外設(shè)的各寄存器就相當(dāng)于一種存儲(chǔ)裝置,它可向處理器提供數(shù)據(jù),也可接收處理器的數(shù)據(jù),即處理器可對(duì)它們進(jìn)行讀/寫(xiě)操作。