本文已收录到 GitHub · AndroidFamily,有 Android 进阶知识体系,欢迎 Star。技术和职场问题,请关注公众号 [彭旭锐] 进 Android 面试交流群。
大家好,我是小彭。
在之前的文章中,我们聊到了计算机的冯·诺依曼计算机架构,计算机由五大部件组成。那么,计算机的五大部件是如何连接成一个整体的呢?这就需要依赖总线系统。
学习路线图:

在冯·诺依曼计算机架构中,计算机由控制器、运算器、存储器、输入设备和输出设备五个部分组成,而这五个部分必须进行 “连接” 起来相互通信才能形成一个完整的整体。 总线就是连接多个计算机部件的数据通信规范。
PC 计算机主板
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4XlaPasr-1668514945912)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/dc84fb986fae46378888c1c9540e82ad~tplv-k3u1fbpfcp-watermark.image?)]
—— 图片引用自 Wikipedia
先解释一下为什么现代的计算机系统要采用总线结构:
N-N 网型拓扑结构简化为 N-1-N 总线型结构或星型+总线型拓扑结构,不仅整体的系统结构清晰许多,可以提高系统稳定性。而且需要使用的布线数目也减少了,制造成本也更低;网状拓扑和总线拓扑对比

总线本身的电路功能,又可以拆分成 3 部分:
举个例子,当 CPU 要从存储器读取数据时,三类总线的工作过程概要如下:
总线内部结构

理解了总线的概念后,我们先来看总线系统的整体架构,现代计算机中的总线大多采用分层次多总线架构。
在早期计算机中,会使用单一总线来连接计算机的各个部件,这种结构叫单总线架构。这种结构实现简单,但缺点有 2 个:
单总线架构

因此,单总线系统很容易形成系统的性能瓶颈,就算是增大总线的带宽也无法从根本上解决系统性缺陷。目前,单总线结构只出现在微型计算机中。大多数现代计算机都采用了分层次多总线结构,所有的设计思路都是围绕单总线架构存在的 2 个缺点展开的:
现代 CPU 中通常会使用高速缓存,由于 “CPU-高速缓存” 和 “CPU - 内存” 的速度差非常大,计算机系统选择在 CPU 芯片内和 CPU 芯片外使用 双独立总线(Dual Independent Bus,DIB):
提示: 前端总线和系统总线的概念容易混淆,不同资料的说法不一。我的理解是:前端总线是 “特指” 某些 Intel CPU 架构中,CPU 芯片与外部连接的这条总线,而系统总线 “泛指” 连接计算机各个部件的所有总线。小彭在后续专栏内容都会按照此理解讨论。
前端总线和后端总线

南北桥架构是 Intel 提出的总线架构,也叫 Hub 架构 。它将计算机部件分为高速部件和低速部件两类,分为北桥芯片组合和南桥芯片组,中间用两颗桥芯片连接。使用南北桥设计有 2 个优点:
南北桥架构

前端总线是 CPU 连接外界的唯一通道,因此前端总线的数据传输能力对于计算机系统的整体性能影响非常大。 近年来随着 CPU 主频不断提升,前端总线频率却一直跟不上后端总线频率,从而出现性能瓶颈。
为了解决这个问题,传统的南北桥架构被重新设计,北桥芯片的功能几乎都移动到 CPU 内部变成 “片上北桥”。前端总线被淘汰,CPU / 片上北桥继续使用 DMI 连接南桥或 PCH 等外部设备。
总线既有共享性又有独占性,听起来有点矛盾,其实是表现的时机不一样:
总线的独占性天然地将事务串行化: 如果多个部件同时向总线发出总线事务,总线仲裁(Bus Arbitration)单元会对竞争做出总裁,未获胜的事务只能等待获胜的事务处理完成后才能执行。当其中一个总线事务在执行时,其他总线事务都会被禁止。
1、总线就是连接多个计算机部件的数据通信规范;
2、总线的电路结构由地址总线、控制总线和数据总线组成。举个例子,当 CPU 要从存储器读取数据时,三类总线的工作过程概要如下:
3、现代计算机中的总线大多采用分层次多总线架构,由片内+片外双独立总线平衡高速缓存和内存的速度差,由南北桥架构平衡高速部件和低速部件的速度差;
4、由于前端总线瓶颈和芯片集成度提高,南北桥架构逐渐被片上系统替代;
5、总线具有共享性和独占性,当多个部件同时向总线发出总线事务,总线天然地将事务串行化;
参考资料
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TNT8Uv1o-1668514945933)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7db0e43b744943f685ad1e3627f1ceb1~tplv-k3u1fbpfcp-watermark.image?)]