以下是一個非常簡短、高層次的答案:
x86處理器以幾種可能的模式之一工作(大致是:真實的、受保護的、64位的)。每種模式都可以使用幾種可能的內存尋址模型中的一種(但不是每一種模式都可以使用每個模型),即:實模式尋址、分段尋址和平行線尋址。
在現代世界中,只有保護模式或64位模式下的平坦線性尋址是相關的,這兩種模式本質上是相同的,主要的區別是機器字的大小,因此內存的可尋址量。
現在,內存尋址模式賦予機器指令的內存操作數(如mov DWORD PTR [eax], 25,存儲32位(又名dword)將值25的整數放入內存中,該內存的地址存儲在eax32位寄存器)。在平坦線性尋址中,這個數字在eax允許在一個連續的范圍內運行,從零到最大值(在我們的例子中是2)。32?1)。
然而,平坦的尋址可以是傳呼或未傳呼..在不分頁的情況下,地址直接引用物理內存。帶著分頁,處理器的內存管理單元(或MMU)透明地為所需地址(現在稱為虛擬地址)進入查找機制,即所謂的頁表,并獲得一個新值,該值被解釋為物理地址。最初的操作現在運行在物理內存中的這個新的轉換地址上,即使用戶只看到虛擬地址。
分頁的主要好處是頁表由操作系統管理。因此,操作系統可以任意修改和替換頁面表,例如“切換任務”時。它可以保存一個完整的頁表集合,每個“進程”一個,每當它決定某個特定進程要在給定的CPU上運行時,它就會將進程的頁表加載到該CPU的MMU中(每個CPU都有自己的一組頁表)。結果是每個進程都看到了自己的虛擬當操作系統不得不為其分配內存時,無論哪個物理頁面是空閑的,地址空間看起來都是一樣的。它永遠不知道任何其他進程的內存,因為它不能直接訪問物理內存。
頁表是嵌套的樹狀數據結構,存儲在普通內存中,由操作系統編寫,但由硬件直接讀取,因此格式是固定的。通過設置一個特殊的CPU控制寄存器指向頂層表,它們將被“加載”到MMU中。CPU使用一個稱為TLB的緩存來記住查找,因此對相同幾個頁面的重復訪問比分散的訪問要快得多,這是因為TLB丟失的原因以及通常的數據緩存原因。經常會看到術語“TLB條目”用于指頁表條目,即使它們沒有緩存在TLB中。
如果您擔心某個進程可能只是禁用分頁或嘗試修改頁表:這是不允許的,因為x86實現了特權級別(稱為“循環”),用戶代碼執行的權限級別太低,無法修改CPU的頁表。