位元組交叉編址方式

ear ear address)。

按照位元組編址,每個記憶體單元的地址,不稱為物理地址而是線性地址,線性地址通過CPU記憶體管理單元(MMU)來進行轉換
32位cpu地址線擁有32根,定址能力達到4GB,而P4處理器的地址線則擁有35根,可以定址更大的空間。但是實際記憶體達不到CPU的定址空間大小,此時CPU的MMU就需要對線性地址進行向物理地址的轉化,此時線性地址就和物理地址不一樣了。
決定一個記憶體單元的物理地址時需要根據當前的記憶體管理方式進行計算,首先根據虛擬地址計算得到線性地址,然後根據分頁機制是否打開,如果沒有使用分頁機制,線性地址就是物理地址,如果打開分頁機制則根據頁目錄和頁表項來計算得物理地址。
按照x86 32位處理器,虛擬地址就是程式中所使用的邏輯地址,虛擬地址計算如下:
首先通過查段選擇子暫存器(16位模式下成為段基址暫存器,比如讀取數據用DS暫存器)中選擇子的第2位,0則從全局描述符表 (GDT,Global Descriptor Table)1則從局部描述符表(LDT Local Descriptor Table)。全局描述符從GDTR暫存器找到描述符表的物理基地址(後稱簡稱為GDTBA,GDT base address),然後GDTBA + DS & 0xFFF8得到的地址就是該選擇子指向的描述符,然後根據描述符中記錄的段基址 + 偏移(可以是指令中的地址碼,也可是si,di中的數值)就得到了線性地址(Linear Address),而局部則有些不同,因為LDTR中放的不是局部描述符表的物理基地址,而是在全局描述符表的一個描述符選擇子。首先會計算LDT的物理基地址,方法同上,然後再計算描述符地址,最後計算成Linear Address.如果沒打開分頁,這個就可以是物理地址了。如果打開分頁機制,還要做Linear Address 到物理地址的轉化(physical address)。
線性地址是32位,高十位是頁目錄項索引,中間十位是頁表項索引,最後12位是頁內偏移,當然這是在選用4KB小頁的情況,大頁是4MB,則後22位都是頁內偏移。頁目錄物理基地址存放在CR3中,共有1024項,因此用線性地址高10位作索引,找到相應的頁目錄項。在小頁模式中,該項保存的是頁表的高20位地址,因為頁表只有4KB,所以低12位不需要。通過線性地址中間十位作頁表項索引和頁表基址進行計算得到頁表項,該項中保存的物理頁面的基址,基址加上線性地址低12位頁內偏移,就得到了物理地址。在大頁模式中,就省去了查頁表這一步驟。
回答

相關詞條

熱門詞條

聯絡我們