降低复杂性
计算机里其实有很多不同的硬件设备,除了 CPU 和内存之外,我们还有大量的输入输出设备。可以说,你计算机上的每一个接口,键盘、鼠标、显示器、硬盘,乃至通过 USB 接口连接的各种外部设备,都对应了一个设备或者模块。
如果各个设备间的通信,都是互相之间单独进行的。如果我们有 N 个不同的设备,他们之间需要各自单独连接,那么系统复杂度就会变成 NN。每一个设备或者功能电路模块,都要和其他 N−1 个设备去通信。为了简化系统的复杂度,我们就引入了总线,把这个 NN 的复杂度,变成一个 N 的复杂度。
为达到降低复杂度的目的,前人们设计了一个公用的线路,CPU 与什么设备通信,通信的指令,对应的数据等都发送到总线上,设备像 CPU 发送数据,也是发送到这个线路上。
三种线路和多总线架构
首先,CPU 和内存以及高速缓存通信的总线,这里面通常有两种总线。这种方式,我们称之为双独立总线(Dual Independent Bus,缩写为 DIB)。CPU 里,有一个快速的本地总线(Local Bus),以及一个速度相对较慢的前端总线(Front-side Bus)。
高速本地总线用来和高速缓存通信的。而前端总线,则是用来和主内存以及输入输出设备通信的。本地总线也叫作后端总线(Back-side Bus),和前面的前端总线对应起来。而前端总线也有很多其他名字,比如处理器总线(Processor Bus)、内存总线(Memory Bus)。
总线按照功能可以分为以下三种:
- 数据线(Data Bus):传输实际的数据信息。
- 地址线(Address Bus):用来确定到底把数据传输到哪里去,是内存的某个位置,还是某一个 I/O 设备。
- 控制线(Control Bus):用来控制对总线的访问。
尽管总线减少了设备之间的耦合,也降低了系统设计的复杂度,但同时也带来了一个新问题,那就是总线不能同时给多个设备提供通信功能。当多个设备使用总线的时候,就要用到总线裁决(Bus Arbitration)机制来决定把总线给哪一个数倍使用。