硬體的分頁功能
分頁單元會把線性位址轉譯成實體位址。分頁單元的關鍵任務之一是檢查被請求的存取類型是否合於線性位址的存取權限。如果記憶體位存取並非有效,分頁單元就會產生一個[頁面失誤例外事件](Page Falut Exception)
為了效率起見,線性位址以長度固定的間隔被切割成眾多頁面(Page)
分頁單元把所有RAM都切割成長度固定的頁框(Page Frame)-有時稱為實體頁面(Physical Page)。
把線性位址對應到實體位址的資料結構就稱為頁面對應表(Page Table)。
從80386起,所有的80X86處理器都支援分頁功能
基本分頁功能
從80386起,Intel的處理器的分頁單元所處理的是大小4KB的頁面。32位元的線性位址被分成三個欄位:
1. Directory(目錄) :最高效10位元
2. Table(表格) :中間10位元
3. Offset(偏移量) :最低效12位元
線性位址的轉譯工作分兩個步驟完成,每個步驟都立基於一種轉譯表(Translation Table)。
1. 頁面目錄(Page Directory)
2. 頁面表格(Page Table)
採用這兩種方案(Two-Level Scheme)的目的在於,減少每個行程的RAM的使用量。因為只有行程實際用到虛擬記憶體區域才需要使用到頁面表格。
每一個活躍的行程都必須被指派一個頁面目錄。然而,沒有必要立刻替行程的所有頁面表格分配RAM,等到形成實際需要一個頁面表格時,再分配RAM給該頁面表格,這樣會比較有效率。
使用中的頁面目錄的實體位址被儲存在cr3的控制暫存器裡。
線性位址的Directory 欄位(10位元)可決定頁面目錄指向正確頁面表格的項目。
線性位址的Table欄位(10位元)可決定頁面表格中指向[內含該頁面之頁框的實體位址]的項目。
Offset欄位(12位元)可決定頁框內的相對位址
Directory欄位和Table欄位都是10位元長,所以頁面目錄和頁面表格都可以包含1024個項目。因此,頁面目錄可定址到1024X1024X4096=232個記憶單元。
延伸分頁功能(Extended Paging)
從Pentium起,80X86為處理器引進了延伸分頁功能,頁框的大小變成4MB,而非4KB。延伸分頁用來把大範圍的連續線性位址轉譯成相應的實體位址。就因如此,核心無須再透過頁面表格,因此可以節省記憶體,以及保留TLB項目。
啟用延伸分頁功能得設定頁面目錄項目的Page Size旗號。就此而言,分頁單元會把線性位址的32位元分成兩個欄位:
1. Directory(目錄) :最高效10位元
2. Offset(偏移量) :其餘的22位元
延伸分頁功能的頁面目錄項目如同基本分頁功能,除了:
l Page Size旗號必須設定。
l 20位元的實體位址欄位中只有最高效10位元有用。這是因為實體位址是以4MB為單位,所以位址中最低效的22位元皆為0。
延伸分頁功能可和基本分頁功能共存。(設定cr4暫存器的PSE旗號,就能啟用延伸分頁功能)
硬體保護方案
分頁單元所採用的保護方案和分節單元不同。雖然80X86允許一個節區擁有四種可能的特權等級,但是分頁和表格只擁有兩種特權等級,因為特權等級是由User/Supervisor旗號來控制。所以若此旗號被清為0
,只有當CPL小於3時,頁面才可以被定址。若此旗號設為1時頁面總是可以被定址。
此外還有三種存取等級(讀,寫,執行),但頁面只有兩種存取等級(讀,寫)。如果頁面目錄或頁面表格的Read/Write旗號等於0,則相應之頁面表格或是頁面目錄就只能被讀取而已;否則就能被讀和寫。
PAE 分頁機制
處理器能支援的RAM數量,受限於位址匯流排的位址引線數目。從80386到Pentium,這些舊式的Intel處理器,所使用的是32位元的實體位址。理論上,這類系統可以安裝多達4GB的RAM。但實際上,言餘用戶模式行程對線性位址空間的需求,核心無法直接定址超過1GB的RAM。然而對必須同時執行成千上百個行程的大型伺服器而且,需要使用的RAM超過4GB,近年來這個需求對Intel形成了壓力,迫使其擴充32位元80X86架構所支援的RAM數量。
從Pentium Pro起,Intel引進了一種名為實體位址延伸(Physical Address Extension 簡稱PAE),這種方式就是把處理器的位址引線從32增加到36。所以處理器可以定址236=64GB的RAM。然而,想要利用使體位址新增的範圍,就必須引進新的分頁機制,把32位元的線性位址轉譯成36位元的實體位址。
要啟用PAE,就得設定cr4控制暫存器裡的PAE旗號。
64位元架構的分頁機制
在32位元微處理器常用的方式是用兩層分頁。然而兩層分頁並不適用於64位元架構的電腦。
64位元處理器中所有的硬體分頁系統都會利用到額外的分頁層次。至於用到多少層,則取決於處理器的類型。
平台 | 頁面大小 | 所使用的位址位元數 | 分頁層數 | 線性位址切割 |
Alpha | 8KB | 43 | 3 | 10+10+10+13 |
Ia64 | 4KB | 39 | 3 | 9+9+9+12 |
Ppc64 | 4KB | 41 | 3 | 10+10+9+12 |
Sh64 | 4KB | 41 | 3 | 10+10+9+12 |
X86_64 | 4KB | 48 | 4 | 9+9+9+9+12 |
留言列表