大家好,我是小彭。
在之前的文章中,我们聊到了计算机的冯·诺依曼计算机架构,计算机由五大部件组成。那么,计算机的五大部件是如何连接成一个整体的呢?这就需要依赖总线系统。
学习路线图:
1.认识计算机总线系统1.1什么是总线?在冯·诺依曼计算机架构中,计算机由控制器、运算器、存储器、输入设备和输出设备五个部分组成,而这五个部分必须进行“连接”起来相互通信才能形成一个完整的整体。总线就是连接多个计算机部件的数据通信规范。
PC计算机主板
——图片引用自Wikipedia
1.2为什么要使用总线结构?先解释一下为什么现代的计算机系统要采用总线结构:
原因1-降低复杂性:这个设计思路跟软件开发中的中介者模式是相同的。总线结构将N-N网型拓扑结构简化为N-1-N总线型结构或星型+总线型拓扑结构,不仅整体的系统结构清晰许多,可以提高系统稳定性。而且需要使用的布线数目也减少了,制造成本也更低;
原因2-促进标准化:总线结构提供了一个标准化的数据交换方式,各个硬件按照总线的标准实现接口,而无需考虑对方接口或总线的工作原理,有利于各个部件模块化设计。
网状拓扑和总线拓扑对比
2.总线的内部结构总线本身的电路功能,又可以拆分成3部分:
1、地址总线(AddressBus,AB):地址总线传输的是地址信号。地址总线是单向的,地址信息只能从主设备发往从设备。地址总线宽度也决定了一个CPU的寻址能力,即多大可以访问多少数据空间。举个例子,32位地址总线可以寻址4GB的数据空间;
2、控制总线(ControlBus,CB):控制总线传输控制或状态信号。控制总线是双向的,信号可以从主模块发往从模块,也可以从从模块发往主模块(例如CPU对存储器的读写控制信号,例如I/O设备对CPU中断请求信号);
3、数据总线(DataBus,DB):数据总线传输的是实际的数据信息。数据总线是双向的,数据可以从主模块发往从模块(例如CPU向内存的写入操作),也可以从从模块发往主模块(例如CPU向内存的读取操作)。
举个例子,当CPU要从存储器读取数据时,三类总线的工作过程概要如下:
1、CPU通过地址总线发送要访问的存储单元的地址信息;
2、CPU通过控制总线发送读控制信号;
3、存储器通过数据总线发送指定存储单元上的数据,从CPU的视角就是读取。
总线内部结构
3.总线系统的架构理解了总线的概念后,我们先来看总线系统的整体架构,现代计算机中的总线大多采用分层次多总线架构。
3.1单总线架构和多总线架构在早期计算机中,会使用单一总线来连接计算机的各个部件,这种结构叫单总线架构。这种结构实现简单,但缺点有2个:
缺点1:计算机不同组件之间的速度差较大,例如CPU与内存或I/O设备的速度差非常大,当传输数据量很大时,CPU经常需要等待;
缺点2:所有的信号都要经过同一个共享的总线,不允许两个以上的部件同时传输信号。
单总线架构
因此,单总线系统很容易形成系统的性能瓶颈,就算是增大总线的带宽也无法从根本上解决系统性缺陷。目前,单总线结构只出现在微型计算机中。大多数现代计算机都采用了分层次多总线结构,所有的设计思路都是围绕单总线架构存在的2个缺点展开的:
应对缺点1:将高速部件和低速部件分为不同层级,不同层级之间使用独立的总线,减少高速部件对低速部件的等待;
应对缺点2:增加多条总线,使得数据可以同时在多个部件之间传输。
3.2双独立总线:片内片外现代CPU中通常会使用高速缓存,由于“CPU-高速缓存”和“CPU-内存”的速度差非常大,计算机系统选择在CPU芯片内和CPU芯片外使用双独立总线(DualIndepentBus,DIB):
前端总线(FrontSideBus,FSB):CPU与外部连接的总线(即CPU连接北桥芯片的总线);
后端总线(BackSideBus,BSB):也叫本地总线(LocalBus)或片内总线(On-chipBus),是CPU芯片内部独立使用的总线。CPU芯片内部一个或多个核心、Cache之间的通信将不需要占用芯片外的系统总线。
前端总线和后端总线
3.3南北桥架构南北桥架构是Intel提出的总线架构,也叫Hub架构。它将计算机部件分为高速部件和低速部件两类,分为北桥芯片组合和南桥芯片组,中间用两颗桥芯片连接。使用南北桥设计有2个优点:
1、缓冲功能:南北桥芯片实现了两类总线信号速度缓冲;
2、桥接功能:南北桥芯片实现了两类总线信号的转换,有利于系统升级换代。例如在升级CPU时,只需要改动CPU和北桥芯片,其它南桥部分不需要改动。
南北桥架构
北桥芯片(Northbridge):北桥处理高速信号。北桥芯片连接的设备都是高速传输设备,包含CPU、GPU、存储器与南桥的通信。北桥芯片也是CPU与外部连接的纽带;
南桥芯片(Southbridge):南桥处理低速信号。南桥芯片连接的大多是I/O设备,例如PCI总线、USB适配器、显卡适配器、硬盘控制器;
内存控制器(MemoryController):管理CPU和内存之间的总线数据传输,控制着存储器的读取和写入信号,并且定时刷新DRAM内的数据(DRAM的存储单元包含电容,会自动漏电);
内存总线(MemoryBus):连接北桥芯片与存储器的总线;
DMI总线(DirectMediaInterface):连接北桥芯片和南桥芯片的专用总线;
I/O总线:连接南桥芯片与I/O设备的总线;PCI局部总线:连接高速I/O设备的标准;ISA局部总线:连接低速I/O设备的标准。
3.4前端总线瓶颈前端总线是CPU连接外界的唯一通道,因此前端总线的数据传输能力对于计算机系统的整体性能影响非常大。近年来随着CPU主频不断提升,前端总线频率却一直跟不上后端总线频率,从而出现性能瓶颈。
为了解决这个问题,传统的南北桥架构被重新设计,北桥芯片的功能几乎都移动到CPU内部变成“片上北桥”。前端总线被淘汰,CPU/片上北桥继续使用DMI连接南桥或PCH等外部设备。
4.总线仲裁总线既有共享性又有独占性,听起来有点矛盾,其实是表现的时机不一样:
共享性:总线的共享性是指总线对所有连接的设备共享,主从模块能通过总线传输数据。
独占性:总线的独占性是指同一时刻,只允许一个部件占有总线的控制权,这个部件就是主模块,主模块可以与一个或多个从模块通信,但同一时刻只有一个主模块。
总线的独占性天然地将事务串行化:如果多个部件同时向总线发出总线事务,总线仲裁(BusArbitration)单元会对竞争做出总裁,未获胜的事务只能等待获胜的事务处理完成后才能执行。当其中一个总线事务在执行时,其他总线事务都会被禁止。
5.总结1、总线就是连接多个计算机部件的数据通信规范;
2、总线的电路结构由地址总线、控制总线和数据总线组成。举个例子,当CPU要从存储器读取数据时,三类总线的工作过程概要如下:CPU通过地址总线发送要访问的存储单元的地址信息;CPU通过控制总线发送读控制信号;存储器通过数据总线发送指定存储单元上的数据,从CPU的视角就是读取。
3、现代计算机中的总线大多采用分层次多总线架构,由片内+片外双独立总线平衡高速缓存和内存的速度差,由南北桥架构平衡高速部件和低速部件的速度差;
4、由于前端总线瓶颈和芯片集成度提高,南北桥架构逐渐被片上系统替代;
5、总线具有共享性和独占性,当多个部件同时向总线发出总线事务,总线天然地将事务串行化;
参考资料
深入浅出计算机组成原理(第42讲)——徐文浩著,极客时间出品
计算机组成原理教程(第3章)——尹艳辉王海文邢军著
10分钟速成课计算机科学——CarrieAnne著
SystemBus——Wikipedia
Northbridge(computing)——Wikipedia
Southbridge(computing)——Wikipedia
HyperTransport——Wikipedia
IntelQuickPathInterconnect——Wikipedia
Arbiter(electronics)——Wikipedia