西西河

主题:【原创】揭开64位的面纱,让你一次看个够!(Rated R) -- Highway

共:💬12 🌺20 新:
全看分页树展 · 主题
家园 【原创】揭开64位的面纱,让你一次看个够!(Rated R)

64位不是什么新技术。很多年以前,Unix的高档服务器上已经开始采用64位技术了。比如当时大名鼎鼎的Digital Alpha CPU上运行的Digital Unix。但是那时候我们还在386的世界里徜徉,64位还是遥不可及的东西,没人在乎它。64位开始进入大家的视野也就是近一两年的事情。64位的硬件平台价格不断地下跌,已经降到了1000美元以下(比如我现在使用的这台Compaq笔记本就是64位的AMD CPU,价格只要1000多一些),可以进入寻常百姓家了。在软件方面,微软的64位Windows XP已经推出了。一时间好多朋友开始问这样的问题:“我需要转移到64位平台上吗?” (实际上,64位的Linux已经存在了很长时间了,但对于绝大多数用户来说,Windows的64为版本推出才算是用户级64位的开始)

“64位到底是啥玩意儿?32位怎么了,干吗要蹦出来个64位?我升级上去有什么好处?” 我想这是大家对于64位技术的几个最寻常的问题,在这里,我且试着给大家回答一下。大家要使觉得有那么一丁点儿帮助,那就狠狠地夸我几句,我顶得住!!!

走在计算机应用前列的人们脑袋已经撞倒了32位技术的天花板上。32位已经不能满足他们的需要了。所以从32位到64位是计算机成长的一个自然过程,就像当年我们从8位上升的16位,又16位上升到32位那样。并且我可以肯定的说,64位也不会是终点站,128位的出现也只是一个时间的问题。

那么32位的局限到底在什么地方呢?

最主要的一个就是内存空间的限制。32位技术的可访问的内存空间上限是4GB。看起来很多,是吗?但仔细一看,问题就来了。这4GB空间Windows自己要用一半,剩下的一半留给用户的应用。那样也就是2GB了。对于数据库来说,2GB实在是不“宽裕”。就拿我们小小的西西河来说,数据库肯定也不止2GB了。内存小,数据多,那么大部分数据就只好在硬盘上呆着。需要的时候进到内存里,完事了还得赶快出来,因为别人还等着呢。硬盘是个很慢的东西,比起内存来可能要慢几个数量级。如果数据不停的进出硬盘,那么应用的性能就无可避免的要慢下在。这在很多场合是不可以接受的。(Windows Advance server可以将OS的内存占用减少到1GB,应用可以使用3GB的空间,假如应用编程的时候使用了这个Feature。不过这个Trick很多人不知道)

在64位技术中,可访问的内存将不再会是一个问题了。2的64次方是一个大的我不会数的数字。举个例子吧,如果将IP从现在的32位上升到64位,那么这个地球上每一平方厘米将能分摊到上千个IP。所以使用了64位技术,内存问题你就不用担心了。当然我说的这是个理论数字。现在的硬件制造水平还无法将那么多内存放到计算机主板上,每个CPU配4-8GB内存可能是今后几年内的标准设计。

我看过一个微软的演示。两套同样的服务器,一个运行32位OS + 32位数据库,另一个运行64位OS + 64位数据库,64位技术带来的性能提升给我的印象非常深刻。盖茨还说,在他们的内部测试中,64位的Terminal Service比原来的32位性能提高了2.7倍。他们都有些吃惊。对于一个12秒的电影动画渲染,64位技术将时间缩短了近2/3。以前使用32位技术,这么短一个动画片断要3天时间才能完成!!!

所以64位技术首先受益的是这些Memory Hungary应用。对于普通用户,除了要编辑高清晰的DVD,HDTV节目,4GB的内存暂时还不是一个问题。所以那种巨大的性能提升我们不会有什么切身体会。

除了内存外,64位就没有别的好处了?

当然不是这样啦。内存问题只是一个最明显的问题。对于一般程序,64位OS + 64位应用,15%左右的性能提高应该是可以期待的。

已经试验过64位Windows XP的朋友肯定会跳出来说“Highway你丫少胡说,我在64位上就没体验到任何“快感”...”

哈哈,你先别急,事情是这个样子滴。

为了简单起见,我们且以AMD的64位CPU为例展开我们的讨论,Shall we?

AMD的64位CPU是一种很有意思的东西。它可以很好的运行现有的32位程序,同时也可以运行64位程序。从技术上来说,它有三种运行模式:

点看全图

外链图片需谨慎,可能会被源头改

1)“老古董”模式(Legacy mode)。现在最常见的32位操作系统+32位应用程序就是在这种模式下运行的。

2)长模式兼容亚模式(Long mode - Compatibility mode),比如64位操作系统上的32位应用程序就是在这种模式下运行的。

3)长模式64位正宗模式(Long mode - 64 bit mode), 64位操作系统上的64位应用就是这种模式。

大家知道,AMD的64位CPU是按64位设计的,32位只是一个权宜之计。当操作系统和应用程序都是64位的时候,CPU的全部能力才得到发挥。比如有8个通用寄存器(Register)就是只有在64位模式下才可以使用的,诸如此类的设计还有不少。

点看全图

外链图片需谨慎,可能会被源头改

如果现在你就升级到64位Windows,由于大多数应用还是32位的,你实际上只是从“老古董”模式换到了长模式兼容亚模式,你的确得不到什么“快感”。由于在64位Windows上运行32位应用程序要透过一个叫做WoW64的东西,所以有的时候你的程序性能反而会下降一点点。

点看全图

外链图片需谨慎,可能会被源头改

在其后相当长一段时间内,已有的32位应用不可能都过渡到64位上去,这就注定了我们将面临的是一个64/32位混合的世界。还记得当年我们国家从计划经济转型到市场经济的那段日子吗?那时候我们的体制是“双轨制”。同样,在这个从32位到64位转化的过程中,Windows将实行“双轨制”。而这“双轨制”不可避免的将给我们带来一些问题。

这个“双轨制”中,有三个主要成员,64位操作系统,64位应用程序和32位应用程序。他们之间的关系比较微妙,为了形象起见,你可以这么想---64位操作系统是你老哥,64位应用和32位应用分别是大奶和二奶。你的任务就是让大奶和二奶都满意。要注意大奶和二奶是水火不相容的,并且她们俩都认为她们完全占有你,你是完全属于她们的。你们玩得转吗?

你不能把二奶的Bra放到大奶的衣橱了,如果那样,你肯定死定了。同样,32位应用的东西也一定不能写道64位的地盘里去。比如说,安装了64位Windows以后,你安装以前的某一个32位应用。安装程序没有任何改动,还是按以前的老规矩把Shared Library(比如一些DLL, OCX等等)安装到%windir%\system32目录下,把应用部分拷贝到%ProgramFiles%\XXXX\目录下。但问题是现在行情变了,%windir%\system32和%ProgramFiles%已经成了64位应用的基地,32位的东西COPY过去那一定会闹出人命来。怎么办呢?

Windows不容易,使出了“乾坤大挪移”的神功在二位之间周旋。当32位应用按老规矩安装的时候,它一方面笑脸相迎,“没问题honey,你只管来好了”。而另一方面,它悄悄的将文件安排在了外宅。二奶压根没有觉察出来,高高兴兴的安顿了下来。可你仔细一看,她的东西被分别请到了%ProgramFiles(86)%和%windir%\SysWow64路径下。通过这样的“欺骗”手段,Windows使得32位和64位应用不直接碰撞,发生冲突。并且由于他骗术高超,两位奶都没有意识到被骗,以前的安装程序以及程序本身不需要任何改动就可以运行无误!

但问题是,有的时候“乾坤大挪移”没办法使,Windows只好硬着头皮硬接了。比如说卧室的床单本来是花格的。结果大奶来了死见不喜欢,非要给换成素色的。过两天二奶来了,把那素色的床单一把撤下,又换上了她喜欢的。那么床单到底是什么样子的呢?那要看最后一次是那位奶来过的。这种情况和Windows注册库情况完全一致,叫做“Last Writer Wins”。当你安装好Windows后,by default,Doc文件由64位的WordPad来打开。当你安装了32位的Office以后,注册库被改写了,Doc文件一律由32位WinWord来打开。几天后,你可能又安装了64位的Office,到那时候,情况就又变了。64位的Office成了缺省设置。事实上,Windows维护了32位和64位两个View,他暗中想办法使他们consistent!

大奶和二奶本质上是有你没我,有我没你的。让她们同在一个房间里是可怕的想法。肯定是你扯我头发,我拽你的领子,搞得一塌糊涂。所以如果你是程序员,你一定不要想的将32位的DLL载入到64位的进程中,或是将64位CODE放进32位进程里去。

大奶和二奶虽然是水火不相容的,但是她们之间还是可以“通气”的。Windows中的InterProcess Communication还是可以在32位和64位程序之间传递信息的。具体情况呢,你们肯定不想知道,有些专业了。

* Handles to named objects such as mutexes, semaphores, and file handles can all be shared.
* Handles to windows (HWND) can be shared.
* RPC.
* COM LocalServers.
* Shared memory can be used if the contents of the shared memory are not pointer-dependent.
* The CreateProcess and ShellExecute functions can launch 32-bit and 64-bit processes from either 32-bit or 64-bit processes.
* The CreateRemoteThread function is special-cased for specific functions, allowing 64-bit debuggers to break into 32-bit processes.

“Wow,Windows真牛掰啊”,看到这里不少男士们一定会发出由衷地感叹。“能把大奶二奶一起搞定,且相安无事,简直是不可思议啊!”。于是乎, 准备马上安装Windows 64位操作系统,想从中得到一点“启发"。

不过我可得警告诸位,Windows在大奶和二奶间玩瞒天过海,即使出了差子,穿了帮,最坏不过是Process Crash,Registration Corrupt。而你老兄在生活中要是一个不小心玩出了火,那乐子可大了。到时候出了人命可别怪我言之不预啊!

So, do you still want to upgrade?

元宝推荐:四月一日,

本帖一共被 1 帖 引用 (帖内工具实现)
全看分页树展 · 主题


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河