2008-10-01

讓 32bit Vista 用到 4GB 以上記憶體

近一年 RAM 價大降,2GB DDR2 記憶體不到 HK$300,主機板插滿 4 條 RAM 槽完全是可以實現的事。問題是主機板插足 8GB 記憶體,操作系統卻會認不足數。目前主流 Microsoft Windows 操作系統都是 32bit 版本最多人用,而 32bit 系統採用記憶定址 32bit 可以認到的記憶體數目不足 4GB,其中有部分給週邊裝置用作 I/O 記憶體,實際上只能用到 3.2GB 。
32bit 認足 4GB 記憶體是硬件或程式設計的限制,亦跟歷史發展有關。早在 1980年代,由 16bit 處理器 80286 發展至 32bit 的 80386,廿多年後一般用戶面對 32bit 運算的 4GB 限制。回顧過去,在 1979 年推出 PC 電腦始祖處理器 8088 ,那是 16bit 機器(8bit資料匯流排),發展至 1980年代初期的 80286 才算完整的 16bit 處理器。由 16bit 過度至 32bit 用了十年時間,相對來說,32bit 處理器的設計生命週期要長許多。
用過 80386 處理器的電腦玩家,相信會見識過由 16bit 過度至 32bit 電腦運算的光景。 Windows 3.1 有所謂 Real Mode 、Standard Mode 、386 Enhanced Mode 等操作模式已應合不同的處理器設計。所謂 Real Mode(亦稱 Real address mode)是為了兼容 8088 的 8bit 定址,因為 8088 採用 20bit 記憶定址,所以只能認到 1MB (2 的 20 次方)。
MS-DOS 運行 Real Mode 所以只能用到 1MB 記憶體,實際上 DOS 程式亦只用到 640KB 記憶體(即所謂 640KB 限制), 640KB 以上位址分配合週邊裝置(如顯示卡、網絡卡) I/O 使用,情況類似現在 32bit Windows 只能用 3.2GB 的情況一樣。以前 DOS 要用到 640KB 以上記憶體,可以使用兩個方法:XMS(eXtended Memory)及 EMS(Expanded Memory) 。兩者都是記憶管理程式,前者在要 config.sys 加 device=himem.sys 載入管理程式,後者則用 emm386.exe 來管理。
以前玩 DOS 遊戲為了用到 1MB 以上記憶體,就需要配置 himem.sys 及 emm386.exe 的設定,有所謂 Load Hi 技巧將部分 DOS 系統搬上 640KB 至 1024KB 之間的記憶位址,以騰出 640MB 以下記憶空間運行 DOS 程式,因為 DOS 程式只能用到這段記憶體空間。那時候,亦有動用 EMS 記憶體來做模擬 RAMdisk 。當時是將整個遊戲抄上 RAMDisk 去運行,玩完後又將遊戲 .sav 檔儲存到硬碟機以便永久儲存,因為關機後,RAMDisk 內俗便會消失。
現在電腦用戶不必跟記憶體模式打交道,甚至學習電腦語言亦不必知道處理器如何運用記憶體。不過,以前學寫程式(例如學 C 或組合語言、BASIC 除外),在編譯程式時決定使用甚麼類型的記憶模式(Memory Model)是重要的事,選不好編譯出來的程式可能無法運行。
回說 32bit 系統使用 4GB 以上記憶體問題, IT 業界(主要是 Intel)似乎參考過往的系統設計,提供一個 PAE 模式(Physical Adress Extension),將 32bit 記憶位址增加 4bit,變成 36bit 定位,故此能使處理器認到 64GB 記憶體。據微軟網站的資料,即使啟動了 PAE, XP 及 Vista 最多只能認用到 4GB。實際上,的確如此。
不過,用了 Gavotte Ramdisk 加了一個 Registry 設定後,竟然令 Vista SP1 認到 6GB 記憶體,並且可設定 2.74GB 的 RAMDisk ,其間沒有特別強制啟動 PAE 模式。這使我臆測 Vista SP1 預設開啟 PAE,又或者 Gavotte Ramdisk 幫 Vista 開啟 PAE。無論如何,絕大部分應用軟件都不能支援 PAE 用到 4GB 以上的記憶體,似乎只有 Gavotte Ramdisk 才能用到。
這個大容量 RAMDisk ,足可改幾隻光碟 ISO 檔,如果安裝 8GB 記憶體的話,可以放一隻 DVD 光碟 ISO 。目前 RAMDisk 的用途除了放 Pagefile.sys 及暫存檔之外,我目前只用來做暫存工作區,即使先下載檔案到 RAMDisk 使用,需要保留的才儲存硬碟,又或者用來放光碟 ISO 影像、運行虛擬機等。
虛擬機在 RAMDisk 中運行速度的確可以很快,安裝精簡版 XP 只須 10 分鐘,其虛擬硬碟檔只有 1.7GB,足可放我設定的 RAMDisk,平日用來試軟件,都幾合用。不過,要將虛擬硬碟機抄上 RAMDisk 也需要一點時間的,未免有點麻煩。

如要用盡 4GB 以上記憶體,32bit 系統啟動 PAE 用 RAMDisk 始終是折衷方法,最理想的自然是升格上 64bit 平台,運行 64bit Vista。64bit 系統採用 64bit 記憶定址方法,所能取用的記憶體數量是天文數字( 2 的 64次方)。可是現時 64bit 軟件不多, 32bit 軟件在 64bit Windows 效率稍遜。
將來人們會否由 32bit 過度至 64bit 系統?我就覺得缺乏誘因,現時 64bit 運算除了運用更多記憶體外,一般應用程式的運行效率並不見得比起 32bit 的出色到那裡。 況且,64bit 系統佔用系統記憶體較多,如果沒有 6GB 以上,使用 64bit 系統並無好處。