总线--计算机内部的高速公路(42讲) 发表于 2020-03-20 更新于 2020-04-28 分类于 计算机原理 阅读次数: Valine: 降低复杂性: 总线的设计思路来源12345678910计算机有很多不同的硬件设备、除了CPU和内存之外、还有大量的输入/出设备.键盘、鼠标、显示器、硬盘或者通过USB接口连接的各种外部设备、都对应了一个设备若各个设备间的通信、都是独立的. 假设有N个不同的设备、之间独立连接、复杂度为N², 为了简化系统复杂度、引入总线、将N²的复杂度变成N的复杂度如何降低呢 ?设计一个公用的线路、CPU和设备的通信指令、对应数据或者设备和CPU的通信指令和数据都发送到该线路上、设备间无需单独建立连接、只建立与总线的连接就好 这个设计思路就是`总线` 123456总线其实就是一组线路、各个设备通过这组线路相互通信.对应的设计思路就是`事件总线`设计模式在这个设计模式里、系统中的各个组件间也需要相互通信、各个模块触发对应的事件、并把事件对象发送到总线上.即: 每个模块都是发布者Publisher, 同时把自己注册到总线上、监听总线上的事件、并根据事件的对象类型或是对象内容来决定自己是否进行特定的处理或者响应这样各个模块就是松耦合的、模块间无依赖关系、无论是代码的维护还是未来的扩展、都很方便 理解总线: 三种线路和多总线架构1234现代Intel CPU的体系结构里、通常有好几条总线首先, CPU和内存及高速缓存通信的总线、通常有两种, 称为`双独立总线`(DIB: Dual Independent Bus)CPU里、有一个快速的`本地总线`(Local Bus)及一个相对较慢的`前端总线`(front-side Bus)本地总线和高速缓存通信、前端总线用来和主内存及IO设备通信 1234567在物理层面、可以将总线看做一组电线、不过这些电线之间也是有分工的、通常有3类:1. 数据线(Data Bus): 用来传输实际的数据信息2. 地址线(Address Bus): 用来确定将数据传输到哪里、是内存的额某个位置还是某个Io设备、3. 控制线(Control Bus): 用来控制对总线的访问. 若将总线比喻为公交车、有人要坐车时需要通知司机、这个就是控制信号总线减少了设备耦合、降低了系统设计的复杂度、但不能同时给多个设备提供通信功能那多个设备都想使用总线、给谁用呢? 就需要一个机制来决定、这个机制叫`总线裁决`