天天看點

淺談實體位址、虛拟位址和邏輯位址

從最根本的角度來看,位址隻分為兩類:實體位址、虛拟位址。 

1、實體位址

CPU位址總線傳來的位址,由硬體電路控制其具體含義。實體位址中很大一部分是留給記憶體條中的記憶體的,但也常被映射到其他存儲器上(如顯存、BIOS等)。在程式指令中的虛拟位址經過段映射和頁面映射後,就生成了實體位址,這個實體位址被放到CPU的位址線上。

實體位址空間,一部分給實體RAM(記憶體)用,一部分給總線用,這是由硬體設計來決定的,是以在32 bits位址線的x86處理器中,實體位址空間是2的32次方,即4GB,但實體RAM一般不能上到4GB,因為還有一部分要給總線用(總線上還挂着别的 許多裝置)。在PC機中,一般是把低端實體位址給RAM用,高端實體位址給總線用。

2、虛拟位址

現代作業系統普遍采用虛拟記憶體管理(Virtual Memory Management)機制,這需要MMU(Memory Management Unit)的支援。MMU通常是CPU的一部分,如果處理器沒有MMU,或者有MMU但沒有啟用,CPU執行單元發出的記憶體位址将直接傳到晶片引腳上,被記憶體晶片(實體記憶體)接收,這稱為實體位址(Physical Address),如果處理器啟用了MMU,CPU執行單元發出的記憶體位址将被MMU截獲,從CPU到MMU的位址稱為虛拟位址(Virtual Address),而MMU将這個位址翻譯成另一個位址發到CPU晶片的外部位址引腳上,也就是将虛拟位址映射成實體位址。

3、邏輯位址

邏輯位址是指由程式産生的與段相關的偏移位址部分。

4、邏輯位址與實體位址的關系

邏輯位址的形式——段位址:段内偏移位址。

實體位址=段位址 * 10H+段内偏移位址

問:

一個含有16個位元組資料的變量,它的邏輯位址為1000H:0100H,那麼該變量的最後一個位元組資料的實體位址是多少?

答:

邏輯位址1000H:0100H對應的實體位址是10100H;

第1個位元組是首位址+0;

第16個位元組就是首位址+0FH,即1010FH。