x86內存框架簡介

內存框架是x86框架中最複雜的部分,理解了內存框架基本上就理解了現代計算機體系的大部分內容。

一、地址空間

很多教科書把內存比作是一個大數組,地址是這個數組的索引。與此相似,地址空間則是更大的數組,包含所有可用資源的集合,同樣地址也是這個數組的索引。地址空間包含下面兩種類型。

1. 物理地址空間

從CPU的角度看,內存和其他硬件設備都是可以使用的資源。這些資源組合在一起,分佈在CPU的物理地址空間中。物理地址空間的大小,由CPU實現的物理地址位數所決定,但物理地址位數跟CPU的處理能力(即CPU位數)沒有必然的聯繫。

2.線性地址空間

一臺計算機只有一個物理地址空間,但在操作系統的管理下,每個程序都認爲自己獨佔整個計算機的物理地址空間,爲了讓多個程序能夠有效地相互隔離和使用物理地址空間,引入線性地址空間(也稱虛擬地址空間)的概念。線性地址空間的大小取決於CPU實現的線性地址位數,在基於80386的計算機系統中,CPU的線性地址空間爲4GB。線性地址空間會被映射到某一部分或整個物理地址空間,並通過索引(線性地址)來訪問其中的內容。


二、地址

地址是訪問地址空間的索引。

1. 邏輯地址

該地址是程序直接使用的地址(x86不能禁用段機制,邏輯地址一直存在)。

比如:

  1. int a = 1;  
  2. int * p = &a;  
int a = 1;
int * p = &a;
指針變量p存儲的即是邏輯地址。
邏輯地址由一個16位的段寄存器(也稱段選擇符)和一個32位的偏移量(32位平臺)構成。指針變量p實現存儲的是邏輯地址的偏移量。

2. 線性地址

又稱虛擬地址。是進行邏輯地址轉換後形成的地址索引,用於尋址線性地址空間。但CPU未啓動分頁機制時,線性地址等於物理地址;當CPU啓動分頁機制時,線性地址還需經過分頁地址轉換形成物理地址後,CPU才能訪問內存硬件和外設。

3. 物理地址

該地址索引物理地址空間。

  • 啓動分段機制,未啓動分頁機制:邏輯地址--> (分段地址轉換) -->線性地址==物理地址
  • 啓動分段和分頁機制:邏輯地址--> (分段地址轉換) -->線性地址-->分頁地址轉換) -->物理地址

三、內存管理機制

1. 分段機制

分段將內存劃分成以起始地址(Base)和長度(limit)描述的塊,這些內存塊就稱爲“段”。

分段機制由4個基本部分構成:邏輯地址、段選擇寄存器、段描述符和段描述符表。其核心思想是:當程序使用邏輯地址訪問內存的某個部分時,CPU通過邏輯地址中的段選擇符索引段描述符表以得到該內存對應的段描述符,並檢測程序的訪問是否合法,如合法,根據段描述符中的基地址將邏輯地址轉換成線性地址。

邏輯地址到線性地址的變換過程:


2. 分頁機制

分頁機制的核心思想是通過頁表將線性地址轉換成物理地址,並配合旁路轉換緩衝區(Translation Lookaside Buffer, TLB)來加速地址轉換過程。

線性地址和物理地址之間的變換過程:


3. 分段機制和分頁機制的區別

  • 分頁機制會使用大小固定的內存塊,而分段管理則使用了大小可變的塊來管理內存。
  • 分頁使用固定大小的塊更爲適合管理物理內存,分段機制使用大小可變的塊更適合處理複雜系統的邏輯分區。
  • 段表存儲在線性地址空間,而頁表則保存在物理地址空間。

四、兩種基本運行模式

實際上,x86有4種運行模式:實模式,保護模式,SMM模式和模擬8086模式。常用見的是實模式和保護模式。

1. 實模式

當CPU加電並經歷最初的混沌狀態後,首先進入的就是實模式,它是早期8086處理器工作的的模式。在該模式下,邏輯地址轉換後即爲物理地址,CPU可以訪問1MB的物理地址空間(實際上是1MB+64KB)。操作系統或BIOS通常在該模式下準備必要的數據結構和初始化關鍵的寄存器,然後切入保護模式。

2. 保護模式

保護模式是操作系統運行時最常見的模式。在該模式下,CPU的所有功能幾乎都能得到使用,可以訪問框架允許的所有物理地址空間。

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