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