天天看點

《作業系統真象還原》——0.4 軟體是如何通路硬體的

本節書摘來自異步社群《作業系統真象還原》一書中的第0章,第0.4節,作者:鄭鋼著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

硬體是各種各樣的,發展速度還是非常快的。各個硬體都有自己的個性,作業系統不可能及時更新各種硬體的驅動方法吧。比如,剛出來某個新硬體,os開發者們便開始為其寫驅動,這不太現實,會把人累死的。于是乎,便出現了各種硬體适配裝置,這就是io接口。接口其實就是标準,大家生産出來的硬體按照這個标準工作就實作了通用。

硬體在輸入輸出上大體分為串行和并行,相應的接口也就是串行接口和并行接口。串行硬體通過串行接口與cpu通信,反過來也是,cpu通過串行接口與串行裝置資料傳輸。并行裝置的通路類似,隻不過是通過并行接口進行的。

通路外部硬體有兩個方式。

(1)将某個外設的記憶體映射到一定範圍的位址空間中,cpu通過位址總線通路該記憶體區域時會落到外設的記憶體中,這種映射讓cpu通路外設的記憶體就如同通路主機闆上的實體記憶體一樣。有的裝置是這樣做的,比如顯示卡,顯示卡是顯示器的擴充卡,cpu不直接和顯示器互動,它隻和顯示卡通信。顯示卡上有片記憶體叫顯存,它被映射到主機實體記憶體上的低端1mb的0xb8000~0xbffff。cpu通路這片記憶體就是通路顯存,往這片記憶體上寫位元組便是往螢幕上列印内容。看上去這麼高大上的做法是怎麼實作的,這個我們就不關心了,前面說過,計算機中處處是分層,我們要充分相信上一層的工作。

(2)外設是通過io接口與cpu通信的,cpu通路外設,就是通路io接口,由io接口将資訊傳遞給另一端的外設,也就是說,cpu從來不知道有這些裝置的存在,它隻知道自己操作的io接口,你看,處處展現着分層。

于是問題來了,如何通路到io接口呢,答案就是io接口上面有一些寄存器,通路io接口本質上就是通路這些寄存器,這些寄存器就是人們常說的端口。這些端口是人家io接口給咱們提供的接口。人家接口電路也有自己的思維(系統),看到寄存器中寫了什麼就做出相應的反應。接口提供接口,哈哈,有意思。不過這是人家的約定,沒有約定就亂了,各幹各的,大家都累,咱們隻要遵循人家的規定就能通路成功。

繼續閱讀