文章
部分内容来自于 电子发烧友 内部总线、系统总线和外部总线汇总
部分内容来自于 知乎 前端总线,系统总线,内部总线,外部总线
本文是在两篇文章的基础上进行了二次加工,对两篇文章的精华内容进行了提炼,删掉了对理解主题不重要的,或已经过时的内容。并且为了更好的理解,自己又加了一些文字和图片。
说在前面的话
对于这样的概念不需要太过于纠结,看完以后心中有个大体的把握即可,因为概念性的东西没有标准答案,而且国内外各种资料相互“打架”,众说纷纭,造成现在这样一种概念混乱的局面。重要的是知道了这些概念之后,在以后的实际解决问题中,头脑能比较清楚就行。
好了,正文开始
什么是前端总线,内部总线、系统总线和外部总线?
首先把这个问题仅限于x86平台。其他cpu架构不见得是这么分。并且仅限于2000-2009年范围。这些概念也许只有DIYer圈知道。近几年intel的动作频频,把南北桥都要合并了。这个问题,再过几年也许就没意义了。
++++++++++++++++++++++++++我是时间线++++++++++++++++++++++++++++++++++++
2009年,英特尔和AMD已采用单芯片组技术,取代原有的南桥/北桥方案。Intel平台北桥被内置到CPU中。还有一些处理器,比如Intel超低压CPU、Intel Xeon D等Intel CPU已经内置南桥。
什么是总线
总线(Bus)是供多个部件分时共享的公共信息传送线路,一个系统的总线结构决定了该计算机系统的数据通路及系统结构。如今,几乎所有的计算机系统中都采用了总线结构。
在微型计算机中,总线以及所连接的部件都安放在主板(Main Board)上。计算机在运
行中对于系统内的部件和外部设备的控制都通过主板实现,主板的组成与布局也影响着系
统的运行速度、稳定性和可扩展性。
从另一个角度来看,如果说主板(Mother Board)是一座城市,那么总线就像是城市里的公共汽车(bus),能按照固定行车路线,传输来回不停运作的比特(bit)。这些线路在同一时间内都仅能负责传输一个比特。因此,必须同时采用多条线路才能发送更多数据,而总线可同时传输的数据数就称为宽度(width),以比特为单位,总线宽度愈大,传输性能就愈佳。
总结:个人感觉总线就是为了主板上各种东西的通信,建立的一些逻辑电路。
总线的分类
总线应用很广,形态多样,从不同的角度可以有不同的分类方法。下面列举几种。
1.按照总线传递的信号性质分类
按照总线传递的信号性质,可将其分为 3 种。
(1)地址总线(Address Bus,AB),用来传递地址信息。
(2)数据总线(Data Bus,DB),用来传递数据信息。
(3)控制总线(Control Bus,CB),用来传递各种控制信号。
2.按照总线所处的位置分类
按照总线所处的位置分为机内总线和机外总线。
机内总线
分为片内总线
和片外总线
。片内总线
指 CPU 芯片内部
用于在寄存器、ALU 以及控制部件之间传输信号的总线;片外总线
指 CPU 芯片之外
,用于连接 CPU、内存以及 I/O设备的总线。
机外总线
指与外围设备接口的总线
,实际上是一种外设的接口标准。目前在微型计算机上流行的接口标准有 IDE、SCSI、USB 和 IEEE 1394 等。
3. 按照总线在系统中连接的主要部件分类
按照总线在系统中连接的主要部件,可以将总线分为 5 种。
(1)存储总线:连接存储器。
(2)DMA 总线:连接 DMA 控制器。
(3)系统总线:连接 I/O 通道总线和各扩展槽。
(4)I/O(设备)总线:连接外部设备控制芯片。
(5)局部总线:通常是一种实现高速数据传送的高性能总线,用来在高度集成的外设控制器器件,扩展板和处理器/存储器系统之间提供一种内部连接机制。
4. 按照总线传输的数据单位分类
按照总线传输的数据单位分为串行总线和并行总线。图 3.2 为两者示意图。
(1)串行总线按位进行传输,每次传输一个位的数据。
(2)并行数据每次传输多位,通常有 8b、16b、32b 和 64b 等几种。所以,并行传输除了控制信号、电源等之外,要传输多少位数据,就需要多少根数据线。
5. 按照发送端与接收端有无共同的时钟分类
按照发送端与接收端有无共同的时钟,总线可以分为同步总线
与异步总线
等类型。
6. 按照系统中使用的总线数量分类
大多数总线都是以相同方式构成的,其不同之处仅在于总线中数据线和地址线的数目,以及控制线的多少及功能。按照系统中使用的总线的条数可以分为单总线结构、双总线结构和多总线结构。
单总线结构
单总线结构使用一组单一的系统总线来连接 CPU、主存和 I/O 设备
。在这类系统中,同一类信息在不同部件间传递时,通过同一组总线,或者说,所有的模块都挂在同一组总线上
。
这种总线结构连接灵活、易于扩充。单总线结构容易扩展成多 CPU 系统,这只要在总线上挂接多个 CPU 即可。因所有信息都在一组系统总线上传送,故信息传输的吞吐量受到限制。
双总线结构
双总线结构保持了单总线结构简单、易于扩充的优点,又在 CPU 和主存之间有一组专门高速总线
,使 CPU 可与主存迅速交换信息,而主存不必经过 CPU 仍可通过总线与外设之间实现 DMA 操作。这样,缓解了对系统总线和 CPU 的压力,提高了系统的效率。
由于各种设备对于总线的要求不同,在设备不断增加的形势下,总线趋向于分级的总线结构。
三级总线结构。
在双总线的基础上增加了I/0总线,这条线就是所有外设与“通道“通信的一条线。”通道“乍一听好像很抽象,其实就是南桥芯片。各芯片组厂商的南桥名称都有所不同,例如英特尔称之为I/O路径控制器(ICH)或平台路径控制器(PCH)。
上图中的”通道“就是下图的局部I/O控制器,I/O总线就是下面的扩展总线。
这种三级总线结构一般用于 I/O 设备性能相差不大的情况。在高速的视频设备、网络、硬盘等大量涌现的情况下,将它们与低速设备(如打印机、低速串口设备)接在同一条总线上,非常影响系统的效率。进一步的改进是为这些高速设备设立一条单独的高速总线,形成如图 3.4 所示的由系统总线、局部总线、高速总线和扩展总线组成的四级总线结构
。
上面已经对总线进行比较全面的分类,不过仅仅只是分了类,缺乏一些详细的内容,下面的部分就来补充一下,帮助理解的更全面。
补充
1、总线按功能和规范可分为五大类型:数据总线
、地址总线
、控制总线
、扩展总线
及局部总线
。
地址总线
:是专门用来传送地址的,由于地址只能从CPU传向外部存储器或I/O端口,所以地址总线总是单向的,这与数据总线不同,地址总线的位数决定了CPU可直接寻址的内存空间大小
。
控制总线
:用来传送控制信号
和时序信号
。控制信号中,有的是微处理器送往存储器和I/O接口电路的;也有是其它部件反馈给CPU的,比如:中断申请信号、复位信号、总线请求信号、设备就绪信号等。
- 一般规定送入 CPU 的信号称为输入信号(IN),从 CPU 发出的信号称为输出信号(OUT)。例如,地址总线是输出线,数据总线是双向传送,控制总线一般是单向的,有输出的也有输入的,如下图
数据总线
、地址总线
和控制总线
也统称为系统总线
,即通常意义上所说的总线。常见的系统总线看下面的图
上述这些标准中有些已经被淘汰,有些正在被应用,有些即将被应用
2、按照传输数据的方式划分,可以分为串行总线
和并行总线
。串行总线中,二进制数据逐位通过一根数据线发送到目的器件;并行总线的数据线通常超过2根。常见的串行总线有SPI、I2C、USB
及RS232等。
3、按照时钟信号是否独立,可以分为同步总线
和异步总线
。同步总线的时钟信号独立于数据,而异步总线的时钟信号是从数据中提取出来的。SPI、I2C是同步串行总线,RS232采用异步串行总线。
4、微机中总线一般有内部总线
、系统总线
和外部总线
。内部总线
是微机内部各外围芯片与处理器之间的总线,用于芯片一级
的互连;而系统总线
是微机中各插件板与系统板之间的总线,用于插件板
一级的互连;外部总线
则是微机和外部设备之间的总线,微机作为一种设备,通过该总线和其他设备进行信息与数据交换,它用于设备一级
的互连。
内部总线
内部总线原是指南桥芯片与北桥芯片之间的连线。下图南北桥中间的Internal Bus就是内部总线
在早期的主板上,对于Intel来说,这条内部总线有专门的名字,叫DMI(Direct Media Interface,直接媒体接口)。
现在英特尔和AMD已采用单芯片组技术,取代原有的南桥/北桥方案。所以现在的内部总线不再是原来的意思了。
外部总线上,还有一些零碎的低速小芯片。这个一般用户接触不到,是给制造商的开发人员用的。例如网卡需要一片eeprom来存唯一的MAC地址。很多pci卡上都能找到这些小flash。某些pci卡还有温度传感器。网卡的MAC和PHY之间也要有总线来读取链接速度、是否link等信息。控制这些小芯片使用诸如I2C SPI总线,即所谓的内部总线。
科普时间
I2C总线:I2C(Inter-IC)总线是同步通信的一种特殊形式,在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。
SPI总线:SPI(Serial Peripheral Interface:串行外设接口)。SPI接口主要应用在EEPROM
,FLASH
,实时时钟之间。
前端总线
前端总线(FSB,Front Side Bus)是指中央处理器数据总线
的专门术语,此总线负责中央处理器和北桥芯片间的数据传递
。现在的x86处理器内置了存储器控制器,FSB已被Intel QPI和AMD HyperTransport取代,QPI和HyperTransport在下面有科普。
某些带有L2和L3缓存(Cache)的CPU,通过后端总线(Back Side Bus,下面会介绍后端总线)实现这些缓存和中央处理器的连接,而此总线的数据传输速率总是高于前端总线。
通俗的说,前端总线
(FSB)就是CPU和北桥、内存的连接总线
了。北桥是PCI/PCIe 总线的发源地。但是由于技术的进步,FSB已经被取代,AMD很早就开始采用自己的HyperTransport(后续版本更改为HyperTransport Link简称HT link)代替了FSB来提高cpu与内存等芯片的数据传输速度,而intel亦采用QuickPathInterconnect(QPI)技术。但是总体上讲,这两种技术都是FSB的进化。
科普时间
QPI
快速通道互联(英语:Intel QuickPath Interconnect,缩写:QPI),是一种由英特尔开发
并使用的点对点处理器互连架构,用来实现CPU之间的互联
。英特尔在2008年开始用QPI取代以往用于至强(Xeon)、安腾处理器的前端总线(FSB)。
HyperTransport
HyperTransport总线技术,简称“HT总线
”,是AMD开发的一种处理器的互连技术。
前方高能 HT and HTT
卖场中常有“HT总线”与日后英特尔“HT技术”的混淆,然而这两个是截然不同的技术。HT一般指HyperTransport,或简称HT总线,一般情况下HyperTransport联合会都是使用全称“HyperTransport”以免造成歧义。而应用于奔腾4处理器、英特尔Nehalem微架构及其后续微架构之处理器的“HT技术”,英特尔的官方简称是HTT,Hyper-Threading Technology 或简称HT Technology(HT技术)。
后端总线
后端总线
(BSB,Back Side Bus):带有L2和L3缓存(Cache)的计算机中,负责中央处理器和外部缓存(经常为第二级缓存)之间的数据传递的数据通道
。后端总线传输速率总是高于前端总线。用于处理缓存数据的后端总线实际上是以CPU时钟速度运行。在在90年代中期,后端总线曾是保持数据移动的重要路径。Intel公司的Pentium II和Pentium Pro都使用所谓的芯片外缓存(Cache),与保存在传统内存中的数据相比,这类缓存将经常使用的数据靠近(在访问数据所需的距离和时间上)主处理单元保存。连线将CPU连接到第二级(L2)缓存并以CPU时钟速度在CPU与L2缓存之间交换数据。
系统总线
特指 PCI
/PCIe
总线。这是Intel主导发展的总线标准。
什么?还有EISA、VESA总线?请把他们遗忘在20世纪吧。胜者为王。
人的大脑和其他的器官、四肢,大部分靠脊髓相连。PCI/PCIe 总线 ,就相当于x86架构机器的脊髓。其他内部总线、外部总线,都是挂在系统总线上的。
USB、SATA、1394,统统是 PCI/PCIe 总线的下级。主要因为PCI/PCIe 总线带宽高;拥有硬件探测能力;改进的标准能热插拔。顺带提一下,因为PCI/PCIe 总线的硬件探测能力,加上微软定义的几套PC制造标准,我们才能一张xp盘装无数的x86机器。
科普时间
PCI总线:PCI(Peripheral Component Interconnect)外设元件互连标准。PCI总线是当前最流行的总线之一,它是由Intel
公司推出的一种系统总线。它定义了32位数据总线,且可扩展为64位。PCI总线主板插槽的体积比原ISA总线插槽还小,其功能比VESA、ISA有极大的改善,支持突发读写操作,最大传输速率可达132MB/s,可同时支持多组外围设备。PCI总线不能兼容现有的ISA、EISA、MCA总线,但它不受制于处理器,是基于奔腾等新一代微处理器而发展的总线。
外部总线
诸如USB,SATA,IDE,1394,串口,以太网,这些暴露给普通用户插的,就是外部总线。前面提到过,他们都是PCI/PCIe 总线 的下级。例如在PCI/PCIe 总线上,USB控制器是pci设备
。在USB总线上,USB控制器又是头头,U盘是设备。 U盘里的数据想去cpu,得经由 usb总线
-->pci总线
–>前端总线
–>CPU
科普一下USB
USB总线:通用串行总线USB是由Intel、Compaq、Digital、IBM、Microsoft、NEC、NorthernTelecom等7家世界著名的计算机和通信公司共同推出的一种新型接口标准。它基于通用连接技术,实现外设的简单快速连接,达到方便用户、降低成本、扩展PC连接外设范围的目的。它可以为外设提供电源,而不像普通的使用串、并口的设备需要单独的供电系统。
总结:
PC上一般有五种总线:
- 数据总线(Data Bus):在CPU与RAM之间来回传送需要处理或是需要储存的数据。
- 地址总线(Address Bus):用来指定在RAM(Random Access Memory)之中储存的数据的地址。
- 控制总线(Control Bus):将微处理器控制单元(Control Unit)的信号,传送到周边设备,一般常见的为USB Bus和1394 Bus
- 扩展总线(Expansion Bus):可连接扩展槽和电脑。
- 局部总线(Local Bus):取代更高速数据传输的扩展总线。
PS
做底层开发的,其实根本不关心内部总线、外部总线、系统总线这些叫法,因为这些叫法都不标准,充满歧义。真正干活时,总是明确地指出总线的具体名称:USB、PCIE、I2C、SPI。