总线的基本概念
计算机各部件连接方式
- 分散连接:各部件之间通过单独的连线进行连接
- 总线连接:各部件连接到一条公共的信息传输线上,通过总线连接,大大简化了计算机内部的连接线的数量
总线的定义
总线是连接各个部件的信息传输线,是各个部件共享的传输介质。
总线上的信息传输
总线实际上由多条传输线或通路组成,每条传输线可传输一位二进制代码,一串二进制代码在一段时间内逐一传输完成,就是串行传输,若干条传输线可以同时传输若干位二进制代码,这就是并行传输
- 串行:二进制数据一位一位的进行传输
- 并行: 一次传输多位二进制数据
注意:任意时刻,只允许一个部件拥有总线的所有权,向总线发送信息,但可以有多个部件同时接受信息
总线结构举例
单总线结构
只有一条系统总线,所有的部件都连接到这条总线上。如果有多个部件同时要求占用总线时,会出现争夺现象,此时,总线成为了机器性能的瓶颈。
面向CPU的双总线
传统的冯诺依曼机是以运算器为核心的,发展出了面向CPU的双总线,其中一组总线连接CPU和主存,叫存储总线(M总线),另一组用来建立CPU和各I/O之间交换信息的通道,叫输入/输出总线(I/O总线)。缺点在于这种结构在I/O设备与主存交换信息时仍要经过CPU。
面向存储器的双总线
此结构是在单总线的基础上,又单独开辟一条CPU与主存间的通路,叫存储总线。这组总线速度高,只供主存与CPU之间通信,既提高了传输速率,又减轻了系统总线的负担,还保留了I/O与存储器交换信息时不经过CPU的特点。现代计算机大多数采用此类总线结构。
总线的分类
片内总线
片内总线是芯片内部的总线
系统总线
系统总线是计算机各部件之间的信息传输线。
按照系统传输信息的不同,又分为三类:
- 数据总线:传输各部件的数据信息,双向传输总线,位数与机器字长、存储字长有关
- 地址总线:指出数据总线上的数据在主存单元的地址,单向传输总线,与存储地址、I/O地址有关
- 控制总线:发出各种控制信号的传输线,对于单个控制线,是单向的,例如命令存储器读写是CPU发出的,对于这个命令不可能反向传输,对于控制总线总体来说,又是双向的,例如I/O设备也可以向CPU发出请求信号。
通信总线
通信总线用于计算机系统之间或计算机系统与其他系统之间的通信。传输方式也有串行和并行两种。
总线的特性及性能指标
总线特性
机械特性:机械连接方式上的一些性能,如尺寸、形状、管脚数及排列顺序
- 电气特性:每一根传输线上信号的传递方向和有效的电平范围
- 功能特性:每根传输线的功能,传输地址?数据?还是控制信号?
- 时间特性:任一根线在什么时间内有效。总线上的信号的时序关系。
性能指标
- 总线宽度:数据线的根数,用位表示
- 标准传输率:总线上每秒能传输的最大字节量,用MB/s表示。
- 时钟同步/异步:总线上的数据与系统时钟是否同步工作
- 总线复用:地址线与数据线用同一组线,某一时刻传输地址信号,另一时刻传输数据信号或命令信号
- 信号线数:地址线、数据线和信号线的总和
- 总线控制方式:并发工作、自动配置、仲裁、逻辑、计数等
总线结构
单总线结构
即前面总线结构举例的单总线结构,所有部件都挂在共享总线上极易形成系统瓶颈,但优点是结构简单,便于扩充,多用于小型机或微型机。
多总线结构
为了解决单总线中CPU、主存和I/O设备之间传输速率不匹配的问题,发展出多总线结构。
双总线
其中连接内存总线和I/O总线的通道有自己的程序,可以执行简单的指令,通道程序是操作系统编写的。
三总线
与双总线相比,三总线新增了一条DMA总线(Direct Memory Access,直接存储器访问),用于高速外设与主存之间直接交换信息。
注意:任意时刻仍然只能使用一种总线
我们知道,CPU的速度要比主存的速度快得多,但CPU要运行程序必须要从主存中获取数据,这就导致CPU被主存拖累而不能全力运行,为了解决这个问题,我们在CPU与主存之间加入高速缓存(Cache),CPU需要数据时会先去Cache取,Cache没有再去主存。这就引申出了三总线的另一种形式。
四总线
为了进一步提高I/O的性能,使其更快的响应命令,出现了四总线结构。
将高速设备与低速设备进行了区分,新增了一条与计算机系统紧密相接的高速总线。
总线控制
总线判优控制
基本概念
- 主设备(模块):对总线有控制权
- 从设备(模块):响应从主设备发来的总线命令
多个主设备同时请求使用总线,就由总线控制器的判优、逻辑仲裁按一定优先等级顺序,确定哪个主设备能使用主线。常见的总线判优控制分为集中式和分布式。
集中式将控制逻辑集中在一处(如CPU中),分布式将控制逻辑分散在与总线莲姐姐的各个部件或设备上。
集中控制又有三种仲裁方式:链式查询、计数器定时查询和独立请求方式。
链式查询
BR线:所有设备通过BR线发送总线请求,获得总线控制权
BS线:当某一设备获得总线控制权时,BS线就会通知其余设备和控制部件总线已被占用,设备请求时会检查BS线
BG线:串行的从一个I/O接口送到下一个I/O接口,当BG到达的接口有总线请求时,BG信号就不往下传,意味着该接口获得总线控制权,并建立总线忙BS信号
下图展示了I/O设备请求总线控制的过程:
- I/O设备通过BR线进行总线请求
- BG信号按照链式的方式对各个设备进行查找,找到是哪个设备发出的请求信号(BS线无总线已占用信号时)
- 将总线控制权给最先查找到的设备,并生成总线忙BS信号
对于链式查询方式,离总线控制部件最近的设备有着最高的优先级,这种方式的优缺点很明显:
- 优点:只需要很少几根线就能实现总线控制,且很容易扩充设备
- 缺点:对电路故障很敏感,如果BG线在I/O接口2处故障断开,那么接口2以后的设备再也无法收到BG信号,也就无法得到总线控制权
计数器定时查询
相比于链式查询,计数器查询取消了BG线,增加了设备地址线,总线控制部件内部还有一个计数器,计数器与设备地址线相结合,实现了BG线的作用。
下图展示了计数器定时查询的过程:
整个查询过程也分为3步,其中第1、3步与链式查询过程的1、3步相似,区别在于第2步。
当I/O接口的请求信号通过BR线传输到控制部件时,计数器变启动(假设从0开始),通过设备地址线向外传输计数器信号,计数器第一个数是0,就对I/O接口0进行查询,看是否是接口0提出的请求信号,如果不是,就将计数器+1,再查询接口1,直到找到发出请求的接口。
与链式查询方式相比,计数器定时查询方式最突出的优点在于可以改变计数器的初始值,从而改变I/O设备的优先级,这是链式查询方式无法达到的,更特别的,我们可以将计数器设置为从上一次查询到的位置开始计数,就实现了以循环优先级对设备进行查询。
既然有优点,那同样也有缺点。功能的进步导致了线路的复杂,表面上看只是多了一个计时器,但实际上设备地址线并不是一根线,而是一组线,因为要对设备地址进行编码,n个设备就需要log n条线(以2为底,向上取整),因此,比链式查询要多出log n - 1 条线。
独立请求方式
每个设备都有一堆总线请求线和总线同意线。当设备要求使用总线时,便发出请求信号,控制部件中有一排队器,可根据优先次序确定响应哪个设备的请求。
独立请求方式的优点是响应速度快,优先次序控制灵活(通过程序改变),而且对电路故障不敏感,一个设备的BG或BR线故障,不会影响其他设备的控制权获取。
缺点也很明显,控制线数量多,需要2n条线,总线控制复杂。
总线通信控制
目的
众多部件争夺总线控制权时,可以按照优先级解决,在通信传输时,按分时的方式解决。通信控制的目的就是解决通信双方的协调配合问题。
总线传输周期
一个总线传输周期包括四个阶段:
- 申请分配阶段:主模块申请,总线仲裁决定
- 寻址阶段:主模块给出从模块的地址和命令,启动从模块
- 传数阶段:主模块和从模块交换数据
- 结束阶段:主模块的相关信息从总线上擦除,让出总线使用权
总线通信的四种方式
- 同步通信通信双方由统一时标控制数据传送,时标通常由CPU的总线控制部件发出,送到总线上的所有部件。
- 异步通信采用应答的方式,没有公共时钟标准,主模块发送信号后,要等待从模块的响应反馈回来,这意味着主从模块之间要增加两条应答线
- 半同步通信采用同步、异步相结合的方式,同步体现自发送方用系统时钟前沿发信号,接收方用系统时钟后延判断识别;异步体现在对于速度不同的模块,增设一条“等待”响应信号线
- 前面的三种方式,整个传输周期主模块一直占据主线的控制权,但分析传输周期的四个阶段,寻址阶段与传数阶段之间会留有空闲时间,这段时间是从模块分析命令、准备数据的时间,这会造成总线的资源浪费。分离式通信解决了这个问题,充分挖掘系统总线的每个瞬间的潜力,基本思想是将一个传输周期分为两个子周期,第一个子周期是主模块将相关信息发给从模块,从模块接收到数据后就放弃总线使用权,以便其他模块使用;第二个子周期是等到从模块准备好数据后,重新发送总线请求,将数据传给主模块。
异步通信方式还可以分为不互锁、半互锁和全互锁三种类型。(有点像tcp的三次握手)
分离式通信的特点:
- 各模块有权申请占用总线
- 采用同步方式通信,不等对方回答
- 各模块准备数据时,不占用总线
- 总线被占用时,无空闲,充分提高了总线的有效占用
关于系统总线的知识到这就结束了,其中图件来源于慕课上哈工大的计算机组成原理课程,刘宏伟老师讲的很好很细致,想要学习的朋友可以去看一看。
本片文章就分享到这了,有任何问题可以在下方评论。
更多关于内容可以移步我的博客,热爱生活,分享知识。