close

[轉貼自]http://www.mobile01.com/topicdetail.php?f=300&t=939023&p=2#10337281


這個問題...說真的...即使是正在念資訊科系的,不清楚相關理論跟實務背景資訊的,所在多有,絕對不要用2^N次方這種計概所學的基本二進位算數來解釋N位元作業系統能夠管理的實體記憶體的問題...廿幾年前的16位元DOS為何能夠管理1MB(2^20)的空間,而不是只有2^16=64KB?最早版本、基於(也是16位元)80286處理器的OS/2作業系統,為何能夠管理16MB(2^24)的實體記憶體?同樣是16位元處理器,為何在8086/8088之後,還要推出80286?

一些最常見關於32位元處理器/作業系統的誤解一定要先破除,錯誤觀念才不會一傳再傳:


32位元處理器並非一定只能有32條位址線
例:Pentium Pro(36條)、Motorola/Freescale
PowerPC
e500(36條)

32位元處理器並非一定只能有32條資料線
例:Pentium(64條)、80386SX(16條)、Motorola
68000(16條)

32位元作業系統並非一定只能管理2^32=4GB的實體記憶體/實體定址位址
例:32-bit的Linux、FreeBSD、Solaris、Win
Server 2003/2008
Enterprise、移除封印後的Vista/Win7(都可到64GB)

32位元處理器/作業系統所提供的定址模式,並非一定只能讓32位元程式存取2^32=4GB的定址空間
例:透過IA-32的Selector:Offset定址模式,能提供予每個程式的虛擬定址空間上限是2*8192*4GB=64TB

2^32=4GB是IA-32作業系統在Flat定址模式每個執行中的process所能擁有的虛擬定址空間上限,拿來解釋IA-32作業系統能夠管理的實體記憶體總量?一整個張冠李戴....32位元Linux、FreeBSD、Solaris、Windows Server
2003/2008
enterprise版這些身心健全的IA-32作業系統,都可以管理到遠超過4GB、最高到64GB的實體記憶體,這些並非全部都是伺服器作業系統。

32-bit WinXP SP1雖然安全性極差,但純就能管理的記憶體來說,在啟動PAE以及Memory
re-mapping的情形下,絕對可以管理超過4GB以上的實體定址位址,不信的人弄一版親自裝裝看作個實驗吧!從32位元WinXP SP2之後一直到最新的Win
7,才都被微軟加上了一道只能管理4GB實體位址的封印。


這是之前回給audiofan兄解釋類似問題的一些資料:

http://www.mobile01.com/topicdetail.php?f=174&t=926985&p=9#10202809
=============================================================
我想問題來自於您似乎把PAE視為伺服器作業系統專用的模式,跟IA-32架構是分開來看的,但是從PAE作為IA-32架構的重要延伸被定義出來後一直到今天,早已經比從IA-32誕生到PAE被定義還來得久了(沒有PAE的386、486、Pentium、Pentium
MMX,有PAE的Pentium Pro、Pentium II、Pentium !!!、Pentium M、Pentium 4、Pentium D、Core
Duo、Core 2 Duo、Core 2 Quad、i7、i5、Celeron、Xeon家族、Pentium Dual-Core),另外從AMD
Athlon處理器也早早就提供了PAE模式,所以今天幾乎都不特別強調是"Intel" PAE
mode了。

另外您似乎認為今天的作業系統大多還預設處在IA-32最原始的32條位址線實體定址、而啟用PAE模式是很稀有的事。事實上PAE模式的運用也比您認為的來得普及,在今天最普遍、絕大多數人在用的主流32位元XP/Vista系統上,PAE模式都已經預設被啟用了,這是因為目前所有的處理器幾乎都支援eXecute
Disable(XD, Intel)/No eXecute(NX, AMD)功能,配合從XP SP2開始提供的Data Execution
Prevention(DEP),提供軟硬體協同的防止緩衝溢位攻擊安全防護。

但是對於處理器跟作業系統來說,在32位元模式下要提供硬體XD/NX支援,處理器本身必須先被設定處於PAE模式。而從XP
SP2以後到Vista
SP2,預設值都是啟動軟硬體協同DEP(安全性功能應該沒人不要吧!),因此除非您刻意從BIOS關閉處理器的XD功能(沒事不建議這樣玩,地球的網路是很危險的),不然作業系統都會預設先啟用PAE模式。您去看絕大多數人的Windows
XP系統基本資訊那一頁,就算只有512MB記憶體,也幾乎都會看到"實體位置延伸"字樣,這表示XP已經處於PAE模式了,如果是Vista/Win
7,可以用Everest這個工具去確認。

參考資料:AMD 和 Intel
這兩家公司都已經定義並且生產了支援 DEP 的 Windows 相容架構。如果要使用這些處理器功能,處理器必須以「實體位址延伸」(PAE)
模式執行。不過,Windows 將會自動啟用 PAE 模式來支援 DEP。使用者不需使用 /PAE 開機參數個別啟用 PAE。


問題來了:既然PAE已經被預設啟動了,為何32位元XP/Vista/Win7還是定址不到4GB以上的實體位址?這是微軟自己本身刻意的技術性市場區隔,事實上處理器跟晶片組都已經被XP/Vista/Win7設定為能夠處理36條位址線實體定址的狀態(PAE啟動),只是XP/Vista/Win7卻又很彆扭的拒絕去處理任何定址在4GB以上的實體定址位址,前面才會有網友提到利用Gavotte
RAMdisk這種自力救濟方案:既然處理器跟晶片組已經處於能夠處理36條位址線定址的狀態,但是XP/Vista鬧彆扭,那就讓Gavotte去存取那些XP/Vista/Win7拒絕承認、被定址在4GB以上實體位址的記憶體做成RAMdisk,以物盡其用。

Gavotte已經有很多網友快樂的使用中了,因此不用懷疑在32位元模式下絕對是可以存取到超過4GB的實體記憶體的。另一個範例是微軟幾乎刻意絕口不再提起的XP
SP1,啟動PAE後,也是可以定址到4GB以上的實體位址。您想想看,XP SP1是哪一年推出的?另一個知名的商業軟體SuperSpeed RAMdisk
Plus,也已經提供類似Gavotte的功能了。


參考資料:
Licensed Memory in 32-bit Windows Vista
Memory Limits for Windows
Releases


因此問題出在微軟對於已經預設啟動PAE模式的消費性32位元XP/Vista/Win7、卻又加上一道額外的封印,並非PAE本身是什麼奇怪、非正規的模式。即使是64位元的Vista、理論上可以管理多到目前主機板上插不下的記憶體,其Basic版也被限制在"只能"用8GB的實體記憶體。而同樣充分支援PAE的32位元Windows
Server作業系統,低階版本能夠管理的記憶體也被微軟刻意限制在4GB,而中高階版可以管理到64GB的實體記憶體。

綜合上述,PAE早就是IA-32架構以及IA-32作業系統密不可分的一部份了,因此不用將IA-32跟PAE刻意分開來看

關於PAE啟動後的效能損失,也不用刻意去放大它,因為如前面所提,PAE預設幾乎都是會被Windows啟動的,不需要去改什麼boot.ini(XP)、或用bcdedit強制啟動(Vista/Win7),就算PAE有效能損失,微軟也已經幫你預設打開了。但是有所失必有所得,啟動PAE後存取多一層分頁表的效能損失(啟動PAE後,分頁表的查詢由兩層變三層,而64位元Vista/Win7的分頁表的查詢,原本便是三層,如果要講效能損失,32/64一樣都是三層),透過如Gavotte
Ramdisk這種應用方式,由於能夠被充分運用的記憶體變多了、因而少去存取硬碟這種相對慢很大的儲存媒體,絕對能夠將其彌補回來。已經很多網友將Page
file、Temp folder、Internet temp
files...指向Gavotte作出的RAMdisk,用過的人絕大多數對效能改進都是滿意的。

參考資料:http://www.linux-cn.com/html/news/hot/20091231/59678.shtml

同理,如果32位元XP/Vista沒有被封印,能夠自力管理的記憶體因預設開啟PAE變多了、
因而能少去硬碟存取page
file、多將程式保持在記憶體中不swap出去到硬碟、多一些記憶體作為SuperFetch的快取,也是能夠將多存取一層分頁表的效能損失彌補回來。(3月更新:最近還真的有將32-bit
Vista/Win 7的封印解除的方法出現,詳見257樓、219樓,XP不適用)

今天問題根源在於微軟的心態,而非PAE有何原罪....
arrow
arrow
    全站熱搜

    chyuanyiin 發表在 痞客邦 留言(0) 人氣()