**:
虛擬位址和實體地址的概念
cpu通過位址來訪問記憶體中的單元,位址有虛擬位址和實體地址之分,如果cpu沒有mmu(memory management unit,記憶體管理單元),或者有mmu但沒有啟用,cpu核在取指令或訪問記憶體時發出的位址將直接傳到cpu晶元的外部位址引腳上,直接被記憶體晶元(以下稱為物理記憶體,以便與虛擬記憶體區分)接收,這稱為實體地址(physical address,以下簡稱pa),如下圖所示。
圖 1. 實體地址示意圖
如果cpu啟用了mmu,cpu核發出的位址將被mmu截獲,從cpu到mmu的位址稱為虛擬位址(virtual address,以下簡稱va),而mmu將這個位址翻譯成另乙個位址發到cpu晶元的外部位址引腳上,也就是將虛擬位址對映成實體地址,如下圖所示[1]。
圖 2. 虛擬位址示意圖
mmu將虛擬位址對映到實體地址是以頁(page)為單位的,對於32位cpu通常一頁為4k。例如,虛擬位址0xb700 1000~0xb700 1fff是乙個頁,可能被mmu對映到實體地址0x2000~0x2fff,物理記憶體中的乙個物理頁面也稱為乙個頁框(page frame)。
思考與練習
1 以下程式中用到的baseaddr是虛擬位址還是實體地址?
#define baseaddr 0x00008000;
int i;
unsigned int *p;
p = (unsigned int *)baseaddr;
for(i=0;i<100;i++)
2 下圖中記憶體晶元的位址範圍是多少?這個位址範圍是指虛擬位址還是實體地址的範圍?
圖 3. 練習題
實體地址和邏輯位址(虛擬位址)
1.實體地址 實體地址是載入到記憶體位址暫存器中的位址,是指記憶體中各物理儲存單元的位址從統一的基位址進行的順序編址。又稱絕對位址,它是資料在記憶體單元的真正位址。在前端匯流排上傳輸的記憶體位址都是物理記憶體位址,編號從0開始一直到可用物理記憶體的最高端。這些數字被北橋 nortbridge chi...
虛擬位址與實體地址
乙個程式編譯連線後形成的位址空間是乙個虛擬位址空間,但是程式最終還是要執行在物理記憶體中。因此,應用程式所給出的任何虛位址最終必須被轉化為實體地址,所以,虛擬位址空間必須被對映到物理記憶體空間中,這個對映關係需要通過硬體體系結構所規定的資料結構來建立。這就是我們所說的段描述符表和頁表,linux主要...
邏輯位址 實體地址 虛擬位址
用於記憶體晶元級的單元定址,與處理器和cpu連線的位址匯流排相對應。雖然可以直接把實體地址理解成插在機器上那根記憶體本身,把記憶體看成乙個從0位元組一直到最大空量逐字節的編號的大陣列,然後把這個陣列叫做實體地址,但是事實上,這只是乙個硬體提供給軟體的抽像,記憶體的定址方式並不是這樣。所以,說它是 與...