Windows x64 目前最需要的,是更多的軟體支援,這可以分成驅動程式和應用程式等兩個方向來討論。大多數的 Win32 應用程式應該都能直接在 Windows x64 環境執行(不需要重新編譯,也就是二元碼相容),而這也是 x64 平台的一大優點,因為這讓企業可以繼續保有原本花費在 Win32 的 IT 投資。
Windows x64 的使用者模式有一個 WOW64 子系統(Windows On Windows64,WOW64.DLL),這個子系統將負責 32 位元應用程式與 Windows x64 作業系統之間的溝通:WOW64 子系統會將 32 位元應用程式的系統呼叫轉換成 Windows x64 作業系統的格式,然後再轉給 Windows x64;作業系統會以為這是由 WOW64 子系統所呼叫,而將結果傳給 WOW64,接著 WOW64 會再將 Windows x64 的傳回值轉換成 32 位元的格式,最後再送回當初發出呼叫的 32 位元應用程式。
因為 WOW64 子系統位於 Windows x64 的使用者模式,因此 WOW64 只能維繫 32 位元使用者模式程式與 Windows x64 的相容性,必須在核心模式執行的 32 位元應用程式或驅動程式,與 Windows x64 會有相容性的問題。
此外,在 Windows x64 當中,32 位元的應用程式不僅有完全與 64 位元程式互相獨立的執行環境,甚至連登錄機碼和軟體安裝的資料夾都各自獨立,以免兩種類型的軟體同時執行而發生衝突。因此程式裡不能混合 32 位元和 64 位元的程式碼;請牢記這點,因為許多軟體相容的問題都是因此而起。當然,個別的 32 位元和 64 位元行程可以透過行程之間的通訊結構(interprocess communications structures)相互傳送資料。雖然 32 位元應用程式在 64 位元作業系統依然會有 4 GB 的記憶體上限,但是卻可以擁有獨享的記憶體空間,不需要與作業系統核心、分頁表或其他的應用程式共用記憶體空間。
軟體相容性
大部分的 Win32 軟體應該都可以直接在 Windows x64 環境執行,不過仍有些特例。如果能瞭解這些例外情況,將有助於軟體的部署,並避免不相容的狀況發生。
Windows 32 On Windows x64
之前我提過 WOW64 子系統,這個子系統可以視為 Windows x64 所虛擬的 32 位元 Windows 執行環境,因此 WOW64 其實是為 "32" 位元程式而設計。此外,在 Windows x64 系統的 WINDOWS 資料夾裡面,SYSTEM32 資料夾也非如其名,這個資料夾實際上是放置 64 位元的系統檔案,SYSWOW64 資料夾才是放置 WOW64 子系統所需要的 32 位元系統檔案。
之所以有這種「32 是 64、64 是 32」的現象,是因為 Windows x64 在載入應用程式之前,並不知道程式是 32 位元還是 64 位元,而當載入並確認應用程式是 32 位元或 64 位元之後,64 位元的程式就使用 SYSTEM32 資料夾裡的系統檔案,而 32 位元的程式則被 WOW64 子系統導引並使用 SYSWOW64 資料夾裡的系統檔案;但是對 32 位元的程式來說,並不知道已經被導引到 SYSWOW64 資料夾,還是以為用的是 SYSTEM32 資料夾裡的系統檔案。因此,沒有符合 Windows 程式設計規範的 32 位元程式在 Windows x64 執行的時候,可能會因為無法被導引到 SYSWOW64 資料夾,而繼續使用 SYSTEM32 資料夾裡的 64 位元系統檔案,就會造成相容性的問題而無法執行。
還有一個類似的情況是安裝軟體的資料夾:Windows x64 有兩個安裝軟體的資料夾,一個是大家熟知的 Program Files,另一個是 Program Files (x86);前者「預設」是供 x64 應用程式使用,後者「預設」是用來存放 32 位元應用程式。如果程式是以微軟規範的方式取得安裝軟體資料夾的位置,例如環境變數或系統 API,就會得到上述預設的位置,不然就會發生 32 位元應用程式安裝到 Program Files 資料夾的結果。
類似的情況也會發生在存取系統的登錄資料庫。Windows x64 有兩個獨立的軟體設定值存放處,x64 應用程式是存放在 HKEY_LOCAL_MACHINE\SOFTWARE\,但是 32 位元應用程式則是存放在 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node。如果應用程式存取登錄資料庫的方式最終是藉由系統 API 來完成,那麼 WOW64 會將 32 位元應用程式對登錄資料庫的存取,導到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node。
無法執行 16 位元程式
WINDOWS 資料夾裡面雖然還有 16 位元系統檔案專用的 SYSTEM 資料夾,但實際上 16 位元的 Windows 軟體無法在 Windows x64 執行,因此這個資料夾通常是空的,就算真的將 16 位元的系統檔案安裝於此,16 位元的 Windows 軟體還是無法在 Windows x64 執行。
驅動程式的問題
另一類會發生相容性問題的程式,大多是與系統底層較為相關的程式,尤其是需要在核心模式執行的軟體,都必須升級到 x64 版本,這是因為 WOW64 位於 Windows x64 的使用者模式,無法處理需要在核心模式執行的軟體。
驅動程式必須在核心模式執行,許多防毒軟體的模組也必須在核心模式執行,這些軟體都得升級到 x64 版本。比較特別的是部分會以驅動程式的方式運作的軟體,常見的狀況是以列印的方式產生文件檔案,例如 Adobe Acrobat,就是以列印的方式產生PDF檔案,因此這類的軟體都會在系統安裝印表機驅動程式。但若印表機驅動程式仍是 32 位元,就會無法列印文件。實際上因為這些軟體提供的驅動程式都是 32 位元,因此軟體的安裝程式根本無法將驅動程式裝進 Windows x64 系統。
32 位元與 64 位元無法共同運作
Windows x64 並不允許 x64 應用程式直接呼叫或內含任何 32 位元的程式碼,因為32位元應用程式和 x64 應用程式是在兩個獨立的空間執行,這也會導致若干的相容性問題。例如 Windows x64 的檔案總管是 64 位元的應用程式,而像是 WinRAR 等軟體會以 Shell Extension 的方式來增加檔案總管的功能,例如以滑鼠右鈕按下壓縮檔所出現的快顯功能表會包含解壓縮的動作,就是利用 Shell Extension 的方式達成。檔案總管的 Shell Extension 其實是 COM 物件,這是 32 位元程式。因此在 Windows x64 環境,WinRAR 等軟體在檔案總管滑鼠右鈕所加入的功能都不見了。
另一個例子是 x64 版本的 Internet Explorer 和網頁內的 ActiveX 控制項。ActiveX 控制項也是 32 位元的程式,所以也無法與 x64 版本的 Internet Explorer 相互運作。但這麼一來會造成很多網頁無法正常瀏覽,因為網頁上的 Flash 動畫、ASF 影音檔案都必須依賴 ActiveX 控制項來播放,所以在 Windows x64 還保留了 32 位元的 Internet Explorer,就是為了能繼續執行 ActiveX 控制項。
有了作業系統、驅動程式,接著要考量的是應用軟體的數量。Win32 原本就擁有非常豐富的應用軟體,雖然這些軟體「應該」都能直接在 Windows x64 環境繼續執行,但是軟體開發商也漸漸體認到 x64 對高階運算的影響與重要性,因此已經有越來越多的 Windows x64 原生軟體面市,尤其是伺服端軟體;Windows x64 原生軟體才能展現 x64 龐大記憶體定址能力的優點。
以微軟的伺服器軟體產品而言,已經確定要大幅提高對 Windows x64 的支援,因此這兩年推出的伺服器軟體,大多都已提供了 Windows x64 版本。以下簡述微軟目前所提供的 Windows x64 伺服器軟體。
•
Windows Server 2003 R2:包括標準版、企業版、Datacenter 等三款功能、需求各異的 Windows Server 2003 R2 版本。
•
Windows Server "Longhorn":下一代的 Windows Server 不僅將會有 x64 版本,而且也可能是最後一款 32 位元的 Windows 伺服器作業系統。
•
Microsoft Exchange Server 2007:正式版本僅支援 x64 版本,32 位元版本僅有試用版。
•
Microsoft SQL Server 2005:標準版、企業版和開發版都另有 x64 版本。
•
Microsoft BizTalk Server 2006
•
Microsoft Commerce Server 2007
•
Microsoft Virtual Server 2005 R2
•
Microsoft Operations Manager 2005
簡化 IT 管理成本
x64 處理器的另一項優點,是可以簡化組織內的 IT 管理成本,甚至簡化軟體開發成本。對 IT 人員管理系統或網路來說,管理 Windows x64 與 32 位元 Windows 的方式幾乎完全相同,IT 人員只要使用相同的管理工具,就能將 Windows x64 加入現今的 Windows 網路系統;此外,這更是保障了企業主目前部分的 IT 投資。這些優點源自於 x64 架構是以 x86 延伸而來,如此的作法讓 Windows x64 能夠相容現今的 32 位元 Windows 應用程式。
從 32 位元延伸到 64 位元,延伸而來的不只是更大的記憶體存取能力和更快的執行速度,還能實現更多的應用。隨著 x64 處理器和相關硬體周邊的成熟,再加上微軟推出 Windows x64,以及更多 x64 版本的伺服器軟體,x64 在高階如伺服器的應用已經逐步成熟。例如 Windows Server 2003 Datacenter Edition 或企業版能提供 1 TB 的實體記憶體存取空間,再搭配 x64 版本的 SQL Server 2005,將能一次將整個龐大的資料庫載入記憶體,提供用戶端最快速、穩定的資料存取服務。