IA-32系统编程指南 - 第三章 保护模式的内存管理【2】
生活随笔
收集整理的這篇文章主要介紹了
IA-32系统编程指南 - 第三章 保护模式的内存管理【2】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第三章 保護模式的內存管理【2】
?
? 【作者:lion3875 原創文章 參考文獻《Intel 64 and IA-32 system programming guide》】
??? 3.6 分頁概述
??? 在IA-32架構的保護模式中,處理器要么將線性地址空間直接映射至物理內存空間(當擁有4GB物理內存時),要么間接的映射至較小物理內存(低于4GB)或磁盤空間,后一種映射方式通常用于虛擬內存管理。
??? 啟用分頁功能后,處理器會將線性地址空間分割成多個固定大小的頁面(如4KB、4MB或2MB),然后將這些頁面映射到物理內存或磁盤空間。當程序(或任務)訪問一個邏輯地址時,處理器便會先將其轉換為線性地址,然后再利用分頁機制將線性地址轉換為物理地址。
??? 如果一個被訪問的頁面沒有在物理內存中(而是在磁盤空間),處理器便會產生一個“頁錯誤”異常(#PF),此異常的處理程序會指導操作系統或執行體將被訪問的頁面從磁盤空間裝入物理內存(也許這時在物理內存空間的頁面正在被寫入到磁盤空間)。當頁面被裝入物理內存后,異常處理程序會正常返回,然后CPU會重新執行導致異常發生那條指令。另外,在頁目錄及頁表中還保存著用于處理器將線性地址轉換為物理地址的重要信息,以及用于產生頁錯誤異常的重要信息。
??? 與分段不同,分頁是通過多個固定長度的頁面實現的,而分段則是將代碼區域的長度與數據區域的長度分開規劃的。在分段機制中,一個數據塊若需要被裝入物理內存,就要一次全部裝入,而分頁機制則可以將要訪問的數據塊的一部份裝入內存,另一部份留在磁盤空間。
??? 為了降低地址轉換所帶來的總線周期開銷,最近經常被訪問的頁目錄及頁表項會被裝入處理器內部的一個器件中,即TLB(旁路轉換緩沖)。TLB可以滿足當前大多數頁目錄及頁表的讀取操作,無需請求總線周期。只有在一個頁面長時間不被訪問時,才會產生額外的總線周期,因為TLB中不緩存這些被長時間冷落的頁面。要了解更多關于TLB的信息,請參見章節3.12“旁路轉換緩沖(TLB)”。
??? 3.6.1 分頁選項
??? 在處理器的控制寄存器中,有三個標志用于控制分頁:
??? PSE標志用于使能“大號頁面”,如:4-MByte頁面或2-MByte頁面(2-MByte頁面還需要設置PAE標志),若要啟用4-KByte頁面,則需要將PSE清零,要了解更多PSE相關信息,請參閱章節3.7.2“線性地址轉換(4-MByte頁面)”,章節3.8.3“使能PAE的線性地址轉換(2-MByte頁面)”,及章節3.9“使用PSE-36分頁機制的36位物理尋址”。
??? PAE標志提供了一種擴展物理地址寬度的方法,即MAXPHYADDR。
注意:對于處理器不支持CPUID子命令80000008H的情況,MAXPHYADDR即是36位的,否則將由下面指令來標識MAXPHYADDR的位長,即CPUID.80000008H:EAX[bits 7:0]。
??? 這種擴展的物理地址只有在分頁被使能的情況下才可以使用,而且還要依賴于一個附加的頁目錄指針表,此表會與頁目錄及頁表配合工作以實現對FFFFFFFFH以外地址空間的尋訪。要了解更多運用PAE標志擴展物理地址的相關信息,請參見章節3.8“使用PAE分頁機制進行36位物理尋址”。
??? 在Intel 64位處理器中使能PAE標志,可增強物理尋址范圍(例如支持36位以上的物理尋址),主要應用于IA-32e模式的地址轉換(參見章節3.10“IA-32e模式的PAE分頁”),以及增強老式的地址轉換能力(參見章節3.8.1“使用PAE增強老式分頁功能”)。
??? 36位頁長度特性(簡稱PSE-36特性),使得物理尋址范圍也可擴展至36位(當然也可以是32位),而這些是要靠設置CR4中的PSE標志來完成的。另外,還可以通過CPUID指令來獲悉當前PSE-36的物理尋址能力(此時CPUID的操作數為‘1’,返回值會被保存于EDX的bit17)。要了解更多關于PSE-36物理地址擴展及頁長度擴展機制的信息,請參見章節3.9“基于PSE-36分頁機制的36位物理尋址”。
?
?
? 【作者:lion3875 原創文章 參考文獻《Intel 64 and IA-32 system programming guide》】
??? 3.6 分頁概述
??? 在IA-32架構的保護模式中,處理器要么將線性地址空間直接映射至物理內存空間(當擁有4GB物理內存時),要么間接的映射至較小物理內存(低于4GB)或磁盤空間,后一種映射方式通常用于虛擬內存管理。
??? 啟用分頁功能后,處理器會將線性地址空間分割成多個固定大小的頁面(如4KB、4MB或2MB),然后將這些頁面映射到物理內存或磁盤空間。當程序(或任務)訪問一個邏輯地址時,處理器便會先將其轉換為線性地址,然后再利用分頁機制將線性地址轉換為物理地址。
??? 如果一個被訪問的頁面沒有在物理內存中(而是在磁盤空間),處理器便會產生一個“頁錯誤”異常(#PF),此異常的處理程序會指導操作系統或執行體將被訪問的頁面從磁盤空間裝入物理內存(也許這時在物理內存空間的頁面正在被寫入到磁盤空間)。當頁面被裝入物理內存后,異常處理程序會正常返回,然后CPU會重新執行導致異常發生那條指令。另外,在頁目錄及頁表中還保存著用于處理器將線性地址轉換為物理地址的重要信息,以及用于產生頁錯誤異常的重要信息。
??? 與分段不同,分頁是通過多個固定長度的頁面實現的,而分段則是將代碼區域的長度與數據區域的長度分開規劃的。在分段機制中,一個數據塊若需要被裝入物理內存,就要一次全部裝入,而分頁機制則可以將要訪問的數據塊的一部份裝入內存,另一部份留在磁盤空間。
??? 為了降低地址轉換所帶來的總線周期開銷,最近經常被訪問的頁目錄及頁表項會被裝入處理器內部的一個器件中,即TLB(旁路轉換緩沖)。TLB可以滿足當前大多數頁目錄及頁表的讀取操作,無需請求總線周期。只有在一個頁面長時間不被訪問時,才會產生額外的總線周期,因為TLB中不緩存這些被長時間冷落的頁面。要了解更多關于TLB的信息,請參見章節3.12“旁路轉換緩沖(TLB)”。
??? 3.6.1 分頁選項
??? 在處理器的控制寄存器中,有三個標志用于控制分頁:
- PG(分頁)標志 - 位于CR0的bit31(從Intel386開始,IA-32家族便開始支持此選項)。
? - PSE(頁面長度擴展)標志 - 位于CR4的bit4(將在Pentium處理器中加以介紹)。
? - PAE(物理地址擴展)標志 - 位于CR4的bit5(將在Pentium Pro處理器中加以介紹)。
?
??? PSE標志用于使能“大號頁面”,如:4-MByte頁面或2-MByte頁面(2-MByte頁面還需要設置PAE標志),若要啟用4-KByte頁面,則需要將PSE清零,要了解更多PSE相關信息,請參閱章節3.7.2“線性地址轉換(4-MByte頁面)”,章節3.8.3“使能PAE的線性地址轉換(2-MByte頁面)”,及章節3.9“使用PSE-36分頁機制的36位物理尋址”。
??? PAE標志提供了一種擴展物理地址寬度的方法,即MAXPHYADDR。
注意:對于處理器不支持CPUID子命令80000008H的情況,MAXPHYADDR即是36位的,否則將由下面指令來標識MAXPHYADDR的位長,即CPUID.80000008H:EAX[bits 7:0]。
??? 這種擴展的物理地址只有在分頁被使能的情況下才可以使用,而且還要依賴于一個附加的頁目錄指針表,此表會與頁目錄及頁表配合工作以實現對FFFFFFFFH以外地址空間的尋訪。要了解更多運用PAE標志擴展物理地址的相關信息,請參見章節3.8“使用PAE分頁機制進行36位物理尋址”。
??? 在Intel 64位處理器中使能PAE標志,可增強物理尋址范圍(例如支持36位以上的物理尋址),主要應用于IA-32e模式的地址轉換(參見章節3.10“IA-32e模式的PAE分頁”),以及增強老式的地址轉換能力(參見章節3.8.1“使用PAE增強老式分頁功能”)。
??? 36位頁長度特性(簡稱PSE-36特性),使得物理尋址范圍也可擴展至36位(當然也可以是32位),而這些是要靠設置CR4中的PSE標志來完成的。另外,還可以通過CPUID指令來獲悉當前PSE-36的物理尋址能力(此時CPUID的操作數為‘1’,返回值會被保存于EDX的bit17)。要了解更多關于PSE-36物理地址擴展及頁長度擴展機制的信息,請參見章節3.9“基于PSE-36分頁機制的36位物理尋址”。
?
轉載于:https://blog.51cto.com/lion3875/532644
總結
以上是生活随笔為你收集整理的IA-32系统编程指南 - 第三章 保护模式的内存管理【2】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMware:为中国中小企业建立“外部云
- 下一篇: Appointment over SMS