實體位址擴充
此條目翻譯自英語維基百科,需要相關領域的編者協助校對翻譯。 |
實體位址擴充(Physical Address Extension,縮寫為PAE),又釋實體位置延伸,是x86處理器的一個功能,讓中央處理器在32位元作業系統下存取超過4GiB的實體記憶體。
PAE為IntelPentium Pro及以上級別的CPU(包括除了匯流排頻率為400MHz的這個版本的奔騰M之外的所有新型號奔騰系列處理器)所支援,其他相容的處理器,如速龍(Athlon)和AMD的較新型號的CPU也支援PAE。
x86的處理器增加了額外的地址線以選擇那些增加了的記憶體,所以實體記憶體的大小從32位元增加到了36位元。最大的實體記憶體由4GiB增加到了64GiB。
32位元的虛擬地址(線性地址)則沒有變,所以一般的應用軟件可以繼續使用地址為32位元的指令;如果用平面主記憶體模式的話,這些軟件的地址空間也被限制為4GiB。作業系統用頁表將這4GiB的地址空間對映到大小為64GiB的實體記憶體,而這個對映對各個行程一般是不一樣的。這樣一來,即使不能為單單一個程式所用,那些增加了的實體記憶體仍然可以發揮作用。
對於需要超過4GiB主記憶體的應用軟件來說,除了一般的PAE支援,還需要作業系統提供另外的特殊的技術。在Windows上,這種技術叫做Address Windowing Extensions(AWE)。而在類Unix的系統上則有多種技術在使用,例如使用mmap()按需要把一部分檔案對映到地址空間;但是,這還沒有成為一個標準。
頁表結構
[編輯]在傳統的32位元的保護模式中,x86處理器使用一種兩級的轉換方案。在這種方案中,控制暫存器CR3
指向一個長4KiB的頁目錄(page directory);頁目錄又分為1024個每個4KiB的頁表(page table);最後頁表又分為1024個每個長4KiB的頁。
啟用PAE(通過設置控制暫存器CR4
的第5位來啟用)會改變上面的方案。預設情況下,每頁的大小是4KiB的。頁表和頁目錄中的表項都從32位元擴為64位元(8位元組)以使用附加的地址位。但是,頁表和頁目錄的總大小不變。所以,頁表和頁目錄現在都只有512個表項。因為這變成了原來方案的一半,所以另外的一個級加了進來:CR3現在指向的是頁目錄指標表,即一個包含4個頁目錄指標的表。
頁目錄裏的表項的第7位叫做PS
(Page Size)。如果這個位設為1,則頁目錄的表項不再指向頁表,而是指向一個2MiB的頁。頁目錄里還有另外一個叫NX位元的標誌位。它是第63位,表示No eXecute。因為頁表項中最低的12位元,要麼是這種標識位,要麼是和作業系統相關的數據,所以最多可有52位在將來用於在252 位元組,即4pebibyte的實體記憶體中定址。
現在,x86架構只使用該52位中的36位元。對於在長模式(long mode)中的x86-64處理器,PAE是必須的;其中AMD64使用了52位中的40位或48位元[1],而Intel64將最多使用46位[2]。
CPU對PAE模式的支援可以通過CPUID標誌PAE來辨識。
-
未啟用PAE, 4 KiB的頁
-
未啟用PAE, 4 MiB的頁
-
啟用PAE,4 KiB的頁
-
啟用PAE,2 MiB的頁
作業系統的支援
[編輯]FreeBSD
[編輯]FreeBSD的4.x系列從4.9開始支援PAE,而5.x系列則從5.1開始。6.x及以後的系列都支援PAE。對內核的PAE的組態是必須的。如果一個可載入內核模組是啟用了PAE的,則它只可以被載入到一個啟用了PAE的內核;FreeBSD中二進制版本的模組沒有啟用PAE,所以它們不能載入到啟用了PAE的內核。並不是所有驅動程式都支援4GiB的實體記憶體的;這種驅動程式不能在啟用了PAE的內核下正常工作[3]。
Linux
[編輯]Linux內核從2.6版本開始全面支援PAE[4],這使得在32位元的機器上可以訪問高達64GiB的實體記憶體。啟用了PAE的Linux內核還需要同樣支援PAE的CPU。從2008年起,很多一般發佈的Linux版本都預設使用啟用了PAE的內核。
Mac OS X
[編輯]執行在Intel CPU上的Mac OS X都支援PAE和NX位;在受蘋果支援的CPU上它也支援該兩種特性。即使Mac OS X 10.5 Leopard內核仍然是32位元的,但是Mac Pro和Xserve系統現在也是支援32GiB的RAM的。[5]
Solaris
[編輯]Solaris從版本7開始支援PAE。但是,版本7的那些沒有專門支援PAE的第三方驅動程式在支援PAE的系統上可能會發生錯誤,甚至完全崩潰。[6]。
Windows
[編輯]PAE受下列版本的32位元版的Windows所支援:[7][8]
系統版本 | 最大實體記憶體支援 |
---|---|
Windows 2000 Advanced Server | 8 GiB |
Windows 2000 Datacenter Server | 32 GiB |
Windows XP [9] | 4 GiB |
Windows Server 2003 Enterprise Edition | 32 GiB |
Windows Server 2003 SP1+ or R2 Enterprise Edition | 64 GiB |
Windows Server 2003 Datacenter Edition [10] | 64 GiB |
Windows Server 2003 Standard Edition | 4 GiB |
Windows Vista | 4 GiB |
Windows Server 2008 Enterprise or Datacenter Edition | 64 GiB |
Windows Server 2008 other editions | 4 GiB |
Windows 7 Starter | 2 GiB |
Windows 7 other editions | 4 GiB |
Windows XP SP2和其他新的版本,預設在有no-execute (NX)和execute-disable (XD)特性的處理器上以PAE模式執行以允許NX。NX(或XD)在頁表項的第63位。如果沒有PAE,頁表項就只有32位元;所以要利用NX這個特性的話,就必須執行在PAE模式下。但是,基於保證驅動相容性等原因,微軟通過許可證,在內核中把電腦版Windows(包括Windows XP、Windows Vista和Windows 7)和部分低階Windows Server的實體位址空間限制為4GiB。
參見
[編輯]- PSE-36: an alternative to Physical Address Extension
- Page Size Extension
- Architecture of Windows NT
參考資料
[編輯]- ^ Intel 64 and IA-32 Software Developer's Manual—Volume 3A (PDF). Intel. [2007-11-16]. (原始內容存檔 (PDF)於2009-02-20). Page 3.42.
- ^ Intel 64 architecture increases the linear address space for software to 64 bits and supports physical address space up to 46 bits." on page Vol. 1 2-21 of Intel 64 and IA-32 Architectures Software Developer's Manual September 2014 (頁面存檔備份,存於互聯網檔案館)
- ^ FreeBSD PAE(4) man page. 2003-04-08 [2007-11-26]. (原始內容存檔於2021-02-25).
- ^ Wonderful World of Linux 2.6. (原始內容存檔於2003-07-16).
- ^ Road to Mac OS X 10.6 Snow Leopard: 64-Bits. 2008-09-26 [2008-09-26]. (原始內容存檔於2020-12-10).
- ^ Solaris 7 5/99 Release Notes (Intel Platform Edition), Appendix B: Hardware Compatibility List and Device Configuration Guide (Intel Platform Edition) 5/99. 1999 [2007-11-26].[永久失效連結]
- ^ Memory Limits for Windows releases. Microsoft. December 5, 2007 [2007-12-10]. (原始內容存檔於2007-12-17).
- ^ Intel Physical Addressing Extensions (PAE) in Windows 2000. Microsoft. October 26, 2007 [2007-12-29]. (原始內容存檔於2015-03-06).
- ^ Physical Address Extension. Microsoft. [2008-12-15]. (原始內容存檔於2008-04-30).
- ^ Memory Support and Windows Operating Systems. 2007 [2008-03-22]. (原始內容存檔於2011-02-19).