设计来源:降低复杂度

  1. 计算机内部有很多不同的硬件设备,除了CPU和内存,还有大量的输入输出设备
  2. 如果各个设备间的通信,都是互相之间单独进行的,如果有N个不同的设备,他们之间需要各自单独连接,那么系统复杂度为**$N^2$**
  3. 为了简化系统的复杂度,引入了总线,把**$N^2$复杂度,变成了$N$**的复杂度
    • CPU想要和什么设备通信,通信的指令是什么,对应的数据是什么,都发送到这个线路上
    • 设备想要向CPU发送什么消息,也发送到这条线路上
    • 这条线路好像一个高速公路,各个设备和其他设备之间,不需要单独建公路,只需要建一条小路通向这条高速公路即可
  4. 总线(Bus),其实就是一组线路,CPU、内存、输入输出设备,都是通过这组线路,进行相互间通信

设计模式:事件总线

  1. 在大型系统开发的过程中,经常会用到一种叫作事件总线(Event Bus)的设计模式
  2. 系统中的各个组件之间需要相互通信,如果两两之间单独去定义协议,复杂度为**$N^2$**
  3. 各个模块触发对应的事件,并把事件对象发送到总线上,即每个模块都是一个发布者(Publisher)
  4. 各个模块也会把自己注册到总线上,去监听总线上的事件
  • 并根据事件的对象类型或者对象内容,来决定是否要进行特定的处理或者响应
  1. 注册在总线上的各个模块是松耦合的,模块相互之间并没有依赖关系,便于代码维护后续扩展

多总线架构

  1. Intel CPU的体系结构里面,通常有好几条总线
  2. CPU和内存以及高速缓存通信的总线,这里面通常有两种总线,称之为双独立总线(Dual Independent Bus,DIB
    • 一种是快速的本地总线(Local Bus),别称后端总线(Back-side Bus)
      • 高速缓存通信
    • 一种是速度相对较慢的前端总线(Front-side Bus),别称处理器总线(Processor Bus)、内存总线(Memory Bus)
      • 主内存输入输出设备通信
  3. 前端总线,别称系统总线,它通过一个IO桥接器,拆成两条总线(IO总线内存总线),分别和IO设备内存进行通信
  4. 物理层面,总线可以看作一组电线,这些电线可以分成三类
    • 数据线(Data Bus),用来传输实际的数据信息
    • 地址线(Address Bus),用来确定把数据传输到哪里去,是内存的某个位置,还是某一个IO设备
    • 控制线(Control Bus),用来控制对总线的访问
  5. 尽管总线减少了设备之间的耦合,也降低了系统设计的复杂度,但也带来了一个新问题:总线不能同时给多个设备提供通信功能
    • 总线是很多设备共用的,需要一个机制去决定把总线给哪个设备使用:总线裁决

参考资料

深入浅出计算机组成原理