大家晚上好。今天我們聊聊內存地址空間。一臺PC機由多個物理器件組成:顯卡、網卡、主板、接口卡、顯示器等等。那麼CPU是如何知道它們是誰,而又是如何通過數據和指令讀寫進而對各種物理器件進行操控呢?
統一編址的普適性方法
一臺PC 機中,裝有多個存儲器芯片,這些存儲器芯片從物理連接上看是獨立的、不同的器件。從讀寫屬性上看分為兩類:隨機存儲器(RAM)和只讀存儲器(ROM)。隨機存儲器可讀可寫,但必須帶電存儲,關機後存儲的內容丟失;只讀存儲器只能讀取不能寫入,關機後其中的內容不丟失。這些存儲器從功能和連接上又可分為主板上的RAM和擴展槽上的RAM,以及ROM中的系統BIOS和接口卡上的BIOS。
各個物理器件如下圖所示。
圖中的各種物理器件都是互相獨立的,但是都通過總線和CPU相連。還記得之前我們講過的三種總線嗎?忘了的朋友再看視頻複習下吧:
CPU對這些物理器件進行讀寫都是通過控制總線發出的內存讀寫命令。也就是說不管哪種物理器件,CPU在操控它們時都會將其當做內存處理,將它們看作由若干個存儲單元組成的邏輯存儲器。也就是我們常說的內存地址空間。
如下圖所示,所有的物理存儲器被看作一個由若干存儲單元組成的邏輯存儲器,每個物理存儲器在該邏輯存儲器中佔有一個地址段,即一段地址空間,CPU進行讀寫數據,實際上就是在相對應的物理存儲器中讀寫數據。
如下圖左側內存地址空間劃分,是8086PC機的解決方案。該說說明了這樣一個事實:如果從0~9FFFF的內存單元讀取數據,實際上就是在讀取主存儲器的數據,向A0000~BFFFF的內存單元寫數據,就是向顯存寫數據,而向C0000~FFFFF內存單元寫數據根本不會生效,因為該處是隻讀區域。
這個概念是一個普適的概念。我們在基於一個計算機硬件系統編程時,必須知道該系統的內存地址空間分配情況,因為當我們想在某類存儲器中讀寫數據時,必須知道它的第一個單元的地址和最後一個單元的地址,才能保證讀寫操作是在預期的存儲器的進行的。即CPU想要操作顯示器、網卡亦或是顯卡,都需要知道他們的邏輯地址劃分。
總結
所有的物理存儲器被看作一個由若干存儲單元組成的邏輯存儲器;
每個物理存儲器在該邏輯存儲器中佔有一個地址段,即一段地址空間;
CPU進行讀寫數據,實際上就是在相對應的物理存儲器中讀寫數據。
轉載請超鏈接註明:頭條資訊 » 淺談內存地址空間
免責聲明 :非本網註明原創的信息,皆為程序自動獲取互聯網,目的在於傳遞更多信息,並不代表本網贊同其觀點和對其真實性負責;如此頁面有侵犯到您的權益,請給站長發送郵件,並提供相關證明(版權證明、身份證正反面、侵權鏈接),站長將在收到郵件24小時內刪除。