考研408笔记之计算机组成原理(六)——总线
计算机组成原理六——总线1. 总线的概述在之前的学习过程中虽然没有对总线进行详细的学习但是对总线已经有了一定的接触在之前会画这样的一个图如上面CPU可以通过地址总线给主存或给打印机、硬盘这些发送地址信息所以在上图可以看到在CPU和地址总线之间有一根连线硬盘和地址总线之间有一根连线主存和地址总线之间也有一根连线。除了地址总线之外之间还经常遇到数据总线CPU可以通过数据总线和主存、打印机、硬盘之类的其它的一些硬件部件进行数据的传输并且之前说过数据总线有可能并行的传递32bit或更多bit的数据。最后之前还经常接触的还有一个叫控制总线就是CPU可以通过控制总线给其它的硬件部件发送一些控制信号。接下来解释一下为什么一个数据总线可以并行的传递32bit或更多bit的数据。原因是每个总线里面可能会包含很多根信号线。比如说把数据总线拆解一下如下图数据总线的内部可能如上图所示的样子一个数据总线里边有可能会包含多跟信号线上图画了4根当然如果想并行的传递32bit那数据总线内部就可以包含32根信号线。比如CPU想给主存发送4bit数据0101那就意味着CPU只需要给数据总线的四根线上分别加上高低电平信号就可以而0101这四个数据可以被主存接收也可以被硬盘接受还可以被打印机接收因为这些高低电平信号只要加到上面的4根线上那么由于所有的硬件部件都是连在数据总线上所以所有的硬件部件都可以通过数据总线来接收CPU要发给他们的信号。所以虽然平时通常说一根总线虽然说的是一根但是这个总线内部有可能是包含了多根信号线的那到底要包含几根这个主要看具体的需求。但是仔细想一下刚才是说CPU往总线上面加了四个高低电平信号那么这四根线就会带有0101的数据信息。现在假设SSD固态硬盘也想往数据总线上传送数据比如SSD传送1111这个时候就会导致每一条信号线上面的信号会有冲突。所以对于这样的一根数据总线来说同一时刻只能有一个部件发送数据但是可有多个部件接受数据。下面看一下这章的总览接下来首先看一下总线的定义总线是一组能为多个部件分时共享的公共信息传送线路上图中给出的图是总线与各个部件的连接图图中上半部分是CPU的运算部件和控制单元图中下半部分是输入输出设备和主存CPU和这些设备之间会通过一组系统总线来进行数据的交互以及控制信号的收方所有的硬件部件都是通过系统总线来进行相互的控制和数据的传送。早期计算机由于外部设备非常少因此大多采用分散连接方式但是这种方式不易实现随时增减外部设备。为了更好地解决l/O设备和主机之间连接的灵活性问题计算机的结构从分散连接发展为总线连接。总线有两个很明显的特点一个是分时一个是共享。分时和共享的意思参考下图当在设计一个总线的时候需要关注到如下图的特性接下来重点关注总线的分类总线的分类可以根据不同的维度进行分类分类的方式如上图。下面先介绍一下按数据传输格式的分类总线按数据传输格式可以分为串行总线和并行总线。首先解释一下什么是串行总线什么是并行总线。假设设备A要给设备B发送4bit数据1011如果采用串行总线就意味着A只能一个比特一个比特的发送这四位数据B接收也是一个比特一个比特接收。如果采用并行总线就意味着A能并行的发送这四位数据B接收时也能并行的接收。显然CPU和主存之间用于传送数据的数据总线就是一种并行总线。由于串行总线每次只需要传递一个比特的数据因此只需要用一根传输线就可以实现串行总线所以串行总线实现起来成本比较低。由于串行总线成本低而且只有一根抗干扰能力强所以串行总线广泛用于长距离传输。但串行总线缺点也很明显在数据发送和接收的时候要进行拆卸和装配(通常来说发送一组有意义的二进制信息至少是以一个字节为单位但由于每次只能传递一个比特因此就存在把一个完整的信息包拆卸和装配这样的一个过程)另外还要考虑串行-并行转换的问题。接下来再看并行总线的优点并行总线的逻辑时序比较简单电路实现起来比较容易。但缺点也很明显信号线数量多占用更多的布线空间远距离传输成本高昂。另一方面由于并行总线工作频率较高时并行的信号线之间会产生严重干扰可能会导致二进制信息跳变所以并行总线无法持续提升工作频率。因此在实际传输的速度上并行总线不一定比串行总线快。接下来看一下按总线功能分类根据总线功能可以分为片内总线、系统总线和通信总线。先来看片内总线片内总线就是芯片内部的总线。它是CPU芯片内部寄存器与寄存器之间、寄存器与ALU之间的公共连接线。系统总线是计算机系统内各功能部件CPU、主存、IO接口之间相互连接的总线。系统总线又可以根据其传输信息的内容不同进一步划分为数据总线、地址总线和控制总线。这里需要重点探讨数据总线、地址总线和控制总线的数据传输方向的问题如下图首先看一下数据总线数据总线传输各功能部件之间的数据信息包括指令和操作数。数据总线包含数据线的位数(根数)与机器字长、存储字长有关。同时通过之前的学习不难理解数据总线传输数据的方向是双向的。接下来看地址总线地址总线传输地址信息包括主存单元或I/O端口的地址。地址总线包含数据线的位数(根数)与主存地址空间大小及设备数量有关。地址总线传递信息是单向的一定是由CPU发送地址信号来指明它想要读或者写的这个设备或者主存地址是哪一个。接下来看控制总线控制总线传输传输控制信息控制总线内部也会包含多根控制线一根控制线传输一个信号。控制总线里面包含的一根一根的控制线对于单根控制线来说控制信号的传输方向肯定都是单向的有的控制线是由CPU发出给其它的设备而有的控制线是CPU用来接收其它硬件设备给它返回的控制信号的。所以对于单根控制线来说信号的传输方向是单向的然而对于整个控制总线来说它的传输方向既有可能是CPU向其它设备传输也有可能是其它设备向CPU反馈。这里补充一点第五章里说过数据通路的概念要注意数据通路表示的是数据流经的路径而数据总线是承载的媒介。接下来说第三种通信总线通信总线是用于计算机系统之间或计算机系统与其他系统如远程通信设备、测试设备)之间信息传送的总线通信总线也称为外部总线。接下来介绍几种系统总线的结构单总线结构、双总线结构和三总线结构首先看单总线结构即在计算机内部只设置一组系统总线然后CPU、主存和各种IO设备之间都是连接在这一组系统总线上的所有功能部件都是通过这一组系统总线来进行数据的传输。注意单总线并不是指只有一根信号线这根总线里还包含了地址总线、数据总线和控制总线。显然这种总线结构优点是结构简单成本低易于接入新的设备。缺点就是带宽低、负载重多个部件只能争用唯一的总线且不支持并发传送操作。单总线结构中CPU和主存是属于比较快速的设备但是其它的外部设备属于慢速设备因此虽然系统总线可以支持很快的速度传输但是当用快速的系统总线来让慢速的设备传输数据的时候就意味着快速的系统总线的性能是被浪费的所以所有的慢速设备都接在同一根快速的系统总线上是不合理的接下来看双总线结构是如何解决这个问题的双总线结构会让CPU、主存和通道统一的连到一个主存总线上。这里先说一下通道的概念通道可以看成是阉割版的小CPU但是这个功能部件是专门用于管理各种各样的IO设备的所以从上图可以看到通道和下面的IO总线之间有一个双向箭头所有的IO设备不管是快还是慢都会通过通道来和CPU进行间接的交互而通道对信息的处理速度很快所以把通道和CPU直接通过主存总线进行连接。通过通道就可以保证快速的主存总线的性能可以被发挥出来而下面的IO总线由于各种IO设备读写速度较慢所以下面的IO总线设计时性能就可以设计的慢一些。另一方面能对l/O设备进行统一的管理而通道要管理这些IO设备它也需要运行管理相关的程序代码而通道要运行的程序也是被存放在主存里面的所以主存和通道间也可以通过快速的主存总线来进行数据的交互。另外再补充一点主存总线可以支持突发(猝发)传送即送出一个地址可以收到多个地址连续的数据。正常来说CPU每指明一个地址可以从主存当中读出一个字的信息但是由于主存当中保存的信息很多时候都是需要被连续的访问的因此会有这样的一个需求CPU指明一个地址后如果能从主存当中连续的读出多个字的数据那这样的话系统的效率肯定就能更高。这也就是突发传送方式的意义。双总线结构的优点是将较低速的l/O设备从单总线上分离出来实现存储器总线和IO总线分离。缺点是需要增加通道等硬件设备。接下来看三总线结构三总线结构如上图可以看到有三个总线主存总线用于连接主存和CPU这两个高速部件之间的交互。主存和某一些快速的IO设备之间会用DMA总线来连接。快速的IO设备可以通过DMA总线将数据传递给主存然后CPU从主存里获取数据这么做的好处就是CPU不需要通过慢速的IO总线和设备进行数据交互而是可以先把数据从快速的设备放到主存里然后CPU从主存里获取数据这样可以缓和CPU和快速的IO设备之间的速度矛盾。三总线结构使得某一些高速的IO设备的性能得到提升因为这些高速的IO设备可以通过更快的DMA总线和主存之间进行数据交互。另外由于这些慢速的IO设备和CPU是直接连接的所以它们可以更快的响应CPU发出的命令因此系统的吞吐量得到提升。而这种总线结构的缺点是系统工作效率较低这是因为三个总线同一时刻只能有一个总线在工作。接下来再拓展一种四总线结构如上图可以看到有一个CPU总线用于连接CPU和cache。然后有一个系统总线用于连接主存。还有高速总线用于连接快速的设备。最后还有一个扩充总线用于外部设备的扩充。在四总线结构中不同的总线的速度是各不相同的显然CPU总线是最快的其次是系统总线和高速总线由于不同的总线之间有速度差异因此需要增加一个中间设备桥接器用于连接不同的总线。桥接器具有数据缓冲、转换和控制功能。另一点在这种四总线结构中越靠近CPU的总线速度是越快的。另外每级总线的设计遵循总线标准总线设计标准的内容408不考有兴趣自己研究。四总线结构在考试中通常不考但这种结构才是现代计算机最常用的一种结构。下面对本节内容进行小结2. 总线的性能指标考察方式总线的性能指标一般考察选择题或大题第一小问。首先看第一个性能指标——总线的传输周期也叫总线周期。总线周期指利用总线来传输一组数据所需要的时间通常一个总线周期会被分为申请阶段、寻址阶段、传输阶段和结束阶段这四个阶段。申请阶段主要负责总线仲裁(总线仲裁内容408不考察有兴趣可以去了解)即决定是否把总线分配给某一个设备使用。寻址阶段主设备要指明从设备的读写的地址。第三个阶段主设备在指明地址以后会通过总线向从设备里写入数据或读出数据。数据传输完成以后最后会进入一个结束阶段就是要释放总线的使用权把总线让给其它设备使用。总线周期包含这样的四个阶段经过一个总线周期以后就可以完成一组数据的传送。一个总线周期通常由若干个总线时钟周期构成。接下来看第二个性能指标——总线的时钟周期。对于早期的计算机来说总线的时钟周期的时钟信号是由CPU发出的所以总线的时钟周期通常就是机器的时钟周期。但是现在的计算机中总线时钟周期也有可能由桥接器提供。这一点可以参考上一节的四总线结构里面就有桥接器。这里要说明一点总线周期与总线时钟周期的关系比较魔幻大多数情况下一个总线周期包含多个总线时钟周期。但有的时候一个总线周期就是一个总线时钟周期还有的时候一个总线时钟周期可包含多个总线周期。所以做题时要注意审题明确总线时钟周期和总线周期的关系。第三个总线的工作频率和第四个总线的时钟频率很简单参考上图的介绍即可这里不再过多叙述。接下来看第五个性能指标——总线的宽度这个很好理解总线宽度就是总线上同时能够传输的数据位数通常是指数据总线的根数如32根称为32位(bit)总线。注意总线宽度一般是数据总线的位数而没有包含地址总线和控制总线的宽度。接下来看第六个性能指标——总线的带宽总线带宽可理解为总线的数据传输率即单位时间内总线上可传输数据的位数通常用每秒钟传送信息的字节数来衡量单位可用字节/秒B/s表示。总线带宽的计算公式如上图。注意总线带宽是指总线本身所能达到的最高传输速率。而题目中如果让计算实际的有效教据传输率时要用实际传输的数据量除以耗时。有效传输速率和总线带宽是有区别的下面用一道例题感受一下提到了总线带宽下面再来看一下上一节有关串行总线和并行总线的遗留问题表面上并行总线的总线宽度大于串行总线的总线宽度所以会认为并行总线的总线带宽大于串行总线的总线带宽。但实际上总线带宽还受总线工作频率的影响所以工作频率相同时串行总线传输速度比并行总线慢。但并行总线的工作频率无法持续提高而串行总线可以通过不断提高工作频率来提高传输速度最终超过并行总线。接下来看第七个性能指标——总线复用总线复用是指一种信号线在不同的时间传输不同的信息。可以使用较少的线传输更多的信息从而节省了空间和成本。之前画的图地址总线和数据总线是独立的两组线但是也可以采取上图的方式用同一组线来分时的传输地址信息和数据信息这样就可以用更少的线来传输更多的数据从而节省总线的布线空间和硬件的成本。基于总线复用技术如果CPU要往主存当中写入某一个数据那CPU要先通过总线发出地址信息主存接收到地址信息以后CPU要再发出数据的信息同样通过总线传递给主存主存根据刚才接收到的地址信息把接受到的数据写入刚刚地址。所以采用总线复用技术显然当要传递地址信息和数据信息的时候至少都需要两个总线周期需要进行两次数据传送。所以总线复用虽然节约了成本但也会使速度有所下降。最后看第八个性能指标——信号线数。信号线数就是地址总线、数据总线和控制总线3种总线数的总和称为信号线数。这个指标很简单不过多叙述。下面对本节内容进行一个汇总小结3. 总线的操作和定时本节研究总线的操作和定时即占用总线的一对设备如何进行数据传输。之前说过总线周期可以分为四个阶段如上图首先要经过申请分配阶段某一个主设备要想使用总线那么他需要向总线控制部件发出请求申请总线控制权。然后接下来总线控制器按照一定的优先级把总线的控制器分配给某一个主设备即进行总线仲裁经过请求和仲裁这两个阶段就完成了申请和分配这个阶段所需要做的事情。当主设备获得总线控制权以后就可以开始用地址信息来指明它想要读或者写的从设备是哪一个因为每一个设备都会有自己的地址编号所以主设备可以用地址来指明它想要配合工作的从设备是哪一个。除了地址信息外还需要发出相关的命令比如是进行读操作还是写操作指定的从设备接收到相关请求后就会启动这就是第二个阶段寻址阶段所要做的事情。接下来第三个阶段传输阶段这个阶段要进行具体的数据交换。接下来第四个阶段主模块传输完数据以后需要把总线的控制权让出来所以要把地址信息之类的相关的电信号从总线上擦除。这就是一个总线周期大致上要经历的的四个阶段这一小节要说的总线定时指的就是主模块与从模块在双方交换数据的过程中需要时间上配合关系的控制这种控制称为总线定时。事实上总线定时的问题就是要制定某一种协议或规则让数据的发送方和接收方都能按照统一的规则来进行数据交互。接下来介绍四种总线定时的方案分别是同步通信、异步通信、半同步通信和分离式通信。首先同步通信这种方式会由总线控制器提供一个统一的时钟信号用来控制数据传送。异步通信方式相当于没有提供一个统一的节奏而是让主设备和从设备在获得总线的使用权以后让他们用应答的方式来相互协商决定工作的节奏这种定时方式不会有一个统一的节拍。接下来半同步通信是同步和异步通信的结合。最后的分离式通信又可以更进一步的挖掘总线每瞬间的潜力。接下来详细探究一下这四种通信方式首先看一下同步定时方式同步通信方式总线控制器采用一个统一的时钟信号来协调发送和接收双方的传送定时关系。假设此时CPU是主设备CPU获得了总线的控制权然后CPU作为主设备可以主动的选择某一个输入设备作为从设备想要从从设备读入某一个数据那么要进行读操作所以可以这样安排总线的传输周期。假设一个总线周期里包含了四个时钟周期T1、T2、T3、T4那么CPU获得总线的控制权以后第一个周期的上升沿处CPU会发出地址信号用来指明它想要读的从设备的地址。接下来T2节拍会向从设备发出读命令从上图可以看到读命令的电平信号是向下画的也就是说在这个例子里默认低电平有效。所以在T2这个周期内从设备首先可以根据地址信息来判断这个主设备要操作的对象是不是自己然后根据读命令可以知道这个主设备想从自己这里读出数据所以T2时钟周期内从设备需要准备好主设备想要的数据。接下来T3时钟周期的上升沿到来的时候从设备就会把自己准备好的数据给放到数据总线上主设备就可以从数据总线上获得自己想要的数据。接下来T4时钟周期内主设备会撤销读命令然后再紧接着撤销地址信号释放总线的控制权。所以经过这样的一个总线传输周期每一个节拍内主设备和从设备会完成对应的操作接下来就可以进入下一个总线周期。上面就是用同步定时方式完成一次读操作的例子。可以看到从设备在接收到地址信息和读命令之后T2这个时钟周期内从设备需要准备好想要读的数据然后在T3的上升沿到达的时候就把这个数据放到数据总线上。显然如果说从设备的速度比较慢跟不上节奏的话那么就意味着在T3周期内从设备有可能给不出数据这样的话同步定时方式就会出现问题。因为同步定时方式意味着这个统一的时钟信号是固定的每一个总线的传输周期只会给四个时钟信号所以如果从设备跟不上这么快的节奏那么他们俩的这种数据通信就会出现问题所以这就是同步通信方式的一个局限性。下面再把同步通信方式的特点进行一个总结如果有不懂的地方可以跳转视频8分钟~10分钟40秒6.3_总线操作和定时接下来看异步通信方式采用异步通信方式就意味着系统不会提供一个统一的时钟信号主设备需要提出交换信息的请求信号从设备会通过IO接口接收到这个请求信号然后根据请求信号的具体信息从设备会发出回答信号。对于这种异步通信方式并不会有一个统一的时钟部件来统一动作这个时候主设备和从设备又是如何配合工作的呢这种情况下可以根据“请求”和“回答”信号的撤销是否互锁把异步定时进一步细分为不互锁方式、半互锁方式和全互锁方式。接下来依次看一下这三种方式首先看不互锁方式主设备发出“请求”信号后不必等到接到从设备的“回答”信号而是经过一段时间便撤销“请求”信号。而从设备在接到“请求”信号后发出“回答”信号并经过一段时间自动撤销“回答”信号。双方不存在互锁关系。接下来看半互锁方式主设备发出“请求”信号后必须待接到从设备的“回答”信号后才撤销“请求”信号有互锁的关系。而从设备在接到“请求”信号后发出“回答”信号但不必等待获知主设备的“请求”信号已经撤销而是隔一段时间后自动撤销“回答”信号不存在互锁关系。最后看全互锁方式主设备发出“请求”信号后必须待从设备“回答”后才撤销“请求”信号从设备发出“回答”信号必须待获知主设备“请求”信号已撤销后再撤销其“回答”信号。双方存在互锁关系。通过对三种方式的了解很明显可以看到不互锁方式速度最快但可靠性最差全互锁方式速度最慢但可靠性最好。通过对三种异步定时方式的了解可以发现异步定时方式的优点是总线周期长度可变能保证两个工作速度相差很大的部件或设备之间可靠地进行信息交换自动适应时间的配合。缺点是比同步控制方式稍复杂一些速度比同步定时方式慢。接下来看半同步通信半同步通信就是同步与异步的结合看上图比起同步控制方式来说半同步这种通信方式会增加一个反馈的信号wait。首先主设备在T1时间内发出地址信号然后再T2节拍前沿发出读命令如果按照之前同步定时方式在T2这个节拍再往后的一个节拍从设备需要准备好自己的数据但是有的从设备跟不上这种节奏所以当从设备跟不上节奏的时候就会通过控制线路给总线的控制器进行一个反馈让总线控制器等自己几个节拍所以后面跟的TW这两个节拍就是总线控制器在等待从设备准备数据经过这样的两个节拍以后从设备准备好数据接下来到T3这个节拍内从设备就可以把自己准备好的数据通过数据总线发送给主设备。然后最后T4这个节拍主设备会撤销读命令还有地址信息这样就完成了总线的传输工作。可以看到之前介绍的同步定时方式每一个总线的传输周期都是定长的但是这种半同步的通信方式结合了异步通信方式的优点增加了一个等待的反馈信号这样的话总线控制器就可以根据反馈信号来动态的调节这个传输周期里面应该包含的时钟周期数。所以这种半同步通信方式也是有一个统一的时钟节拍但是由于可以动态的调整每一个传输周期内包含的时钟节拍数因此它也能够支持速度差异比较大的主设备和从设备之间的数据交互。接下来看最后一种分离通信首先对于刚刚提到的三种通信方式来说都有一些共同点他们都会经过主设备发送地址和命令、从设备准备数据、从设备向主设备发送数据这三个阶段但这三个阶段只有第一个和第三个会使用总线而第二个从设备准备数据的阶段主设备和从设备即使不使用总线也会占据总线所以前面提到的三种总线定时方式可以优化的点就在第二个阶段。当慢速的从设备在准备数据的时候总线在这段时间是没有被使用的然而这段时间内主从设备依然占据总线控制权所以分离式通信的思想就是会把总线的传输周期切分为两个独立的子周期第一个子周期就是主设备申请占用总线并且发出地址命令之类的请求信息当请求信号发出以后主设备会立即放弃总线的控制权把总线让给其它设备使用。从设备接收到请求信号以后就可以开始准备主设备想要的数据等从设备准备好数据之后它又会主动的申请占用总线当从设备获得总线控制权以后再把主设备想要的数据给送到总线上。所以分离式的通信可以充分的利用从设备准备数据的这段时间这段时间把总线的使用权分配给其它设备使用这样可以让总线的数据传输效率变得更高之前说过所谓的主设备指的是可以主动地申请总线控制权的那些设备可以把它称为主设备但是如果采用这种分离式通信显然也需要让从设备也能够主动地申请总线的控制权。另外这种分离式的通信同样也会给一个统一的时钟信号采用同步通信方式主设备在规定的节拍内发出请求信号但是主设备不需要等待从设备的回应规定的节拍内发出请求然后规定的节拍内释放总线的控制权。而且在各个模块准备数据的时候是不需要占用总线的所以这种分离式通信可以让总线的利用率提高它可以充分的挖掘出总线的数据传输能力。接下来对这部分进行总结写在最后该系列笔记是本人在25考研备考408过程中根据王道课程所整理的复习笔记原本放在个人网站方便自己复习所用。现考完以后为了给个人网站减负故将其全部移植到CSDN上。笔记中会存在一些错别字和输入法错误不过考完以后实在不想再去纠错所以欢迎大家在评论区中指出博主看到以后会进行纠正。