64位計(jì)算已經(jīng)逐漸融入了我們的生活,MacOS、Linux和Windows Server系統(tǒng)中64位都已經(jīng)成為主力,而64位的Windows客戶(hù)端也得到了很好的推廣。但是,64位卻然很多人“望而生畏”,因?yàn)榇蠹叶疾皇煜? 64位計(jì)算的特性,也擔(dān)心所謂的“兼容性”。其實(shí)沒(méi)有必要擔(dān)心這些,64位是一個(gè)兼容原有32位的擴(kuò)展平臺(tái),下面將詳細(xì)的進(jìn)行說(shuō)明。
歷史發(fā)展
我們平常桌面電腦使用的所謂64位平臺(tái)其實(shí)是 x86-64,也就是說(shuō)在原有的 x86 平臺(tái)上實(shí)現(xiàn) 64 位。什么是 x86 平臺(tái)呢,也就是 Intel 在 8086 之后一系列處理器中使用的架構(gòu),8086 是 16 位的,后來(lái)擴(kuò)展到 32 位的 80386,之后一直沿用就形成最流行的的 32 位處理器系列,這種架構(gòu)也叫做 IA32(Intel 實(shí)現(xiàn)32位),注意 AMD 也是使用 Intel 的技術(shù)。
32 位 x86 處理器經(jīng)過(guò)大力發(fā)展,性能已經(jīng)比較強(qiáng)大,完全適合于桌面計(jì)算機(jī)和通用服務(wù)器,用戶(hù)和開(kāi)發(fā)者數(shù)量龐大。但是 32 位 CPU 的內(nèi)存尋址能力(可訪問(wèn) 4G 內(nèi)存)有限,于是 AMD 公司率先開(kāi)發(fā)出了 x86-64(也稱(chēng)為 AMD64)架構(gòu)處理器,它完全可以實(shí)現(xiàn) 64 位計(jì)算。后來(lái) Intel 自然不會(huì)示弱,也開(kāi)發(fā)了EM64T(擴(kuò)展內(nèi)存 64 位技術(shù)),也就實(shí)現(xiàn)了和 AMD64 幾乎一樣的 IA32e(Intel 實(shí)現(xiàn)32位擴(kuò)展)架構(gòu)處理器。
當(dāng)前,主流的Intel/AMD處理器都是準(zhǔn)64位處理器。
但是要注意的是在 AMD64 誕生之前, Intel 和 HP 等公司合作開(kāi)發(fā)了 IA64 (Intel 實(shí)現(xiàn)64位)架構(gòu),這個(gè)是一個(gè)全新的 64 位架構(gòu),不兼容原有的 32 位程序,只能通過(guò)模擬器模擬執(zhí)行,而且效果完全不盡人意。不過(guò)這和我們現(xiàn)在討論的 64 位沒(méi)有關(guān)系,這大概就是誤解的來(lái)源之一。
硬件實(shí)現(xiàn)
那么,64 位計(jì)算是如何實(shí)現(xiàn)的呢?首先要說(shuō)明 x86-64 是站在 x86 的肩膀上的,并沒(méi)有另起爐灶,CPU 指令長(zhǎng)度(即指令占有的二進(jìn)制位數(shù))不變,原有的指令集也一律保留,所以 x86 和 x86-64 總體的架構(gòu)是一致的,指令完全兼容。改變的部分,原有通用寄存器容量均增長(zhǎng)為 64 位,順便還加了 8 個(gè),同時(shí)增加了 8 個(gè) 128 位的 XMM 寄存器,內(nèi)部總線(即 CPU 部件間的數(shù)據(jù)通道)寬帶也增至 64 位或更多。當(dāng)然還有增加用于支持這些寄存器的相關(guān)指令。由此可以看出,CPU 處理的數(shù)據(jù)均支持 64 位,內(nèi)存編址理論上也可達(dá)到 2的64次方 個(gè)地址空間,但由于是在 x86 的架構(gòu)上構(gòu)建的 64 位計(jì)算,64 位線性尋址能力還不成熟,實(shí)際上的可編址并沒(méi)有這么多,但可改進(jìn)。
之前也一再?gòu)?qiáng)調(diào),x86-64 只不過(guò)是 x86 的擴(kuò)展,因此現(xiàn)有的 64 位處理器可以同時(shí)運(yùn)行 32 和 64 位程序。下面以 Intel 的技術(shù)(AMD 的原來(lái)其實(shí)一樣)為例說(shuō)明。具體情況要分為下面幾類(lèi):
1. 沒(méi)有激活 64 位(傳統(tǒng)模式/ IA32 模式)。也就是沒(méi)有為機(jī)器安裝 64 操作系統(tǒng),只使用 32 位操作系統(tǒng)。這時(shí) CPU 只會(huì)工作在純 32 位模式,第二節(jié)中提到的硬件和指令都被屏蔽掉了。
(下面這些是涉及 32 位模式和兼容 16 位程序指令的,這里就不再詳細(xì)說(shuō)明了。)
1.1. 實(shí)模式
1.2. 虛擬 8086 模式
1.3. 保護(hù)模式
2. 已經(jīng)激活 64 位。這時(shí)已經(jīng)安裝 64 位操作系統(tǒng),操作系統(tǒng)在啟動(dòng)時(shí)就將 CPU 置為 64 位工作狀態(tài)。所有新寄存器、擴(kuò)展寄存器和指令都被激活并可用。
2.1. IA32e 模式/ EM64T 模式。這時(shí)正在運(yùn)行 64 位程序,CPU 完全以 64 位特性工作。
2.2. 兼容模式。這就是在 64 位系統(tǒng)下運(yùn)行 32 位程序的模式了。具體的情況下面會(huì)詳細(xì)說(shuō)明。
軟件實(shí)現(xiàn)
在兼容模式下,支持 x86-64 的 64 位操作系統(tǒng)就要起到協(xié)調(diào)作用了,它首先要是識(shí)別程序的平臺(tái)性質(zhì),如 16 位(Windows x64 并不支持 16 位子系統(tǒng),因此無(wú)法執(zhí)行 MS-DOS 16 位程序)、32 位,還是 64 位。如果是 32 位,就在相應(yīng)的程序指令前加上 32 位標(biāo)志,CPU 遇到這個(gè)標(biāo)志時(shí),就不會(huì)把程序應(yīng)用的 64 位新特性中,為程序指定 32 位寄存器(雖然部分 32 位寄存器是 64 位寄存器的前一部分,但它們名字是不相同),內(nèi)存空間也重新映射或進(jìn)行必要轉(zhuǎn)換(這還不太確定)。也就是說(shuō),32 位程序所看到的寄存器仍然是 32 位的,內(nèi)存仍然只能訪問(wèn) 4G 或以下,它們不會(huì)發(fā)現(xiàn) CPU 有任何異常。
對(duì)于操作系統(tǒng)的軟件部分,就拿 Windows x64 來(lái)說(shuō),我們可以發(fā)現(xiàn),它比對(duì)應(yīng)的 32 位系統(tǒng)要臃腫一些,部分原因是 64 位指令數(shù)據(jù)要長(zhǎng)一些,單個(gè)程序會(huì)大一些。但更明顯的是操作系統(tǒng)中的很多東西都是“雙份”的,也就是分別準(zhǔn)備了 64 位的和 32 位的,這些主要是平臺(tái)資源(如 .NET 框架)、庫(kù)資源(如 Visual C++ 庫(kù))和一些底層的系統(tǒng)工具(如 CMD、DXDiag)。更明顯的表現(xiàn)是,打開(kāi)系統(tǒng)分區(qū),我們就能發(fā)現(xiàn)程序文件夾“Program Files”有兩個(gè),一個(gè)用于 x86-64 軟件,另一個(gè)則用于 x86(32位)軟件。這可說(shuō)明,不僅硬件完全支持 x86/x86-64,操作系統(tǒng)也把這兩個(gè)平臺(tái)放在平等的地位。
隨著 64 位操作系統(tǒng)的推廣,越來(lái)越多的軟件開(kāi)發(fā)者會(huì)同時(shí)在 32 位和 64 位環(huán)境下進(jìn)行軟件測(cè)試,保證軟件的可靠性。但是要他們統(tǒng)統(tǒng)開(kāi)發(fā)純 64 的版本是不現(xiàn)實(shí)的,雖然從 x86 過(guò)度到純 x86-64 理論上只要重新編譯,原來(lái)的代碼可以不作任何修改,但有時(shí)并不這么簡(jiǎn)單,同時(shí)還要考慮經(jīng)濟(jì)效率(再次開(kāi)發(fā)是要花錢(qián)的),再說(shuō)一些軟件并不需要用的用到 64 位的計(jì)算特性(所以也沒(méi)有修改和重新編譯的必要)。所以就放心的用那些已經(jīng)寫(xiě)明支持 x86 64位平臺(tái)的程序好了,就算沒(méi)有聲明支持 x86-64 也是可以運(yùn)行的。
兼容問(wèn)題和解決方案
對(duì)于任何一個(gè)新的操作系統(tǒng),都會(huì)用不兼容的情況。如果遇到不兼容,應(yīng)該先考慮是否是操作系統(tǒng)自身升級(jí)帶來(lái)的。舉個(gè)例子,對(duì)于一個(gè)為 Windows XP 開(kāi)發(fā)的程序如果在 Windows 7 x86 上運(yùn)行沒(méi)有問(wèn)題,那在 Windows 7 x64 上運(yùn)行應(yīng)該也不會(huì)有問(wèn)題。當(dāng)然還是不推薦使用已經(jīng)過(guò)時(shí)的程序。
另一點(diǎn)需要注意的是,前面已經(jīng)提到那些需要準(zhǔn)備“雙份”中的 32 位的平臺(tái)或庫(kù)資源是否安裝了,它們是支持開(kāi)發(fā)軟件的基礎(chǔ),32 位和 64 位必須一一對(duì)應(yīng)。如果缺失了相應(yīng)的 32 位版本,需要它支持的 32 位程序自然不能運(yùn)行。解決方法就是使用程序的安裝向?qū)е匦掳惭b(而不是使用綠色安裝包),或者查找程序說(shuō)明后再到微軟下載中心下載缺失的組件。
推薦使用 64 位而不用 32 位的情況
和硬件打交到的驅(qū)動(dòng)程序,因?yàn)樗麄兊牡讓庸ぷ魈匦裕?4 位是必不可少的。這就是為什么 64 位操作系統(tǒng)推廣緩慢的原因,也是 64 位“兼容性差”的表現(xiàn)。還好當(dāng)前硬件廠商都默認(rèn)發(fā)布 Windows 64 位版本。
除了驅(qū)動(dòng)程序還有什么軟件必須用 64 位的?這個(gè)并不好說(shuō),一般說(shuō)來(lái)是那些需要頻繁處理大量數(shù)據(jù)或者需要占用很多內(nèi)存空間(甚至?xí)?4G 內(nèi)存空間)的程序。比如:
一些大型的開(kāi)發(fā)平臺(tái)或服務(wù)器平臺(tái),如 AutoCAD 、Photoshop 和 SQL Server 等;
編/解碼器,如 PotPlayer 及對(duì)應(yīng)解碼器,如果你要看一些質(zhì)量很高的電影,用 64 位軟件渲染自然會(huì)流程一些;
一些頻繁使用的工具,如果你要 Internet Explorer 一次同時(shí)打開(kāi)十幾個(gè)頁(yè)面,或者要?dú)⒍拒浖O(jiān)控全部文件和數(shù)據(jù)區(qū),那還是用 64 位的吧。
至于其他小巧的軟件,就沒(méi)必要這么糾結(jié)了,如果有 64 位的就用,沒(méi)用就用 32 位的替代。不過(guò)說(shuō)實(shí)話,我們都希望用 64 位,即使軟件性能沒(méi)有什么改進(jìn),至少運(yùn)行效率會(huì)高一些,還有“原生 64 位”聽(tīng)起來(lái)很正統(tǒng)啊。不過(guò)要是“沒(méi)有”那也沒(méi)啥關(guān)系,我們還有“兼容模式”。
|
新聞熱點(diǎn)
疑難解答
圖片精選