3. 系统总线
文章目录
- 3. 系统总线
- 3.1 总线的基本概念
- 3.2 总线的分类
- 3.3 总线特性及性能指标
- 3.4 总线结构
- 3.5 总线控制
- 3.5.1 总线判优控制
- 3.5.2 总线通信控制
- 本笔记参考哈工大刘宏伟老师的MOOC《计算机组成原理(上)_哈尔滨工业大学》、《计算机组成原理(下)_哈尔滨工业大学》。
- 或者是B站《计算机组成原理(哈工大刘宏伟)135讲(全)高清》,大家一起听比较热闹。
- 中文教材:《计算机组成原理(第二版)-唐朔飞.pdf》、《学习指导与习题解答(第2版)-唐朔飞.pdf》
- 本篇笔记对应课程第三章(下图加粗)。
3.1 总线的基本概念
首先来讨论为什么需要总线?计算机基本的硬件包括CPU、内存条、固态硬盘、越来越多的io设备,这些器件之间显然需要相互通信才能配合工作。为了实现相互通信,可以采用“分散连接”的方法,把需要通信的器件单独连接起来,好处是通信互不干扰,但连接线的数量会随着设备的增多指数增长,并且新设备也难以加入;更好的方法就是设立一个公用的通信“总线”,谁需要通信谁就占用总线、其他人等待,实际上大量的io之间很少相互通信,所以这样设置更加合理,可扩展性非常好。
参考视频:【官方双语】并行和串行有啥区别?
总线是连接各个部件的信号传输线,是各个部件共享的传输介质。总线上信息的传送方式有“串行”、“并行”两种。由于并行传输有信号间干扰、信号同步、成本高等问题,所以并行传输速率不一定比串行传输快,通常情况下传输距离较长时(外部IO)串行传输、传输距离较短时(主板内)并行传输。下面来看3种总线结构的举例:
- 单总线结构:所有设备都连接到一条总线上,是最简单的总线结构。缺点是当“主存”和“io设备”进行数据输入/输出时,“CPU”无法和“主存”通信导致执行程序暂停,会大大减低CPU的运行效率。另外,如果设备很多,总线就会很长,主存和远端设备进行数据传输的时候时间延迟也会很长。当然,也存在“总线争用”问题。
- 面向CPU的双总线结构:“主存”只和“CPU”连接,好处是“CPU”运行程序时的效率大大提升;缺点是“主存”无法和“io设备”直接通信,需要进行数据输入/输出时,“CPU”运行程序还是会被打断。
- 以存储器为中心的双总线结构:如上图所示,在“单总线”的基础上,添加一个“CPU”和“主存”之间的存储总线,也就是专门开辟了“CPU”和“主存”的总线,兼顾了程序运行/数据传输的功能。但实际上,目前的内存条还是会分时复用这两条总线,相信未来硬件技术会突破这一问题。
3.2 总线的分类
根据总线的位置进行分类:
- 片内总线:芯片内部的总线。
- 系统总线:计算机各部件之间的信息传输线。再根据传输的信号不同,分为:
- 数据总线:双向,与机器字长、存储字长有关。通常,数据总线宽度≤机器字长=存储字长。
- 地址总线:单向,由CPU或主设备发出,与存储地址、I/O地址有关。
- 控制总线:输出一般是系统的各个部件传输控制信号、自己的状态信号,比如存储器读、存储器写、总线允许、中断确认等。输入一般是外部设备送给CPU,如中断请求、总线请求等。
- 通信总线:用于计算机系统之间或计算机系统与其他系统(如控制仪表、移动通信等)之间的通信。
3.3 总线特性及性能指标
上图给出了总线的物理实现。可以看到总线就是刻印在主板上,然后在主板的某些位置预留出接口,就可以将不同的器件插在主板上。为了实现插板和总线的有效连接,就需要规定一些总线特性:
- 机械特性:尺寸、形状、管脚数及排列顺序等。
- 电气特性:信号传输方向、有效的电平范围。比如数据线是双向的,地址线是单向的。
- 功能特性:每根传输线要实现的功能,比如地址信号、数据信号、控制信号、状态信号。
- 时间特性:信号的时序关系,保证电路正常工作。
而在使用总线时,我们最关心的其实是总线的性能指标:
- 总线宽度:数据线的根数。
- 标准传输率:每秒传输的最大字节数(MBps)。
- 时钟同步/异步:同步、不同步。注意“不同步”≠“异步”。
- 总线复用:地址线与数据线复用,减少芯片的管脚数,进一步减小芯片的体积。比如8086就是20根地址线,数据线复用其中的16根,使用时先传输地址、再传输数据。
- 信号线数:地址线、数据线和控制线的总和。
- 总线控制方式:突发、自动、仲裁、逻辑、计数。
- 其他指标:负载能力(挂载多少io设备)。
现代计算机比较复杂,计算机各部件的生产、制造、设计越来越专业化,于是这时就要有一个“约定”,使得不同厂家生产的不同器件可以组装在一起,形成一个协调运行的计算机硬件系统。其中对于总线的约定,也就是“总线标准”。“总线标准”也在从简单的、低速的总线,逐渐向高速的、可扩展能力强的总线不断的发展,如下表:
- ISA(Industry Standard Architecture,工业标准体系结构):是为PC/AT电脑而制定的总线标准,现已被淘汰。
- EISA(Extended ISA):是对ISA总线的扩展,兼容ISA总线,现已被淘汰。
- VESA(Video Electronics Standards Association,视频电子标准协会):由140多家成员公司组成的非盈利国际组织,致力于制订并推广个人计算机和小型工作站视频设备显示相关标准。
- PCI(Peripheral Component Interconnect,外设部件互连标准):PCI是独立于处理器的结构,形成了一种特殊的中间缓冲器式的设计方式,将CPU和外围设备分隔开,使得外部设备的时钟频率不会影响处理器性能。是个人电脑中使用最为广泛的接口,几乎所有的主板产品上都带有这种插槽。现在已经发展为PCIE总线。
- AGP(Accelerated Graphics Port,加速图像接口):由PCI发展而来。是英特尔推出的一种3D标准图像接口,是点对点的局部总线,主要是为了连接控制芯片和显卡,它能够提供四倍于PCI的效率。
- RS-232(Recommand Standard-232):是常用的串行通信接口标准之一。
- USB(Universal Serial Bus,通用串行总线):2024年甚至已经演进出了 USB 80Gbps 标准。
参考视频:USB接口全科普2024版:命名终于变简单了,但厂商不愿意用,雷电5我成替身了?
3.4 总线结构
下面在“3.1-总线的基本概念”基础上,继续分析一些更复杂的多总线结构:
- 单总线结构:见图3-2。所有设备连接到一条总线上。此时总线会成为系统的瓶颈。
- 双总线结构:除了前面讲的“面向CPU的双总线”、“以存储器为中心的双总线”,还可以如上图分成主存总线、I/O总线,然后通过“通道”实现 IO 和 CPU/主存 之间的交互。这个“通道”是一个结构简单的专用处理器,一般来说有自己的控制器、指令系统,并且通常由操作系统来编写“通道程序”,而不是人工。
- 三总线结构1:在“面向CPU的双总线结构”的基础上,增加一条 主存和部分高速IO 直接相连的“DMA总线(Direct Memory Access,直接存储器访问)”。
- 三总线结构2:随着技术的发展,CPU性能逐渐超过主存性能,于是需要额外增加一个小容量高速cache(如CPU片内缓存)辅助CPU运算,使用“局部总线”与CPU连接。“系统总线”则主要和“扩展总线”相连,外部设备的扩展则全部交给“扩展总线”,极大的增强了外部设备的扩展性,但是会限制某些高速外设的性能。
- 四总线结构:解决了上述“三总线结构2”的问题。也就是将外部设备按照传输速率分开,高速的外设直接连接到“高速总线”上,低速外设还是全部交给“扩展总线”。
下面来看看实际设备中的总线结构:
- 传统微型机总线结构:双总线,将“系统总线”和“IO总线”分离,非常简单。CPU和存储器通过“系统总线”连接,速度较快;剩下所有外设全部连接到“IO总线”上;“系统总线”通过“标准总线控制器”和“IO总线”相连,实现CPU/主存对外设的控制。
- VL-BUS局部总线结构:将“高速外设总线”和“低速外设总线”进行分离。
- PCI总线结构:和上一个结构类似。只不过“高速外设总线”使用PCI总线。
- 多层PCI总线结构:若总线上挂载设备过多,PCI总线驱动能力不足,于是使用“PCI桥”实现PCI总线的扩展。
3.5 总线控制
本章的重点和难点,主要考虑两个问题:
- 总线判优控制:多个设备可能同时发出“占用总线”的请求,这时总线就需要判断哪个设备具有使用的优先权。
- 总线通信控制:当两设备占用总线后,如何使用总线进行通信,保证通信过程的正确性。
3.5.1 总线判优控制
首先要明确的是,总线上的主设备(模块)对总线有控制权,从设备(模块)则是响应从主设备发来的总线命令。当然,一条总线上可以有多个主设备。上图给出“总线判优控制方法”:
- 集中式:将“判优逻辑”放在一个部件上,比如CPU。下面介绍集中式的三种判优逻辑。
- 分布式:将“判优逻辑”分布到各个设备上。
- 链式查询:距离优先,优点是结构最简单。所有部件共用BR请求总线,主设备收到请求后,逐个遍历从设备,直到找到第一个提出占用总线的从设备。优先权和距离有关,缺点是距离远的从设备可能一直不会被响应,并且对电路故障非常敏感、速度慢。常用于微型计算机或简单的嵌入式设备中。
- 计数器定时查询:和链式查询类似,只是引入计数器,可以软件设置遍历的初值。优点是优先级设置灵活,缺点是“设备地址”的位宽和设备总数有关、速度慢。
- 独立请求查询:每个从设备都有两个线连接到主设备,主设备内部设置一个“排队器”进行判优。优点是速度快、缺点是要求主设备有非常多的接口。
个人评论:感觉“独立请求查询”是最笨的,也就适合外设少的情况。
3.5.2 总线通信控制
“总线通信控制”的目的是解决通信双方协调配合问题。而“总线传输周期”是指主设备和从设备之间,完成一次完整的、可靠的通信所需要的时间,主要分为以下四个阶段:
- 申请分配阶段:主模块申请和从设备通信,总线仲裁决定。
- 寻址阶段:主模块向从模块给出地址和命令。
- 传数阶段:主模块和从模块交换数据。
- 结束阶段:主模块、从模块撤消有关信息。
那具体到总线的通信方式,主要有以下四种:
- 同步通信:由统一时标控制数据传送,这个“时标”也就是时钟信号,严格遵循时序。一般要求总线长度较短、各设备读写数据速率相近。
- 异步通信:采用应答方式,没有公共时钟标准。下面的“半互锁”、“全互锁”若没有收到相应的撤销标志,可以要求对方重发,于是便实现可靠通信。
- “不互锁”:从设备接收到主设备发送的请求信号后,从设备应答;后面主、从设备自动撤销。
- “半互锁”:前面都一样,只是主设备等待从设备应答后才撤销、从设备自动撤销。
- “全互锁”:前面都一样,只是主设备等待从设备应答后才撤销、从设备等待主设备撤销后才撤销。
- 半同步通信:同步、异步结合,主要为了解决不同速度设备之间的通信。“同步”体现在发送方用系统时钟前沿发信号、接收方用系统时钟后沿判断、识别。“异步”则体现在允许不同速度的模块和谐工作,原理是增加了一条从设备给出的“等待”响应信号WAIT(低电平有效)。
T 1 T_1 T1:主模块发地址。
T 2 T_2 T2:主模块发命令。
T w T_w Tw:当WAIT为低电平时,主模块等待一个 T T T。
T w T_w Tw:当WAIT为低电平时,主模块等待一个 T T T。
…
T 3 T_3 T3:从模块将WAIT拉高,同时提供数据。
T 4 T_4 T4:从模块撤销数据,主模块撤销命令。
上述三种通信方式的共同点就是,一个总线传输周期(以输入数据为例)可以分为以下三个阶段:
- 主模块发地址、命令【占用总线】。
- 从模块准备数据【未释放总线,但总线空闲】。
- 从模块向主模块发数据【占用总线】。
可以看到,在第二个阶段,虽然没有数据在总线上传输,但总线未被释放。为了提升总线的利用效率,可以在上述第二个阶段直接释放总线,于是请求数据、接收数据的过程可能被其他设备的通信分隔开,也就是下面的“分离式通信”:
- 分离式通信:充分提高了总线的有效占用。一个总线传输周期:
- 阶段1:主模块申请占用总线,使用完后即放弃总线的使用权。
- 阶段2:从模块重新申请占用总线,将信息送至总线上,发送给需要数据的模块。
- 分离式通信的特点:
- 各模块有权申请占用总线。
- 采用同步方式通信,不等对方回答。
- 各模块准备数据时,不占用总线。比如机械磁盘寻址平均需要十几ms,那么分离式通信就节省了这十几ms的总线占用。
- 总线被占用时,无空闲。
参考视频:【CSAPP-深入理解计算机系统】6-2. 机械磁盘——4:12s介绍机械磁盘对扇区的访问时间