不奢望岁月静好 只希望点滴积累

0%

总线--计算机内部的高速公路(42讲)

降低复杂性: 总线的设计思路来源

1
2
3
4
5
6
7
8
9
10
计算机有很多不同的硬件设备、除了CPU和内存之外、还有大量的输入/出设备.
键盘、鼠标、显示器、硬盘或者通过USB接口连接的各种外部设备、都对应了一个设备
若各个设备间的通信、都是独立的. 假设有N个不同的设备、之间独立连接、复杂度为N²,
为了简化系统复杂度、引入总线、将N²的复杂度变成N的复杂度

如何降低呢 ?

设计一个公用的线路、CPU和设备的通信指令、对应数据或者设备和CPU的通信指令和数据都
发送到该线路上、设备间无需单独建立连接、只建立与总线的连接就好
这个设计思路就是`总线`

image.png

1
2
3
4
5
6
总线其实就是一组线路、各个设备通过这组线路相互通信.
对应的设计思路就是`事件总线`设计模式
在这个设计模式里、系统中的各个组件间也需要相互通信、各个模块触发对应的事件、并把事件对象发送到总线上.
即: 每个模块都是发布者Publisher, 同时把自己注册到总线上、监听总线上的事件、并根据事件的对象类型
或是对象内容来决定自己是否进行特定的处理或者响应
这样各个模块就是松耦合的、模块间无依赖关系、无论是代码的维护还是未来的扩展、都很方便

image.png

理解总线: 三种线路和多总线架构

1
2
3
4
现代Intel CPU的体系结构里、通常有好几条总线
首先, CPU和内存及高速缓存通信的总线、通常有两种, 称为`双独立总线`(DIB: Dual Independent Bus)
CPU里、有一个快速的`本地总线`(Local Bus)及一个相对较慢的`前端总线`(front-side Bus)
本地总线和高速缓存通信、前端总线用来和主内存及IO设备通信

image.png

1
2
3
4
5
6
7
在物理层面、可以将总线看做一组电线、不过这些电线之间也是有分工的、通常有3类:
1. 数据线(Data Bus): 用来传输实际的数据信息
2. 地址线(Address Bus): 用来确定将数据传输到哪里、是内存的额某个位置还是某个Io设备、
3. 控制线(Control Bus): 用来控制对总线的访问. 若将总线比喻为公交车、有人要坐车时需要通知司机、这个就是控制信号

总线减少了设备耦合、降低了系统设计的复杂度、但不能同时给多个设备提供通信功能
那多个设备都想使用总线、给谁用呢? 就需要一个机制来决定、这个机制叫`总线裁决`