Program Files(x86) 與 SysWow64

如果用的是 64 位 Windows,你會發現硬盤上有兩個名爲 Program Files(x86)和 SysWOW64 的新文件夾,它們在 32 位 Windows 上不存在。 它們有什麼用呢?

什麼是WOW64

64位的 Windows 並不是簡單地把所有東西都編譯成 64 位就萬事大吉的。關於 64 位的 CPU 應該做成什麼樣子,Intel 和 AMD 曾有各自的打算。AMD 的回答直接了當:新的 64 位處理器,應該能在提高更高處理能力的同時,保持對 32 位應用程序的兼容性。而 Intel 則希望藉此機會,把下一代的處理器,設計得更完美。於是,就有了 AMD 的 x86-64(後被稱爲 amd64)的處理器和 Intel 的 IA-64(安騰)處理器。和 amd64 不一樣的是,安騰處理器並沒有很好地提供對 32 位應用程序的支持。具體信息,讀者在網上應該很容易找到,也就不多說了。

Windows 作爲一個操作系統,自然希望用戶在運行64位操作系統時,也能像以前一樣,運行各種 32 位應用程序。這一點,在 amd64 處理器上,相對容易做到。而安騰,幾乎是另外一回事。(後來Intel 也生產了兼容 amd64 的處理器,但那是後話。)

雖然我說“相對”容易做到,但也不是空手套白狼。當操作系統運行在 64 位時,怎麼才能保證已經存在的 32 位應用程序以爲自己仍然運行在 32 位系統上呢?微軟的解決方案是:Wow64,全稱是 32bit Windows On 64bit Windows(64位Windows上的32位Windows)。

你也可以這樣理解,雖然整個系統是運行在64位模式,但如果一個應該程序是32位的,Windows會在64位的基礎上,加載一個“32位的Windows”。這樣,這個32位應用程序就以爲自己是運行在32位的系統之上的。

於是,你也可以想象,這就意味着,64 位的 Windows,不但帶有64位操作系統應有的系統文件,還帶有32位系統應有的系統文件。

我們都知道的是,Windows 系統的主要系統文件都是放在一個叫做 System32 的文件夾中的。爲了能同時放下兩套系統文件,Windows 會在 64 位的系統上,增加了一個文件夾,叫 SysWow64。

這便有了一個問題,System32 和 SysWow64 裏面,哪個放的是64位的系統文件,哪個放的是32位的系統文件呢?

如果你還記得 Wow64 指的是 64 位 Windows 上的 32 位 Windows,那麼,你就能會想到,SysWow64 裏放的是 32 位的系統文件。但你也可能會問,爲什麼一個明明叫 System32 的文件夾裝的是64位的系統文件,而一個明明叫 SysWow64 的文件夾裝的卻是32位的系統文件呢?既然是64位的系統,爲什麼不能有 System64 和 System32 這樣的文件夾呢?

這個問題問得很好。答案也很簡單:人在江湖,身不由己。

兼容性

如果我問你,可曾有多少機會接觸過安騰處理器呢?我想,對於一般人來講,應該是沒有的。那爲什麼amd64會大行其道,而安騰處理器卻鮮爲人知呢?還是因爲一個軟硬件設計上的關鍵概念:兼容性。

正是因爲安騰處理器,沒有做好對已有的32位系統提供良好的支持,便其一直處於市場的邊緣。這和你不會買一臺看不了模擬信號頻道的高清電視是一個道理。

之前我們談到的兼容性,是指在64位Windows上,兼容已經有的32位應用程序。現在考慮另一種兼容性。

如果你寫了一個很牛的32位的應用程序,現在,你想把它變成64位的應用程序,以更充分地利用64位處理器所帶來的新的處理能力。你肯定覺得,這不就是讓64位編譯器編譯一遍就完了的事兒麼?可能你發現,這並不是骨感的現實。你突然發現,你的程序裏,爲了某些你已經想不起來的原因,把System32這個文件夾,寫死在了你的程序裏。而這個System32中的32,讓你很不安。你嘗試着運行了你的程序,卻發現一切正常。爲什麼呢?因爲這是Windows系統的另一個兼容性方面的努力:讓一個已有的32位應用程序,不加修改或者儘可能少地加以修改,便可以被編譯成64位應用程序並在64位Windows上運行。其實,把System32這樣的路徑,寫死在程序裏,並不是一個個案。所以,爲了保證這些應用程序可以順利地過渡到64位,Windows最後還是決定讓64位的系統文件放在System32的文件夾下。而讓32位的系統文件,搬到了SysWow64中去。

你肯定會想,那讓32位搬到SysWow64中去以後,那些寫死在32位應用程序中的System32怎麼辦?答:Windows會給他們轉向到SysWow64中去。那讓64位中的System32轉向到System64不也是一樣麼?真的一樣麼?不一樣麼?真的一樣麼?不一樣麼?真的不一樣。

作爲64位Windows操作系統,當然是希望能充分發揮64位處理器的潛力,讓應用程序更有效率地運行。如果在運行64位應用程序時,總要檢查是否需要轉向,勢必影響程序運行效率。所以,不能給64位應用程序做沒有必要的轉向,如果說必須要轉,那就只能轉32位應用程序了。是的,沒有辦法,在64位操作系統中,32位應用程序要做一些小的犧牲。

此外,爲了保證32位應用程序不與64位應用程序相沖突,除了System32文件夾外,註冊表也需要爲32位和64位提供兩套,也需要讓32位的應用程序在必要時重定向。

結論

所以SysWow64文件夾,是64位Windows,用來存放32位Windows系統文件的地方。

當 32 位程序需要訪問 Program Files 或者 System32 中的文件時,系統會自動轉向到 Program Files(x86) 或者 SysWoW64 中,這樣 32 位的程序就可以正常的在 64 位 Windows 中運行了。類似的情況也發生在應用程序安裝的時候,64 位的程序一般都會被安裝到 Program Files 中,而 32 位的程序則是裝在 Program Files(x86) 中。
在這裏插入圖片描述

參考文章

[1] 什麼是SysWow64
[2] The ‘Program Files (x86)’ and ‘SysWOW64’ folders explained

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章