洛村游民 trespassers will be分享 http://blog.sciencenet.cn/u/luocun     在信息时代的思想雷区     慢慢走慢慢看慢慢聊

博文

数字计算机为什么不是离散的?(致李亚辉)

已有 5671 次阅读 2010-7-31 06:01 |个人分类:计算哲学|系统分类:科普集锦| 连续, 离散, 计算机, 数字电路, 模拟电路

(上科学网亦晚矣,没能亲眼目睹鬼王风采。从诸位博主提到他的文章看来,离散与连续也是他比较关心的问题之一。在此特以本文向鬼王致敬,高攀一把他那不散的阴魂。)

各位看官:如果您想象数字计算机里0就是0,1就是1,黑白分明,对不起,您错了;如果您假定在任何时刻,计算机里的任何一位要么是0,要么是1,对不起,您错了;如果您觉得数字计算机干的事情,就是从0跳到1、从1跳到0,对不起,您错了。一句话:如果您以为数字计算机是离散的,对不起,您错了。


您错了,因为计算机归根到底不是用0和1这样的离散状态来干活的,而是用电信号的变化来干活的。所谓‘0’和‘1’只是用来谈论电压高低的方便记号而已。

看看具体原因吧。首先,电路的基本定律(比如基尔霍夫定律)就把电路里面的变化视为连续的,而这些定律同样适用于所谓“数字电路”。其次,所谓“方波”,从0到1、从1到0的瞬间跳变,假设了电压变化无穷快,这在物理学上是不可能的。在实际电路里,电压要从0.0伏变成5.0伏,必须经过中间状态。就是说,数字电路里实际的电压信号,看起来应该是这样的:


所以,计算机里实际可能的电压状态,并不是黑白分明的,在高低电压之间充满了灰色区域。当某一位发生状态转变时,电压必须穿过那个灰色区域。只有这样,0才有可能变成1,1才有可能变成0。所以,绝对不要以为在任何特定的时刻,计算机里的某一位要么是0,要么是1。如果真是那样的话,计算机里就不可能有状态转换,计算机就不可能工作了。计算机要工作,就必须经过非0又非1的灰色区域。没有灰色,就没有计算机:


这些道理,其实学电子工程的人都很清楚,只是他们通常不说出来罢了;或许是因为太简单,太小儿科;或许是因为没兴趣、没耐心;或许是因为他们太忙了吧。

如果灰色是必需的话,那么这貌似黑白分明的0和1又是怎么来的呢?数字计算机的“数字性”又是如何实现的呢?

基本的思路,就是要把对灰色区域的穿越给管制起来。就是说,当系统里的某一位处于灰色区域时,其状态将被视为“非法”。当然, “非法” 在这里不是不存在的意思,而是要被禁止的意思,而被禁止的意思,就是说当系统里的某一位处于非法状态时,就不许对那一位进行读取操作。

在具体的实现里面,为了保证只有当某一位处于合法状态时才去读它,就需要有时钟。时钟的作用就是产生电脉冲信号来同步读写操作。在状态转换(写操作)开始时,先来一个脉冲,警告说:大家都等着,别去读;隔一会儿,到状态应该已经转换完了的时候,再来一个脉冲说:现在可以读出新状态了。这样一来,当系统在两个脉冲之间穿越灰色区域时,就没有读操作发生;而当状态转换完成,系统到达灰色区域的彼岸,这时再读到的电压值就可以总是合法的了。(正是因为数字电路需要时钟来管制读写操作,管束灰色区域,所以大家去买计算机的时候才会有CPU主频多少多少赫兹的说法;而主频越高,就意味着状态转换需要的时间越少,读写操作之间的间隔越短,机器越快。)

这里要注意的是这个灰色区域其实是没有明确边界的,其范围是不可能一刀切的。我们不能说“只要1.5伏以下就都是0,只要3.5伏以上就都是1,而1.5伏和3.5伏之间就都是非法的”。这是因为要让电压完全精确地稳定是不可能的,要完全精确地测量1.5伏和3.5伏也是办不到的。那怎么办呢?那就得要留有余地,要让两个时钟脉冲之间的间隔足够长,让第二个脉冲来得足够晚,这样来保证转换到0的时候,电压已经在1.5伏以下很远,很接近0.0伏了;而转换到1的时候,电压已经在3.5伏以上很远,很接近5.0伏了;此后才允许读操作。如此这般,即使灰色区域没有明确的边界,系统状态还是可以可靠地读出。(也正是因为留有这样的余地,所以才可能有把CPU主频调高,让机器跑得更快的做法;这种做法的实质,就是在压缩本来这里留的余地,让第二个脉冲来得更早些。这自然也就意味着要冒更大的把0和1搞反的风险了。)

那么,当系统配备上了这样的时钟同步的读写机制之后,是不是里面就可以有方波,有一清二楚的0和1了呢?当然没有!请注意:这些基于时钟的管制机制,并不是去把电压波动给抹掉,把高低两个电压水平给削平、把两个水平之间的转换给削直,而只是将读写的时间控制在电压相对稳定的区域内。别忘了,方波在物理学上是不可能的。所以,即使有了时钟同步的机制,如果你拿个示波器去看某一位的电压,你看到的还会是上上下下的波动和逐渐的升高降低。灰色区域并没有被消除,而只是读写操作在系统穿过灰色区域时被禁止了。

那么,这些0和1究竟是怎么来的呢?“数字计算机”是怎么成为数字的呢?在时钟同步的机制之外,我们还必须得戴上有色眼镜,就是说必须对管制之下的电压波动和状态变化加以抽象,这样才会有0和1。

具体说来,这个有色眼镜,首先要让我们对那些不太离谱的电压变化视而不见。把所有0.0伏左右的合法区域的电压统统归结为0,而把所有5.0伏左右的合法区域的电压统统归结为1,而把从高到低、从低到高的变化归结为从1到0,从0到1,从而将电压水平加以离散化,如下图:


然而,由于从高到低、从低到高的状态转换必然意味着对灰色区域的穿越,对电压的离散抽象必须与对时间的离散抽象相配合,也就是说,咱们的有色眼镜还要对两个时钟脉冲之间的时间流逝和电压变化视而不见,把这个转换视为原子化的、不可更为细分的从T到T+1的简单一步,而两者之间只是一个跳变而已:

在时钟同步的状态转换之外,再加上互相配合的对电压和时间的离散抽象,0和1,或者说0-1之间的跳变——方波——终于诞生了:



请注意,这里的抽象──所谓“数字抽象”──是我们人作为“旁观者”做的事情,事关我们如何看待电路里的变化,而并不影响电路如何工作。所以说,所谓数字电路,其实只是支持这种数字抽象的模拟电路,而并不是用方波来干活的电路;或者说是只有在成功的数字抽象下,才是用方波来干活的电路。戴上“数字抽象”的有色眼镜,我们看到的是方波;一旦我们摘掉有色眼镜,看到的还是连续波动的电压信号。而不管你是不是戴这幅眼镜,那波动不停的电信号依然波动不停,而系统电压依然在那非法区域里穿梭不已。别忘了,归根到底,所有数字电路都是模拟电路:


这时候您也许会问了:“既然如此,搞那么麻烦干什么?又是时钟同步,又是数字抽象的。”答案在于如果时钟同步(以及其他措施)能够保证数字抽象的成功,那么电路中的误差就不会积累:比如说,即使每次转换的结果实际电压值与理想电压值平均下来都差了至少0.3伏,只要每一次转换都做到了把电压控制在合法的0与1的范围内,那么哪怕经过成千上万次转换,误差也不会积累到把0变成1、把1变成0。

结果就是哪怕实际的电信号总是波动不停,数字抽象之下的比特却可以无休无止地变换、一次一次地拷贝下去,而不失其作为0或1的完美。这,就是数字电路的奇妙之处。

此外,只要数字抽象得到充分保证,系统设计者就可以把电路模块视为0-1处理器,采用二值的布尔代数来加以建模和分析,程序员们也可以假定一个可靠的非0即1的比特层次,而专心于他们的编程太极。

由此看来,数字计算机与它的连续的、模拟的电路基础之间的关系,其实也是遵循虚拟机的模式的:一方面要有适当的机制(这里是时钟同步等等),另一方面又要有适当的抽象(这里是数字抽象)。而要正确理解虚拟机与它的实现基础之间的关系,关键的关键则需要明白虚拟机一方面依赖于抽象,另一方面这样的抽象并不实际抹掉波动、抹掉灰色区域等等被抽象掉的东西。虚拟机的特点就在于它是脚踏实地的站在层层机制之上的,而上面的每一层机制其实都并没有实际脱离下面每一层实现机制里被抽象掉的那些细节,如此这般直到模拟电路层次上那不断波动、灰不溜秋的电压信号。





https://blog.sciencenet.cn/blog-453866-348699.html

上一篇:世界是连续的,还是离散的?太极篇(兼谈如何突破非黑即白)
下一篇:一个加拿大小学班里的阅读(一)背景和资源
收藏 IP: .*| 热度|

3 陈儒军 蔣勁松 baijiab

发表评论 评论 (4 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-17 12:26

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部