3.1 总线的基本概念
为什么需要总线
首先需要知道的是:计算机的各个部件之间需要线路进行连接才能传输数据,如果没有总线,则需要连接的计算机部件通过线路进行直接连接,就会类似如下:
不难发现这样一来连线就十分复杂,并且不易于部件之间的增删。
如果采用了总线:
什么是总线
总线是连接各个部件的信息传输线,是各个部件共享的传输介质。
同一时间可能有不同的部件去请求发送资源给总线,这个时候就会产生请求的冲突,所以为了防止冲突,需要有总线判优控制,来保证一个时间点只有一个部件能操纵总线发送信息,其余部件可以同时接受信息。
总线上信息的传输
总线的信息传输分为串行和并行:
- 串行:一位一位二进制信息进行传输(一根线)
- 并行:同时传输多位二进制信息(多根线)
一般都是并行,所以总线一般由多根线组成。
总线结构的计算机举例
面向CPU的双总线结构框图
这里你会发现,所有的I/O设备
想要获取存储的数据,都需要通过M总线经过CPU
才可以获取,这样就会导致CPU
的压力过大,从而导致计算机的性能变慢。
注意这里的细节,所有的IO设备都不是直接挂接到总线上面,而是通过接口挂接上去,具体原因在第五章会进行讲述。
单总线结构
在这种情况下,IO设备访问主存就不需要再通过CPU了,但是这样同样有一个问题,就是总线会经常处于繁忙的状态,而总线一个时间点只有一个设备发送信息,所以总线压力会很大。
以存储器为中心的双总线结构
这是现在主流的总线结构,也就是在CPU和主存之间加一条总线,在降低CPU的压力的同时也降低了系统总线的压力。同样在主存和CPU之间建立总线也利于两者之间频繁的信息交换。
所以好的总线结构也可以提高计算机的性能。
3.2 总线的分类
不同的分类标准有不同的分类。
如果根据传输信息的方式分类可分为:
- 串行总线
- 并行总线
如果根据总线传输信息的位数分类可以分为:
- 8位宽
- 16位宽
- 32位宽
- 64位宽
其余详细参见:
【计算机基础】总线定义与分类_高阳.的博客-CSDN博客
本章主要根据总线的连接部件的不同进行分类。
片内总线
指的是芯片内部的总线。
比如CPU寄存器内部,各寄存器之间的内部总线。
系统总线
计算机的各部件的信息传输线。
根据传输信息的不同又可以划分为:
- 数据总线:(双向)与机器字长,存储字长有关,代表一次访存的信息量
- 地址总线:(单向)与存储地址,IO地址有关
- 控制总线: 有输出CPU的,也有输入CPU的,所以单独看每一根总线是单向的。
统称系统三总线。
通信总线
用于计算机系统之间或计算机系统与其他系统(如控制仪表、移动通信等)之间的通信。
3.3 总线特性及性能指标
总线的物理实现
总线特性
- 机械特性:尺寸、形状、管脚数,排列顺序
- 电气特性:传输方向和有效的电平范围
- 功能特性:每根传输线的功能
- 地址:传输地址信息
- 数据:传输数据新型
- 控制:传输控制信息
-
总线的性能指标(掌握)
总线宽度:也就是数据线的根数
- 标准传输率:每秒传输的最大字节数(MBps)
- 总线带宽 = 总线传输率 = 总线工作频率 * 总线宽度 / 8
- 时钟同步/异步:总线上的数据和时间同步称之为时钟同步,反之为异步。
- 总线复用:地址总线和数据总线可以复用
- 例如8086总线,地址总线有的时候可以当做数据总线用,可以减少总线数目
- 一般采用分时复用,也就是不同的时间复用不同总线
- 信号线数:地址线,数据线,控制线的总和
- 总线控制方式:并发,自动,仲裁,逻辑,计数
-
总线标准
定义
总线标准:系统与各模块、各模块与各模块、系统与系统之间的标准界面。
常见的总线标准
ISA:黑色,通常在工业计算机当中,所有数据都需要通过cpu做管理,性能低,现在基本不常用
- EISA:在ISA基础上扩充,从CPU当中分离了总线控制权,与ISA兼容,是一种智能化总线
- VESA(VL-BUS):局部总线标准
- PCI:常见的总线标准
- 短插槽,克服了ISA和EISA受带宽限制
- 良好的兼容性,独立于处理器
- 可以即插即用,也就是任何的扩展卡插入这个总线即可立马使用。
- 可扩充性高:可以采用多层结构扩充总线驱动能力
- AGP:加速图形端口
- 显卡专用总线
- RS-232:串行通信总线
- 和计算机支持的逻辑电平不一致
- 抗干扰能力强
- 常用于远距离信号传输
- USB:通用串行总线
- 真正的即插即用(前面的即插即用需要在计算机关机的情况下,这里的即插即用无需关机即可使用)
- 很强的连接能力,利用usbhub实现扩展
- 数据传输率高
- 可以充电(类似手机充电线)
3.4 总线结构
单总线结构
多总线结构
双总线结构
对比单通道,增加了一个主存总线,并且通过一个通道连接两个总线。
三总线结构
区别于双总线结构,三总线结构将访问速度高,访问频率搞的高速外设与主存直接做连接,进一步提升性能。
此外还有一种三总线结构如下:
这是由于CPU的工作速度远比主存快很多,所以主存会拖慢CPU,是影响计算机速度的瓶颈,为了解决这个问题,从而在CPU和一个高速缓存存储器(Cache)上面建立总线,大部分IO设备都挂接在扩展总线上,局部IO设备(高速)直接挂接在局部总线上。
四总线结构
四总线的设计原则是:工作速度越快的部件越靠近CPU,所以不难看出,工作速度对比:
Cache > 主存 > 高速外设 > 低速外设
信息交换更频繁也更靠近CPU。
其余总线结构举例
不是很重要,就直接放图片了。
传统微型机总线结构
VL-BUS局部总线结构
PCI总线(常用)
3.5 总线控制(重点)
总线判优控制
基本概念
- 主设备(模块):对总线具有控制权(可以控制总线发送信息)
- 从设备(模块):响应总线发送的总线命令
总线的判优控制就是在多个主设备同时请求控制总线的时候发挥作用,判断某一个时间点应该是让哪一个主设备控制总线。
总线的判优控制有两种方式:
- 集中式
- 链式查询
- 计数器查询
- 独立请求方式
- 分布式
这里主要学习的集中式
链式查询
请求控制总线的流程如下:
首先看BR(总线请求)部分,这里有两个设备(看见接口就代表有一个对应的设备)发起了请求,分别是IO设备1
和IO设备n
,此时会根据BS(总线忙)判断总线现在是否处于被控制的状态。如果没有,则通过BG(总线同意),按照链路依次发送信息,途径IO设备0
会判断该接口是否发送了请求,如果没有发送请求,就传递给下一个设备。这里检测到IO设备1
有发送请求,此时IO设备1
通过BS获取总线控制权。
优点:线路简单
缺点:
- 设备之间控制权优先级永远是在前面的越高,在后面的越低
- 对电路敏感,一旦前面的接口故障,后面的接口无法获取控制权
计数器查询
这里会发现相比链式查询,计数器查询少了一根BG信息号线,多了一组设备地址信号线。
工作流程如下:
- 首先还是各个
IO设备
通过BR发送请求 - 控制器通过计数器计算本次应该获得控制权的设备地址
- 通过设备地址信号线发送到各个设备
- 如果某一个设备同时发送了请求,且地址匹配,则该设备获得控制权
不难看出,这样做以后各设备的控制权优先级,取决于计数器的计数方式。
举个例子:如果计数器每次都是从0开始计数(也就是设备0优先级最大,往后递减),那么各设备的优先级同链式查询。但如果计数器每次计数不归零,并且到最大值之后开始循环计数,那么各设备的优先级总体上来看就是相同的。
优点:
- 可以保证各设备优先级一致
- 对电路不敏感
缺点:用一根BG线换了一组地址信号线,成本大。
这里地址信号线的个数取决于设备的个数,如果有n个设备,那么地址信号线的个数为
**log****2****n**
原因是一根线可以传递一位二进制信号,n根线就可以表示2n
个数,也就可以表示2n
个地址,对应2n
个设备。
独立请求方式
可以看到独立请求方式让每一个设备都有独立的请求线和同意线,各设备的优先级取决于排队器内的算法,运行步骤也很简单:
- 各设备通过独立的BR发送请求
- 排队器返回应该获取控制权的设备
- 通过BG返回相应设备
优点:
- 相应速度快。相比前两种方式,链式查询如果设备靠后,BG的响应就有延迟,计数器查询需要计算,同样耗费时间,独立请求每个设备的响应时间理论上都是相同的。
- 同样对电路不敏感
总线通信控制
目的
解决通信双方协调配合问题。
也就是获知通信双方什么时候开始/结束通讯,怎么通讯。
总线传输周期
申请分配阶段
:各主设备进行申请,由总线仲裁决定控制权寻址阶段
:主设备给从设备发送地址信息和命令传数阶段
:主设备和从设备交换数据结束阶段
:主设备撤销有关信息,使得总线不忙,保证下一次申请分配以上四个阶段都是针对于多个主模块争夺总线控制权的情况下,对于仅有一个主模块的简单系统,无需以上四个步骤,总线的使用权始终归他所有。
总线通信的方式
同步通信
:由统一时标控制数据传输(好比统一周末交作业)异步通信
:采用应答方式控制数据传输(好比你写好了作业就交作业)半同步通信
:同步异步结合分离式通信
:充分挖掘系统总线每个瞬间的潜力
在了解四种通讯的方式之前,首先要知道如下概念:
计算机最小时间单位为时钟周期**T**
,为计算机主频的倒数。
所谓主屏就是CPU的时钟频率,也就是计算机每秒计算的次数,一般单位为MHx(兆赫)
cpu是主模块,掌握总线控制权。总线每次都只能由一个主模块进行控制。
总线传输数据的周期分为四个时间周期:T1,T2,T3,T4
同步通信
所谓同步通信就是由统一时标控制数据传送,时标通常由CPU的总线控制部件发出,发送到总线上的所有部件。也可以由每个部件各自的时序发生器发出,但必须由总线控制部件发出的时钟信号对他们进行同步。
首先看一下同步通信的输入:
首先看时钟周期这条线:
数字电路中,数字电平从低电平(数字“0”)变为高电平(数字“1”)的那一瞬间(时刻)叫作上升沿。数字电平从高电平(数字“1”)变为低电平(数字“0”)的那一瞬间叫作下降沿。
整体流程如下:
- CPU在T1上升沿发出地址信息
- CPU在T2上升沿发出读命令
- 和第一步返送的地址信息相匹配的输入设备按照指令执行一系列的操作,在T3上升沿到来之前把CPU需要用到的数据发送到数据总线上面
- CPU在T3时钟周期内,把数据线上的数据发送到内部的寄存器当中
- CPU在T4的上升沿撤销命令
由于数据线和地址线通常情况是一簇,而命令线通常情况下是一根,所以地址线和数据线的总宽度大于命令线。
读命令一般是在低电平的时候发出,所以呈下降的趋势。
接下来看一下同步通信的输出:
大致原理是一样的,只不过由于是输出,所以在T1下降沿的时候就已经由CPU提供了数据。
优点:
- 通信之间规定明确,统一
- 模块之间的配合简单一致
缺点:
- 主从模块之间需要强制同步,必须在限定时间完成规定的要求
- 模块间速度不匹配,运行速度快的模块必须等待速度慢的模块
- 缺乏灵活性
影响总线数据传输率的两个方面的因素:
- 数据宽度(也就是一次能传输多少位的数据)
- 时钟总线频率,或者总线时钟周期
看一个例题:
假设总线的时钟频率为100MHz,总线的传输周期为4个时钟周期,总线的宽度为32位,试求总线的数据传输率。若想提高一倍数据传输率,可采取什么措施
解答:
- 时钟频率也就是计算的主频,主频的倒数就是时钟周期,所以:
一个时钟周期为 1/100MHz = 0.01μs
M = 1 106 μ = 1 10-6
- 上面知道总线传输周期一般有四个时钟周期,所以:
总线传输周期:0.01μs * 4 = 0.04μs
这个周期也是总线传输一次数据需要用的时间
- 总线的宽度就是一次能传送多少位数据,32位 = 4B(字节)
- 数据传输率就是单位时间里面传输的数据总量,也就是
数据传输率 = 总线宽度 / 总线传输周期
,所以:
总线传输率 = 4B / 0.04μs = 4 / (4 10*-8**) MBps= 100 MBps
异步通信
为了解决同步通信的痛点,异步通信的出现允许了各模块之间速度的不一致,给了设计者充分的灵活性和选择性。异步通信采用了应答的方式进行通信,主模块发送信号(Request)之后,从模块接受信号发送反馈(Ac-knowledge)之后,两个模块即可开始通讯,进行数据的传输。
这里就要求主从模块自建添加俩条线用于做请求和反馈。
根据应答方式的不同,异步通信又分为以下三种:
不互锁:主模块发送请求信号之后,不去等待从模块的反馈,经过一段时间之后默认已经收到了反馈,便撤销其请求信号。从模块同理,接受到请求信号后会发送反馈,经过一段时间后默认主模块已经收到了反馈,从而撤销其回到信号。
例如:CPU向主存写信息,CPU无需等待反馈,先后直接给出地址信号,写命令以及写入的数据
半互锁:主模块发送请求信号之后,必须等待从模块的反馈,在此期间一直保持请求信号,得到反馈后才可以撤销请求信号。从模块在接收到请求信号后发送反馈,但不必等待主模块接收到反馈,过一段时间自动撤销该信号。
例如:一个多机系统,某个CPU需要访问一个共享存储器,这个存储器一次只能由一个CPU访问,该CPU发送信号请求访问共享存储器,需要获得一个存储器未被占用的反馈才可以进行访存操作。
全互锁:主模块发送请求信号之后,必须等待从模块的反馈,在此期间一直保持请求信号,得到反馈后才可以撤销请求信号。从模块发送反馈之后,必须等待获知主模块请求信号已经撤销以后,才能撤销它的回答信号。
例如:网络通信
异步通信可用于串行传送和并行传送。
两者区别很明显:
上图演示了同样传输
01100010
这个数据,并行和串行的区别。
简单来说就是并行一次性可以传送多位数据,而串行一次性只能传送一位数据。
并行传送如上图,一次就可以把表示字符的多位二进制数据传输成功,也就是说一次即可传输一位数据帧。
再看看串行传送:
通常传送都是一个数据帧一个数据帧进行传送,而计算机当中只有0和1,所以需要在一串只有0和1的数据当中辨别出需要传送的字符,所以需要约定字符格式:
- 1个起始位(低电平 0)
- 5-8个数据位 (用于表示传送的字符)
- 1个奇偶校验位(用于检验字符是否传输错误)
- 1或者1.5或者2个终止位
所以异步串行通信至少需要10位才能传送字符。
上图中两者的却别在于(a)中传送一个字符之后还有三位的空闲位,而b中没有,这里b的传送率就是最高的。
本小节参见:
https://www.jianshu.com/p/b0c5810a79ef
异步通信的数据传输率
这里的数据传输率一般是计算异步串行通信,使用波特率进行衡量。
波特率:单位时间内传送二进制数据的位数,单位是bps(位/秒),记作波特。
例题:
在异步串行传送系统中,假设每秒传输120个数据帧,字符格式为:1个起始位、7个数据位、1个校验位、1个终止位,计算其波特率。
解答:
- 首先根据字符的格式,计算机一个数据帧包含的二进制位数
一帧包含:1 + 7 + 1 + 1 = 10位
- 根据定义即可得出,
波特率 = 每秒传输数据帧个数 * 数据帧位数
波特率为:120 * 10 = 1200 bps
这里还有一个定义,比特率:单位时间内传送二进制有效数据的位数(也就是数据位的个数)
所以如果是计算比特率的话就是:
比特率:120 * 7 = 840 bps
附加知识点: 同步串行传送速度高于异步串行传送速度,原因点击查看
半同步通信
半同步通信保留了同步通信的基本特点,比如地址命令数据信号的发出时间,同时又类似异步通信,允许不同速度的模块进行协调工作。不同的是增加了一条等待(wait)响应线。
已输入数据为例:
大体和同步通信是一致的,只不过在T3之前增加了若干的Tw
,也就是等待时间。当WAIT信号为低电平的时候,就会认为从模块数据暂时没有准备好,于是插入一个Tw
,如果过了这个时间,WAIT信号仍然是低电平,就再次插入一个Tw
,直至数据已经准备好。
优点:
- 系统简单(对比异步通信的情况下)
- 工作速度高(对比纯同步通信的情况下)
-
分离式通信
分析一下以上三种通信的方式,会发现除了申请总线这一个阶段,其余时间主要花费在以下三个方面:
主模块通过传输总线向从模块发送地址和命令
- 从模块按照命令进行读数据的必要准备
- 从模块经过数据总线向主模块提供数据
可以发现数据准备的时候总线是处于空闲状态的,没有任何数据在总线上传输。
为了利用这段时间,于是就出现了分离式通信:
简单的来说就是利用空闲的时间,另一个模块利用总线传输数据:
特点:
- 各模块想要占用总线使用权都必须提出申请
- 在得到总线使用权之后,主模块在限定的时间内向对方传送信息,采用同步式传送么不用等待对方的回答信号
- 各模块在准备数据的过程中都不占用总线,总线可以接受其他模块的请求
- 总线在被占用的时候一直都是在做有效工作