64位的Windows并不是簡(jiǎn)單地把所有東西都編譯成64位就萬事大吉的。關(guān)于64位的CPU應(yīng)該做成什么樣子,Intel和AMD曾有各自的打算。AMD的回答直接了當(dāng):新的64位處理器,應(yīng)該能在提高更高處理能力的同時(shí),保持對(duì)32位應(yīng)用程序的兼容性。而Intel則希望借此機(jī)會(huì),把下一代的處理器,設(shè)計(jì)得更完美。于是,就有了AMD的x86-64(后被稱為amd64)的處理器和Intel的IA-64(安騰)處理器。和amd64不一樣的是,安騰處理器并沒有很好地提供對(duì)32位應(yīng)用程序的支持。具體信息,讀者在網(wǎng)上應(yīng)該很容易找到,也就不多說了。 Windows作為一個(gè)操作系統(tǒng),自然希望用戶在運(yùn)行64位操作系統(tǒng)時(shí),也能像以前一樣,運(yùn)行各種32位應(yīng)用程序。這一點(diǎn),在amd64處理器上,相對(duì)容易做到。而安騰,幾乎是另外一回事。(后來Intel也生產(chǎn)了兼容amd64的處理器,但那是后話。) 雖然我說“相對(duì)”容易做到,但也不是空手套白狼。當(dāng)操作系統(tǒng)運(yùn)行在64位時(shí),怎么才能保證已經(jīng)存在的32位應(yīng)用程序以為自己仍然運(yùn)行在32位系統(tǒng)上呢?微軟的解決方案是:Wow64,全稱是32bit Windows On 64bit Windows(64位Windows上的32位Windows)。 你也可以這樣理解,雖然整個(gè)系統(tǒng)是運(yùn)行在64位模式,但如果一個(gè)應(yīng)該程序是32位的,Windows會(huì)在64位的基礎(chǔ)上,加載一個(gè)“32位的Windows”。這樣,這個(gè)32位應(yīng)用程序就以為自己是運(yùn)行在32位的系統(tǒng)之上的。 于是,你也可以想象,這就意味著,64位的Windows,不但帶有64位操作系統(tǒng)應(yīng)有的系統(tǒng)文件,還帶有32位系統(tǒng)應(yīng)有的系統(tǒng)文件。 我們都知道的是,Windows系統(tǒng)的主要系統(tǒng)文件都是放在一個(gè)叫做System32的文件夾中的。為了能同時(shí)放下兩套系統(tǒng)文件,Windows會(huì)在64位的系統(tǒng)上,增加了一個(gè)文件夾,叫SysWow64。 這便有了一個(gè)問題,System32和SysWow64里面,哪個(gè)放的是64位的系統(tǒng)文件,哪個(gè)放的是32位的系統(tǒng)文件呢? 如果你還記得Wow64指的是64位Windows上的32位Windows,那么,你就能會(huì)想到,SysWow64里放的是32位的系統(tǒng)文件。但你也可能會(huì)問,為什么一個(gè)明明叫System32的文件夾裝的是64位的系統(tǒng)文件,而一個(gè)明明叫SysWow64的文件夾裝的卻是32位的系統(tǒng)文件呢?既然是64位的系統(tǒng),為什么不能有System64和System32這樣的文件夾呢? 這個(gè)問題問得很好。答案也很簡(jiǎn)單:人在江湖,身不由己。 兼容性 如果我問你,可曾有多少機(jī)會(huì)接觸過安騰處理器呢?我想,對(duì)于一般人來講,應(yīng)該是沒有的。那為什么amd64會(huì)大行其道,而安騰處理器卻鮮為人知呢?還是因?yàn)橐粋€(gè)軟硬件設(shè)計(jì)上的關(guān)鍵概念:兼容性。 正是因?yàn)榘豺v處理器,沒有做好對(duì)已有的32位系統(tǒng)提供良好的支持,便其一直處于市場(chǎng)的邊緣。這和你不會(huì)買一臺(tái)看不了模擬信號(hào)頻道的高清電視是一個(gè)道理。 之前我們談到的兼容性,是指在64位Windows上,兼容已經(jīng)有的32位應(yīng)用程序?,F(xiàn)在考慮另一種兼容性。 如果你寫了一個(gè)很牛的32位的應(yīng)用程序,現(xiàn)在,你想把它變成64位的應(yīng)用程序,以更充分地利用64位處理器所帶來的新的處理能力。你肯定覺得,這不就是讓64位編譯器編譯一遍就完了的事兒么?可能你發(fā)現(xiàn),這并不是骨感的現(xiàn)實(shí)。你突然發(fā)現(xiàn),你的程序里,為了某些你已經(jīng)想不起來的原因,把System32這個(gè)文件夾,寫死在了你的程序里。而這個(gè)System32中的32,讓你很不安。你嘗試著運(yùn)行了你的程序,卻發(fā)現(xiàn)一切正常。為什么呢?因?yàn)檫@是Windows系統(tǒng)的另一個(gè)兼容性方面的努力:讓一個(gè)已有的32位應(yīng)用程序,不加修改或者盡可能少地加以修改,便可以被編譯成64位應(yīng)用程序并在64位Windows上運(yùn)行。其實(shí),把System32這樣的路徑,寫死在程序里,并不是一個(gè)個(gè)案。所以,為了保證這些應(yīng)用程序可以順利地過渡到64位,Windows最后還是決定讓64位的系統(tǒng)文件放在System32的文件夾下。而讓32位的系統(tǒng)文件,搬到了SysWow64中去。 你肯定會(huì)想,那讓32位搬到SysWow64中去以后,那些寫死在32位應(yīng)用程序中的System32怎么辦?答:Windows會(huì)給他們轉(zhuǎn)向到SysWow64中去。那讓64位中的System32轉(zhuǎn)向到System64不也是一樣么?真的一樣么?不一樣么?真的一樣么?不一樣么?真的不一樣。 作為64位Windows操作系統(tǒng),當(dāng)然是希望能充分發(fā)揮64位處理器的潛力,讓應(yīng)用程序更有效率地運(yùn)行。如果在運(yùn)行64位應(yīng)用程序時(shí),總要檢查是否需要轉(zhuǎn)向,勢(shì)必影響程序運(yùn)行效率。所以,不能給64位應(yīng)用程序做沒有必要的轉(zhuǎn)向,如果說必須要轉(zhuǎn),那就只能轉(zhuǎn)32位應(yīng)用程序了。是的,沒有辦法,在64位操作系統(tǒng)中,32位應(yīng)用程序要做一些小的犧牲。 此外,為了保證32位應(yīng)用程序不與64位應(yīng)用程序相沖突,除了System32文件夾外,注冊(cè)表也需要為32位和64位提供兩套,也需要讓32位的應(yīng)用程序在必要時(shí)重定向。 結(jié)論 所以SysWow64文件夾,是64位Windows,用來存放32位Windows系統(tǒng)文件的地方。 后記 兼容性是一個(gè)重要的事情。當(dāng)然,也是一個(gè)很有意思的事情。如果你在Windows 7中運(yùn)行"winver",你就會(huì)發(fā)現(xiàn),Windows 7原來是Windows 6.1。為什么呢?事情是這樣的,Windows XP是Windows 5.2,Windows Vista開始變成了6.0,結(jié)果,很多應(yīng)用程序只是檢查操作系統(tǒng)版本號(hào)的頭一位,發(fā)現(xiàn)不是5,于是就提示用戶說:“我們不支持Windows XP以前的系統(tǒng)”。這也是從Windows Vista的不成功中,學(xué)習(xí)到的一課。也許,以后永遠(yuǎn)都沒有Windows 7.0也未可知啊。 |
|