x86 CPU中邏輯地址到物理地址映射過程

1 段頁式內存管理機制

在x86 CPU中,採用了段頁式內存管理機制,分段和分頁模型。

 

  • 分頁(Paging)機制

邏輯地址由頁號和偏移量組成。

  • 分段(Segment)機制

分段允許程序員把存儲器看成由多個地址空間或段組成。程序和相關的數據被劃分成一組段(segment),不要求所有程序的所有段都有相同長度。

和分頁一樣,分段情況下的邏輯地址由兩部分組成:段號和偏移量。


分段的優點:
 

  • 簡化不斷增長的數據結構處理。
  • 允許程序獨立地改變或重新編譯,而不要求整個程序集合重新鏈接和重新加載。
  • 有助於進程間的共享。
  • 有助於保護。由於一個段可以被構造成包含一個明確定義的程序或數據集,程序員或系統管理員可以以一種方便的形式指定訪問權限。
  • 虛擬內存

內存的基本思想是程序、數據、堆棧的總大小可以超過可用物理內存的大小,操作系統把程序當前使用的那些部分保留在內存中,而其他部分保存在磁盤上。

虛擬內存的實現基於分頁技術。
虛擬內存的優點:

  • 在內存中可以同時運行多個進程
  • 進程可以比內存全部空間還大,不再侷限於物理內存大小
  • 內存更高效地被使用

2 邏輯地址到線性地址的映射過程

X86 CPU邏輯地址到線性地址映射過程如下圖:


邏輯地址到線性地址映射過程如下:

(1)根據指令的性質來確定應該使用哪一個段寄存器(Segment Selector),例如轉移指令中的地址在代碼段,而取數據指令中的地址在數據段;

(2)根據段存器的內容,找到相應的“地址段描述結構“(Segment Descriptor),段描述結構都放在一個表(Descriptor Table)中(GDT或LDT、TR、IDT),而表的起始地址保存在GDTR、LDTR、IDTR、TR寄存器中。這就是4個內存管理寄存器GDTR、LDTR、IDTR和TR的用途;

(3)從地址段描述結構中找到基地址(Base Address);

(4)將指令發出的地址作爲位移(Effective Address),與段描述結構中規定的段長度相比,看看是否越界;

(5)根據指令的性質和段描述符中的訪問權限來確定是否越權;

(6)將指令中發出的地址作爲位移,與基地址相加而得出線性地址(Linear Address)。

問題: 1、邏輯地址就是CPU指令發出的地址,那麼段選擇碼(Segment Selector)的值在哪裏? 2、知道段選擇碼後,需要從描述符表(Descriptor Table)中找到相應的表項,那怎麼知道描述符表在內存中哪個位置?

3 線性地址到物理地址的映射過程

X86 CPU線性地址到物理地址映射過程:


線性地址到物理地址映射過程如下:

(1)從CR3寄存器中獲取頁面目錄表(Page Directory)的基地址;

(2)以線性地址的Directory位段爲下標,在目錄(Page Directory)中取得相應頁面表(Page Table)的基地址;

(3)以線性地址中的Table位段爲下標,在所得到的頁面表中獲得相應的頁面描述項;

(4)將頁面描述項中給出的頁面基地址與線性地址中的offset位段相加得到物理地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章