计算机的总线系统
前言
计算机的冯·诺依曼计算机架构,计算机由五大部件组成。那么,计算机的五大部件是如何连接成一个整体的呢?这就需要依赖总线系统。
学习路线图:
1. 认识计算机总线系统
1.1 什么是总线?
在冯·诺依曼计算机架构中,计算机由控制器、运算器、存储器、输入设备和输出设备五个部分组成,而这五个部分必须进行 “连接” 起来相互通信才能形成一个完整的整体。总线就是连接多个计算机部件的数据通信规范。
1 | PC 计算机主板 |
—— 图片引用自 Wikipedia
1.2 为什么要使用总线结构?
先解释一下为什么现代的计算机系统要采用总线结构:
- 原因 1 - 降低复杂性: 这个设计思路跟软件开发中的中介者模式是相同的。总线结构将
N-N
网型拓扑结构简化为N-1-N
总线型结构或星型+总线型拓扑结构,不仅整体的系统结构清晰许多,可以提高系统稳定性。而且需要使用的布线数目也减少了,制造成本也更低; - 原因 2 - 促进标准化: 总线结构提供了一个标准化的数据交换方式,各个硬件按照总线的标准实现接口,而无需考虑对方接口或总线的工作原理,有利于各个部件模块化设计。
1 | 网状拓扑和总线拓扑对比 |
2. 总线的内部结构
总线本身的电路功能,又可以拆分成 3 部分:
- 1、地址总线(Address Bus,AB): 地址总线传输的是地址信号。地址总线是单向的,地址信息只能从主设备发往从设备。地址总线宽度也决定了一个 CPU 的寻址能力,即多大可以访问多少数据空间。举个例子,32 位地址总线可以寻址 4GB 的数据空间;
- 2、控制总线(Control Bus,CB): 控制总线传输控制或状态信号。控制总线是双向的,信号可以从主模块发往从模块,也可以从从模块发往主模块(例如 CPU 对存储器的读写控制信号,例如 I/O 设备对 CPU 中断请求信号);
- 3、数据总线(Data Bus,DB): 数据总线传输的是实际的数据信息。数据总线是双向的,数据可以从主模块发往从模块(例如 CPU 向内存的写入操作),也可以从从模块发往主模块(例如 CPU 向内存的读取操作)。
举个例子,当 CPU 要从存储器读取数据时,三类总线的工作过程概要如下:
- 1、CPU 通过地址总线发送要访问的存储单元的地址信息;
- 2、CPU 通过控制总线发送读控制信号;
- 3、存储器通过数据总线发送指定存储单元上的数据,从 CPU 的视角就是读取。
1 | 总线内部结构 |
3. 总线系统的架构
理解了总线的概念后,我们先来看总线系统的整体架构,现代计算机中的总线大多采用分层次多总线架构。
3.1 单总线架构和多总线架构
在早期计算机中,会使用单一总线来连接计算机的各个部件,这种结构叫单总线架构。这种结构实现简单,但缺点有 2 个:
- 缺点 1: 计算机不同组件之间的速度差较大,例如 CPU 与内存或 I/O 设备的速度差非常大,当传输数据量很大时,CPU 经常需要等待;
- 缺点 2: 所有的信号都要经过同一个共享的总线,不允许两个以上的部件同时传输信号。
1 | 单总线架构 |
因此,单总线系统很容易形成系统的性能瓶颈,就算是增大总线的带宽也无法从根本上解决系统性缺陷。目前,单总线结构只出现在微型计算机中。大多数现代计算机都采用了分层次多总线结构,所有的设计思路都是围绕单总线架构存在的 2 个缺点展开的:
- 应对缺点 1: 将高速部件和低速部件分为不同层级,不同层级之间使用独立的总线,减少高速部件对低速部件的等待;
- 应对缺点 2: 增加多条总线,使得数据可以同时在多个部件之间传输。
3.2 双独立总线:片内 & 片外
现代 CPU 中通常会使用高速缓存,由于 “CPU-高速缓存” 和 “CPU - 内存” 的速度差非常大,计算机系统选择在 CPU 芯片内和 CPU 芯片外使用 双独立总线(Dual Independent Bus,DIB):
- 前端总线(Front Side Bus,FSB): CPU 与外部连接的总线(即 CPU 连接北桥芯片的总线);
- 后端总线(Back Side Bus,BSB): 也叫本地总线(Local Bus)或片内总线(On-chip Bus),是 CPU 芯片内部独立使用的总线。CPU 芯片内部一个或多个核心、Cache 之间的通信将不需要占用芯片外的系统总线。
提示: 前端总线和系统总线的概念容易混淆,不同资料的说法不一。我的理解是:前端总线是 “特指” 某些 Intel CPU 架构中,CPU 芯片与外部连接的这条总线,而系统总线 “泛指” 连接计算机各个部件的所有总线。小彭在后续专栏内容都会按照此理解讨论。
1 | 前端总线和后端总线 |