计算机组成 -- 总线
设计来源:降低复杂度
- 计算机内部有很多不同的硬件设备,除了CPU和内存,还有大量的输入输出设备
- 如果各个设备间的通信,都是互相之间单独进行的,如果有N个不同的设备,他们之间需要各自单独连接,那么系统复杂度为**$N^2$**
- 为了简化系统的复杂度,引入了总线,把**$N^2$复杂度,变成了$N$**的复杂度
- CPU想要和什么设备通信,通信的指令是什么,对应的数据是什么,都发送到这个线路上
- 设备想要向CPU发送什么消息,也发送到这条线路上
- 这条线路好像一个高速公路,各个设备和其他设备之间,不需要单独建公路,只需要建一条小路通向这条高速公路即可
- 总线(Bus),其实就是一组线路,CPU、内存、输入输出设备,都是通过这组线路,进行相互间通信的
设计模式:事件总线
- 在大型系统开发的过程中,经常会用到一种叫作事件总线(Event Bus)的设计模式
- 系统中的各个组件之间需要相互通信,如果两两之间单独去定义协议,复杂度为**$N^2$**
- 各个模块触发对应的事件,并把事件对象发送到总线上,即每个模块都是一个发布者(Publisher)
- 各个模块也会把自己注册到总线上,去监听总线上的事件
- 并根据事件的对象类型或者对象内容,来决定是否要进行特定的处理或者响应
- 注册在总线上的各个模块是松耦合的,模块相互之间并没有依赖关系,便于代码维护和后续扩展
多总线架构
- 在Intel CPU的体系结构里面,通常有好几条总线
- CPU和内存以及高速缓存通信的总线,这里面通常有两种总线,称之为双独立总线(Dual Independent Bus,DIB)
- 一种是快速的本地总线(Local Bus),别称后端总线(Back-side Bus)
- 和高速缓存通信
- 一种是速度相对较慢的前端总线(Front-side Bus),别称处理器总线(Processor Bus)、内存总线(Memory Bus)
- 和主内存、输入输出设备通信
- 一种是快速的本地总线(Local Bus),别称后端总线(Back-side Bus)
- 前端总线,别称系统总线,它通过一个IO桥接器,拆成两条总线(IO总线、内存总线),分别和IO设备和内存进行通信
- 在物理层面,总线可以看作一组电线,这些电线可以分成三类
- 数据线(Data Bus),用来传输实际的数据信息
- 地址线(Address Bus),用来确定把数据传输到哪里去,是内存的某个位置,还是某一个IO设备
- 控制线(Control Bus),用来控制对总线的访问
- 尽管总线减少了设备之间的耦合,也降低了系统设计的复杂度,但也带来了一个新问题:总线不能同时给多个设备提供通信功能
- 总线是很多设备共用的,需要一个机制去决定把总线给哪个设备使用:总线裁决
参考资料
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.