现在的城市家庭几乎都拥有计算机和DVD机,即使你已经淘汰了DVD机,那么最起码的可能你家可能曾经拥有过一台VCD机,计算机和DVD机都是家用电器,可是它们的区别何在呢?
家用计算机大多数指的是PC机,而PC机几乎都是基于冯诺依曼架构的机器,以CPU为中心的机器;DVD机一般指的是带有音/视频解码器的播放机,可以将DVD光盘以及向下兼容的VCD等光盘上的数据解码成音/视频流,二者的共同点就是基于集成电路,现代的观点可以说是超大规模集成电路,非常复杂,你打开二者的机箱,会发现它们是如此的相似,当然是在外行人眼里,pc主板和dvd的主板是没有区别的,都是电路板,然而pc主板上cpu的存在使二者的关系渐行渐远。
我们知道pc机可以播放dvd光盘,也可以编辑文档,正如我现在做的一样,它还可以做很多事情,但是dvd机的功能就是那么几项,这里面本质的原因是什么?我们知道冯氏机器的架构就是按顺序执行存储的指令,其关键在于存储和执行,指令可以存储就意味着指令可以被更换,那么不同的指令执行的效果就会不一样,这就提出一个问题,一定要提炼出不同指令的共同交集才会使得执行逻辑可以正确辨认这些指令,但是提炼交集的办法会使很多指令不会被执行逻辑辨认从而无法执行,比如两个集合{1,2,3,4}和{2,3,4,5}的交集是{2,3,4} ,那么1和5就会被丢失,怎么办呢?于是可以换一个思路,将指令分解到不能再分解的元指令,保证所有的分解前的指令都可以由这些元指令组合而成,这样的话,计算机的执行逻辑只要实现这些元指令的执行机制就可以了,原来设想的执行逻辑可以完成很多用户的策略,用户指的就是存储的指令,指令让执行逻辑煮面执行逻辑就完成煮面操作,让执行逻辑熬汤执行逻辑就完成熬汤操作,这样的话执行逻辑总有想象不到的用户策略,也就是它无法完成的,然后改进之,通过让执行逻辑实现所有指令的交集来防止执行逻辑无限膨胀,但是如此同样很多交集外的指令无法执行,最终的解决办法就是分解具体的策略级别的指令为正交的机制级别的元指令,让执行逻辑实现这些元指令,如此一来执行逻辑只知道顺序执行这些元指令,而不知道正在完成什么操作。举个例子,比如on和not是两个指令,如果执行逻辑分别实现了on和not,那么来个yes指令就不行了,并且即使在执行on和not的时候,执行逻辑十分清楚指令的意义,这很繁琐而且不应该甚至是错误的,于是就实现了a,b,c,...y,z等,这样的话要执行on就要先执行o再执行n,执行逻辑只知道顺序得傻傻的执行指令却不知道这个指令要干什么。执行逻辑提供指令的实现机制而指令本身的不同组合提供具体策略。
这就是机制与策略的分离,机制和策略十分有必要分离,这个原则在设计通用系统的时候更加必要,它可使系统更加模块化,各个模块可以更加有效的各司其职而互不干扰,机制和策略相分离可以使系统可以很容易的层次化,下层为上层提供机制,而上层可以在下层的机制之上定制策略然后可以让每个具体策略成为更上一层的机制,于是这个系统不但是分层的,还是树形的,树形的无环结构对于管理是很方便的,一个大系统对管理是很在乎的,机制和策略相分离的先天优势使得在计算机上构建大系统成了可能并且更加方便。
我们再看看DVD机,首先明白它的使命就是播放DVD光盘,而且DVD光盘的格式是标准的,那就是说它只需要认识这个标准的格式并且按照标准的解码逻辑解码后传输到视频装置比如电视机就可以了,一切都是标准的,不需要定制任何策略,那么它就简单多了,几乎谈不上什么指令问题,完全可以用硬连线直接实现,正如冯诺依曼机器之前的计算机一样,幸运的是,它不像早期的计算机那样带来很多不便,计算机本身就定格成通用的,而DVD机本身就是只完成一件事的专用机器。除了DVD机,电视机,冰箱,洗衣机等等都无需采用冯氏架构,也无需过分盯紧机制和策略,因为对于专用机器,没有什么过多的策略可言。
刚才提到过通用计算机的机制和策略相分离,使得分层更加容易实现,另外正因为如此,计算机才不愧成为通用机器,这是必然的,因为下层只提供机制而不干涉上层的策略,只有放开才可以做大,这是真理。每一层都是一个小世界,都可以实现丰富的策略进而继续作为更高的机制提供给更上一层。策略由机制实现,实际上就是机制中正交的策略元的重组,机制由策略元组成,这些元结构无疑是正交的,对上层来说最基础的,不同的策略元的不同组合就可以组成不同的策略,这是一个计算高维笛卡尔积的过程,策略之丰富可想而知。
通用计算机的产生使得软件正式产生,软件这个东西是伟大的,它可以在通用计算机提供的机制上实现不同的策略,这些策略可以是播放DVD,可以是洗衣,甚至可以是恐怖袭击。在通用计算机中,最重要的就是指令,而不是集成电路,专用的没有中央处理器的机器的丝毫不会比通用计算机更简单,但是指令这种东西也就在通用的计算机上才会有更大的意义,它使得计算机得以通用。在指令之上构建的软件当然就是指令的策略了,这就是一个由机制和策略分离导致的分层问题,如今的软件五花八门,而且功能越发强大,甚至现在的有些学软件的 学生毕业工作好几年了都不了解计算机的工作原理。由此看来软件已经成了一个独立于计算机的东西,成了一个很有前途的行业,这难道不伟大吗?在DVD机方面,除了在旧街道里可以看到挂着家电维修招牌的小店里有一个不修边幅的师傅叼着烟卷在焊板子之外可能很难找到别的该领域的凡人了,当然工厂里还是有的,这是有原因的,由于DVD机是专用机器,因此它的门槛就过于高,不像计算机是通用机器,不懂汇编的咱可学C,你可以搞Web而不需要任何硬件知识,如果你精通设计你甚至在不会编程的情况下可以搞软工,另外应用级别的比如图像处理,视频制作,Flash等等。其实以通用计算机为根的大树可以长的如此茂盛是必然的,前面说过原因,我一直都认为各司其职是好的,而且作为一个例子,我一直以为三权分立比中央集权要好...