三总线是传统微机原理教学的常用概念。三总线就是数据总线、地址总线和控制总线。当时我曾经说通过这三条总线,CPU就和外设通信了。其实呢,这是不对的。因为再外设和CPU之间还有一个东西,那就是IO端口。
CPU其实不是直接和外设通信的,而是通过对IO端口进行读写而间接的和外设通信的。地址总线决定了CPU和哪个IO端口通信,控制总线决定了是把端口的数据读到CPU里面来还是把CPU的数据送到端口里面去,数字总线就顾名思义了就是传递数据的总线。这都不用再详细复述了。
那么端口又有哪些呢?一般而言可以分为状态端口、控制端口和数据端口。咋一看控制端口、数据端口和控制总线、数据总线都是差不多,实际上是两回事情。三端口有什么作用呢。控制端口是向外设发送控制信号的,控制外设你小子该干嘛干嘛。状态端口呢,是查询外设处于什么状态的,简单的说就是看外设这小子有没有闲着偷懒。而数据端口呢?自然还是传数据用的了。
假设CPU要和外面的某外设通信了,CPU要传数据给某外设。那CPU应该怎么办?CPU应该先查状态端口,状态端口和什么相连呢?一侧和三总线相连,CPU通过三总线读取了状态端口的值。另外一侧就和外设的状态信号相连,状态端口的值就等于外设状态信号的值。CPU把从状态端口读回来的值一看:这小子空闲着呢。马上往控制端口里也个数据:起来,开工了。控制端口又和什么相连呢?当然一侧是和三总线相连,CPU通过三总线把数据写到控制端口里面去了,另外一侧是和外设的控制信号相连的,外设一看端口那边连过来的控制信号值变了,CPU老大叫我了,于是打起精神来了,给老大回了一个:老大我准备好了。话说这CPU看控制信号送出去了,也不知道这外设动起来了没有,于是又去看状态端口,看这小子是什么个状态了。查状态端口一看,这小子醒了,于是就把数据传到数据端口上存在着。然后再通过控制端口写一条命令:小子,收数据了。外设一看老大叫收数据了,马上把数据端口的数据读进来。然后汇报老大:老大,我收完了,我又空闲了……
总的说来,CPU其实是和IO端口通信,通过对IO端口的读写,完成了对外设的控制和通信。那么为什么CPU不直接控制外设呢?因为外设的种类太多了,如果CPU要适应不同的外设,那么久不是三总线这么简单的数据传输方式能够摆平的呢,N总线也不一定能摆平。那这计算机系统就没法做了。而在外设和CPU之间插入了IO端口这么一个东西,很多事情就好办多了。CPU对于IO端口的读写方式是确定的,这样在计算机系统内部很多东西就确定了。那么外部呢?外设的信号不是多种多样么?怎么办呢?别急,外设的信号就算再多种多样,也逃不过数据、控制和状态这么三类。无法就是多几位控制信号,少几位状态信号,多几个数据锁存,少几个数据缓冲而已。这就可以通过增加或减少这三种端口的数量来实现。而且不要忘记,CPU这个强大的哥们是在程序控制下运行的。其实也未尝不可把它看成一个在程序下可以生成不同的数据的特殊的集成电路。需要什么样的数据就生成什么样的数据,需要什么样的信号就生成什么样的信号,只要你装得下。那好了,微机系统的设计问题就演变成了一个在标准的三总线上如何挂接各种各样的端口的以及如何通过程序来读写这些端口的问题。而这一切,都是非常容易标准化和有章可循的。
随着时代的发展,微机系统在计算机技术和微电子技术的双重推动下,计算机系统逐渐走上了SOC的道路。以前一个电路板上做的东西,现在全部都集成到一块芯片里面去了。这样带来的好处就是,硬件设计者再不用去设计端口了,只需要去寻找那些SOC芯片是不是具备所需要的端口就行了。这种趋势的另一种推动力则是端口的标准化,不但everything over 了IP,而且everything over 了USB。以前那些稀奇古怪的端口都不见了,外设和主机之间开始变得由几种固定的端口连接了。即使有少许的那么几种不太规则的端口,也可以通过那些被端口化了的GPIO来完成。总线早已被“深埋在芯片内部”,硬件设计者所要做的就是选择满足端口需求的芯片,然后把这些端口一一的连在外设上。从软件设计者来讲,需要和硬件设计相配合的那些读写端口的软件早已经被标准化,被屏蔽在操作系统之下。当需要使用接口的时候,就直接调用一个函数而已,再也体会不到软件是如何去读写那些端口的。
这是时代的发展,却是电子行业的悲哀,更是中国电子行业的悲哀。由于芯片都是老外做的,操作系统都是老外搞的。中国也就是拿别人的东西来做个应用,搭个积木而已。那些本应该为人熟知的基本原理和基础知识,从此深埋在芯片和操作系统中再难以寻觅。久而久之,中国的电子信息产业已经空心化、应用化、浮躁化。这也就是为什么我们开发出了比前人复杂得多的东西,却在疑问为什么工资却越来越低。因为很多人都拿着老外卖的自动步枪,傻乎乎的端起枪往前冲着,享受着端起枪扫射的快感,却不知道自己只是一个炮灰。
所幸的是,在中国始终还是有那么一帮人坚持着这些最基本的东西,为中国的电子信息产业保持着最后一口气。我坚信,我还是站在这帮人中间的。