计算机系统其实和人体系统是有点相似的结构,两者都将不同的功能划归到不同的器官/设备上去,也都通过一些共有的神经/线路来进行信息传递,都有一个核心的处理机构来解决和调度大部分问题。
计算机系统最重要的两个原则是分层和封装。封装的意思是,对于外来视角,这个对象的存在相当于一个黑箱,我只能知道我给定一个输入,它会返回一个可以预期的输出,而这个对象内部是怎样实现的,我不会去考虑这个问题。而从内部视角来看,我知道自己是一个黑箱,知道外部给我一个输入,他们希望得到什么样的输出,至于他们怎么使用,我不会去考虑,我只用关心怎么实现好内部结构。所以对于每一个部件/结构来讲,他们都可以简化成:[输入-> 黑箱 -> 输出] 这样的结构。
这种封装的好处在于,如果要实现一个简单的系统,我只需要将不同功能的黑箱按照一定的顺序拼装在一起,黑箱A的输出对接给黑箱B的输入,这就可以实现出更多的功能。比如简单来看人体的消化系统:食物->口腔->物理粉碎的食物->食道->物理粉碎的食物->胃->化学粉碎的食物->小肠->吸收好的食物->大肠->屎。这一条管道从口腔到肛门,实际上就是几个黑箱结构拼起来的系统,在正常情况下,肛门并不关心嘴里吃的是什么,它只用专注自己排便就可以了;小肠并不关心食物是不是太硬了,因为胃输入给它的一定是初步消化好的食物。
现在我们将视角换到一个独立的计算机上来。计算机系统的结构也一样,传统的计算机系统大致被分为了:处理结构,存储结构,输入输出结构。这些结构之间通过系统总线连接来传递数据。对于处理结构来说,它关心的问题只在于从系统总线获得指令,计算之后将结果输出到系统总线上去,并不关心数据从哪里来,到哪里去,有什么用;对于存储结构来说,它只关心处理传递进来的读写操作,并不关心谁写的数据,谁读数据做什么用;对于输入结构来讲,它只关心将外部的信号传递到计算机系统内部去,并不关心怎么处理这些信号;对于输出结构来讲,它只关心将计算机系统内部的信号传递出去。而现代的计算机系统中,通讯结构变得非常重要,这将计算机和其他外部设备进行数据交换。
典型的输入设备包括键盘、鼠标、触摸屏、传感器、摄像头等等,他们将物理世界的信号(敲击、声音、光线)转换成了计算机信号,并输入到计算机系统;典型的输出设备包括显示器、音响等,他们将计算机信号转换成了物理的声音光线信号。计算机系统内部通过声卡和显卡来将这些信号进行转换,应该也算作这些结构的一部分。
存储设备包括光驱,闪盘,硬盘等等。他们将数据存储在物理介质上,能够进行反复读写。比较特殊的是内存,它只能在计算机开机的时候临时存储数据,断电之后里面的数据就没有了。具体的原因跟分层有关,之后会提到。
通讯设备相对特殊,他们从本质上来讲也是一种输入输出设备,因为他们将外部设备信号和计算机系统进行传递,但是由于他们一般传递的都是电子数据,并且传递过程一般涉及到更复杂的细节,所以作为单独的结构。实际上,有些输入输出设备是通过通讯设备和计算机相连接的,比如蓝牙耳机通过蓝牙系统来和计算机连接,有些打印机是通过网络传输来与计算机连接。
处理设备比较复杂,大部分系统的处理设备是CPU,它的任务就是将程序执行,不过由于整个计算机就是建立在执行程序的基础之上,CPU的重要性不言而喻。由于抵达CPU的数据都已经是处理好的计算机能够理解的数据,它实际上只需要提供一个指令集,告诉别人我只能处理这上面的指令,那么传递给他的都是它能够理解的指令了。另外CPU还起到了联系整个计算机系统的作用,它和系统总线联系,将数据传递到各个设备上去。但是这还不够,由于外部的设备有时候是连续的流数据,很可能CPU还没处理好前一个数据,后一个就来了。考虑这个情况CPU从第一个线上拿到数字A,从第二根线上拿到操作符号+,准备从第三根线上拿数字B的时候,第三根线上其实真正的数字B已经消失了,取而代之的是刚刚输入进来的新数字,这样CPU就不会得到一个预想的结果。所以CPU采用了系统时钟来为计算机系统打节奏,假设CPU每秒钟打一次节奏,计算机系统每秒开始的时候将数据按照系统总线的方向移动一次,原来在输入设备的进入处理设备,在处理设备的进入输出设备;在这一秒过程中,每个设备处理手上的数据;在这一秒结束的时候,将数据准备交给下一个设备。这有点像流水线上的工人,以一种节奏进行工作;也有点像龙舟的鼓手,通过鼓点来组织船员划桨;也有点像交响乐里通过节奏的控制来使得每个乐器和声部相互和谐。
大致计算机的结构都没有逃出这个框架:处理结构控制节奏,各种线路传递数据,所有结构按照节奏各司其职。但是如果我们把视角放大到整个互联网来,整个互联网其实就是大量互相连接的计算机。我们手中的计算机其实只是一个输入输出设备,它将网络上的信息输出给我们,我们生成内容传递到互联网中去;而电信商架设的电缆实际上就是系统总线,来传递数据;大的互联网服务商,如Facebook,对于你的请求“看看朋友们发生了什么事情”,将朋友的状态返回给你;Google对于你的请求“从A到B的路程是怎样的”,将具体的路线返回给你,这实际上完成了处理结构的任务;大量的个人数据、文件备份也都存在于Gmail、Dropbox等服务上,这些充当了你的存储设备的角色。
所以这其实暗含了分层的思想,对于整个互联网络来讲,我们可以用这种封装的原则来思考这个这个网络系统。而到了具体的每台计算机系统的结构上来讲,也是可以通过封装来考虑的。互联网络结构是计算机系统的更高一层,高这里仅仅代表者更广泛和更抽象的意思。
网友评论