天天看點

《作業系統真象還原》——0.9 實體位址、邏輯位址、有效位址、線性位址、虛拟位址的差別

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

實體位址就是實體記憶體真正的位址,相當于記憶體中每個存儲單元的門牌号,具有唯一性。不管在什麼模式下,不管什麼虛拟位址、線性位址,cpu最終都要以實體位址去通路記憶體,隻有實體位址才是記憶體通路的終點站。

在實模式下,“段基址+段内偏移位址”經過段部件的處理,直接輸出的就是實體位址,cpu可以直接用此位址通路記憶體。

而在保護模式下,“段基址+段内偏移位址”稱為線性位址,不過,此時的段基址已經不再是真正的位址了,而是一個稱為選擇子的東西。它本質是個索引,類似于數組下标,通過這個索引便能在gdt中找到相應的段描述符,在該描述符中記錄了該段的起始、大小等資訊,這樣便得到了段基址。若沒有開啟位址分頁功能,此線性位址就被當作實體位址來用,可直接通路記憶體。若開啟了分頁功能,此線性位址又多了一個名字,就是虛拟位址(虛拟位址、線性位址在分頁機制下都是一回事)。虛拟位址要經過cpu頁部件轉換成具體的實體位址,這樣cpu才能将其送上位址總線去通路記憶體。

無論在實模式或是保護模式下,段内偏移位址又稱為有效位址,也稱為邏輯位址,這是程式員可見的位址。這是因為,最終的位址是由段基址和段内偏移位址組合而成的。由于段基址已經有預設的啦,要麼是在實模式下的預設段寄存器中,要麼是在保護模式下的預設段選擇子寄存器指向的段描述符中,是以隻要給出段内偏移位址就行了,這個位址雖然隻是段内偏移,但加上預設的段基址,依然足夠有效。

線性位址或稱為虛拟位址,這都不是真實的記憶體位址。它們都用來描述程式或任務的位址空間。由于分頁功能是需要在保護模式下開啟的,32位系統保護模式下的尋址空間是4gb,是以虛拟位址或線性位址就是0~4gb的範圍。轉換過程如圖0-5所示。

《作業系統真象還原》——0.9 實體位址、邏輯位址、有效位址、線性位址、虛拟位址的差別

繼續閱讀