實體地址、虛擬地址

duhui75發表於2020-10-11

(1)實體地址

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

(2)匯流排地址

匯流排的地址線或在地址週期上產生的訊號。外設使用的是地址匯流排,cpu使用的是實體地址。

實體地址和匯流排地址之間的關係有系統設計決定的。在X86平臺上,實體地址就是匯流排地址,這是因為它們共享相同的地址空間。在其他平臺上,可能需要轉換/對映。

(3)虛擬地址

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

      linux中,程式的4GB記憶體分為使用者空間和核心空間。使用者空間分佈為1~3GB剩下的1GB為核心空間。程式設計師只能使用虛擬地址。系統中每個程式有各自的私有使用者控制元件(0~3GB),這個空間對系統中的其他程式是不可見的。

編址方式

相關文章