前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >漫谈计算机组成原理(二)系统总线

漫谈计算机组成原理(二)系统总线

原创
作者头像
roobtyan
发布2018-06-05 21:02:42
2.5K2
发布2018-06-05 21:02:42
举报

在这个系列文章的第一讲,漫谈计算机组成原理(一)之程序运行的过程 中说过,现代计算机是从冯若伊曼计算机发展起来的。其组成部分有存储器、运算器、控制器、输入设备、输出设备,在现代计算机中,人们将运算器与控制器封装起来成为CPU(中央处理单元)。计算机的各种部件想要进行数据交互,就必须让这些部件形成一定的连接关系,以便数据交互的进行。 连接的方式有两种,一种是各个部件之间使用不同的线相互连接,很明显,这种交互方式有很大的弊端,如连线复杂造成的控制复杂,还有就是当部件较多的情况下,简直就是个灾难。所以就催生了另外一种连接方式——总线连接,也就是我们这一讲要讲述的东西。 总线连接是指,将所有就的部件连接在一组公共的信息传输线上,这样做就避免了上面那种传输方式的弊端。现代计算机几乎所有的都是采用总线连接。

概述

从引言中,我们基本上能够了解到总线在计算机系统中的作用。但是上面的说法只是一个概论,我们需要给出更加详细的总线的作用:总线是计算机中各个部件的信息传输线。在计算机中,几乎所有需要信息传输的地方,都是存在总线的。 那么,总线传输的信息具体来讲是什么呢?总的来讲,总线传输的信息可以使数据、地址(详情请看第一讲https://blog.csdn.net/yanmiao0715/article/details/80338802)等,接下来会详细介绍。 另外,从传输方式上来讲,共有两种传输方式。一种是并行的,另外一种串行的方式,两种方式各有利弊。

总线的传输方式

  • 并行方式

这里写图片描述 并行传输方式很简单,就是在同一时间内,传输多位数据,而计算机的位数,就是按照系统总线传输的数据位数划分的,常见的有32位、64位等。 注意,并行方式并不合适远距离数据传输,因为并行传输方式,一旦距离过长,那么各条总线的相互干扰则十分强大,数据丢失、错误也就成了必然。 所以,并行传输用在计算机内部,就非常可靠了。既保证了传输速度,又保证了数据传输的可靠性。

  • 串行方式

这里写图片描述 串行方式很明显不适用于计算机内部的数据传输,一来一条总线传输速度实在是慢,另外会导致计算机的总线分布过于复杂。 不过,与上面的方式正好相反的是,这种方式可以避免远距离传输的数据干扰。

总线的结构框图

在了解了基本的总线传输方式后,我们将从比单根总线更大的方面来介绍总线的具体结构。 所谓的总线结构,就是总线在计算机中的具体分布位置,这个位置的不同,会导致计算机的各个方面的不同,下面就来一一介绍。

  • 面向CPU的双总线结构

这里写图片描述 在这种结构中,包括了M总线(CPU与主存之间的数据传输总线)、I/O总线。优点是多条总总线,并行传输,效率高。缺点也很明显,其一是事件执行过程容易被打断,比如当前IO设备正在占用总线,与CPU或者主存之间在传输数据,而另外一个设备此时却发起了占用请求,IO总线还要停下来处理占用请求;其二是IO设备无法直接与主存进行信息交互,只能通过CPU这个介质,但是这就无端端的占用了CPU,CPU完全可以在被占用的这段时间处理数据,所以,就需要改进。

  • 单总线结构

这里写图片描述 这种结构中,只有一条总线:系统总线。计算机中的所有设备都连接在这条总线上。这种方式的优点基本可以忽略了,缺点太多: 当CPU进行数据处理的时候,非常容易被打断,类似于上面的情况,就导致了CPU的效率过低;如果计算机中有很多的设备,很难想象这条总线要长到什么程度,总线越长,延迟越高;最后,这么多的设备,只有一条系统总线,典型的狼多肉少,这些设备之间一定会打架的。

  • 以存储器为中心的双总线结构

这里写图片描述 最后的这种以存储器为中心的双系统总线结构,也就是在第一讲之中提过的现代计算机的结构。这种结构整合了上面两种方式的结构,做到了扬长避短。虽然和单总线结构挺像,但是,它在CPU和主存之间加入了一条存储总线,这样保证了CPU和主存交互是不占用系统总线,也就避免了CPU的执行被打断,CPU需要的数据既可以从主存中获取,又可以从总线中获取,非常强大;另外,系统总线和存储总线飞凯,提高了效率的同时,还减轻了系统总线的负担。

总线分类

片内总线

所谓的片内总线,就是CPU内部的总线,连接着CPU内部的各个部件。

系统总线

  • 数据总线:数据总线是双向传输的,和机器字长、存储字长有关系
  • 地址总线:地址总线是单向的,包括存储地址、IO地址
  • 控制总线:有入、有出,发出各种控制信号

当然,总线分类的内容还有很多,包括一些常见的术语,这里就不再赘述了,在后面的讲解中遇到什么就会解释什么。

总线性能指标

  • 总线宽度:数据总线的根数
  • 总线带宽:总线的数据传输速率,也就是每秒传输的最大字节数,单位MBp/S
  • 总线复用:一条信号线上分时传送两种信号
  • 信号线数:地址总线、数据总线 、控制总线的数目总和
  • 总线控制方式

总线结构

单总线结构

单总线结构在总线结构框图中其实已经说过了。就是上面那种问题特别多的总线结构。这里就不再赘述。

多总线结构

双总线结构

这里写图片描述

可以看到,这种方式,是将I/O接口接在了与主存总线通信的通道上,那么这个通道是什么呢?这个通道实际上是由计算机操作系统控制的一个特殊的处理器,用来对I/O设备进行管理。

图中所示只有一个通道,实际上是有很多通道的。人为的将不同速度的I/O设备换分为不同的组,进而将这些组分别接在不同的通道上,可以预见,这种结构的总线数据吞吐量是十分高的,就实现了一个相当强大的计算机系统。

而这种结构,通常被用在大型计算机上。

三总线结构

  • 第一种

这里写图片描述

这种结构的总线包括:主存总线、DMA总线(直接存储器访问,顾名思义,使用这条总线的I/O设备可以直接向主存的读写数据)、I/O总线。

其中,DMA总线连接的是告诉I/O设备,最好能够和主存(内存条)的速度在一定程度上匹配。

在这种结构中,任意时刻,只有一条总线被占用。主存总线肯定不能和DMA总线同时被占用,而I/O设备只在CPU调用I/O指令的时候才会被用到。

我觉得你有可能会有这么个疑问:I/O总线会不会和DMA总线同时被占用?肯定是不能的,因为前面说了,I/O总线只有在调用I/O指令的时候才会被占用,在占用的过程中,没有CPU的控制,高速I/O设备怎么可能会和主存交互。

  • 第二种

这里写图片描述

这种结构,是将CPU和Cache(缓存设备)之间加入了局部总线,不仅如此,主存和Cache都连接在系统总线上,去掉了CPU和主存的信息传输,此时与CPU直接进行信息传输的是Cache,我们知道,Cache是一种比主存更快的设备,Cache可以直接通过总线读取主存中的信息,然后交给CPU,这样就速度就会飞起。另外,扩展总线的存在,使得设备扩展变得极为容易。

四总线结构

对比三总线结构,四总线就是将三总线更加细分,将I/O总线分成了高速总线和低速扩展总线。由于四总线结构并不是特别常见,这里就不详细说明了,感兴趣的小伙伴可以自己查阅一下相关的资料。

总线控制(重要内容)

接下来的这个内容,可以说是系统总线这一讲中最为核心的部分。

概述

总线的控制主要是两个方面的内容。 首先,我们可以想象到,当某一个时间点上,有了多个设备同时发出总线的占用请求,那么总线应该去响应哪一个设备的占用请求呢?再者,我们讲了,在信息传输的过程中,不可避免的会出现信息丢失,如何保证数据传输的完整性呢?这就是我们要讨论的第一个问题——总线的判优控制。 其次,虽然总线的判优控制解决了总线应该与哪一个设备交互的问题,但是还是存在这样一个问题的:两个设备,一个主设备(对总线有控制权的设备)和一个从设备(只能响应从总线发来的命令)进行交互的时候,主设备何时占用传输数据?从设备何时发送响应数据?这就是我们要讲的第二个问题,也就是总线的通信控制。它的作用就是解决通信双方的协调配合的问题。

总线的判优控制

具体的讲,总线的判优控制共有两种方式,一种是集中式,将所有的控制逻辑集中在一个部分;另外一种是分布式,也就是将控制逻辑集中在各个部分。而分布式并不常见,这里只介绍集中式的判优控制。

  • 链式查询

这里写图片描述 首先来说明一下这张图片上各个英文名称的意义。BS:总线忙,也就是当前总线正在被使用;BR:总线请求:设备的总线请求信号就是从这条线上发出的;BG:总线同意,当总线同意设备的占用请求时,同意信号将会从这里发出。 链式查询方式,顾名思义,就是将所有设备像链子一样串联起来。 工作流程如下:某一个设备检测到当前总线空闲,则通过BR线向总线发出占用请求,当总线控制部件收到了占用请求后,他只知道收到了占用请求,却不知道是哪个设备发出的占用请求;此时就会通过总线同意BS线查询,直到查找到发送总线占用请求的设备即停止。 可以看到,这种判优控制中,设备的优先级是按照位置确定的,总是离总线最近的那个设备会有限被查找到。也就是说,最后一个设备可能永远无法占用到总线。这就非常坑了,如果无法占用总线,也就代表着无法正常工作,那还要这个设备做什么呢? 还有一点,前面说了,这些设备是串联起来的,通过一根BS线,那么,当BS线某处发生了损坏,则查询将无法进行。

  • 计数器定时查询

这里写图片描述 很明显,第一种链式查询方式在实际使用中肯定是各种问题,这种方式能够大大的改进种种情况。 相比较于链式查询方式,这种方式去掉了BG(总线同意)线,而增加了设备地址线,也就是定时查询计数所指示的那条线。 当总线接收到BR线的请求信号后,在总线未被占用的情况下,总线控制部件中的计时器开始计数,通过设备地址线向设备发送地址,当某设备地址与发送请求的设备地址一致时,设备则获得总线控制权,计数器停止计数。 如果在查找过程中,当前计数地址与发送请求的设备地址没匹配上,则计数器+1,直到找到这个设备为止。 这个计数器的值是可以通过软件来设定的,这样,就能够人为的确定设备的优先级。 【注】这种方式的设备地址线的条数为[log2n]条(n为设备数)。

  • 独立请求方式

这里写图片描述 这种方式就非常有意思思了,简单的讲,就是将总线请求(BR)和总线同意(BG)线给每个设备都分配一下,当然,每个设备都需要连接一下地址线和数据线。 总的过程和上面的方式没有太大区别,主要的区别在于,这里的优先权控制变成了排队器,给每个请求排队,然后再执行。当然,这种方式是很有好处的,最起码执行速度非常的快,但是,一旦设备过多,那又变成了灾难。

总线的通信控制

由于总线的通信控制主要解决的就是:通信双方的协调配合问题,那么在不同时间段,就会出现不同的状态。所以我们这里引入一个总线生命周期的概念。

总线的生命周期

总线生命周期,是指主从设备完成一次完整的信息通讯的过程。这个过程包括三个阶段:

  • 申请分配阶段 就是主设备申请总线控制权的过程
  • 寻址阶段 也就是总线控制器寻找到底是哪个设备发起的控制请求的过程。
  • 数据传输阶段
  • 结束阶段

而我们接下来要讨论的内容就是数据传输阶段的通信过程。

通信方式

  • 同步通信:由统一时标控制通信的数据传输

这里写图片描述这张图片表示的是某个设备向CPU传输数据的过程。 整个的传输过程如下:

  • 在T1时间的上升沿(上升沿这个词其实不难理解,就是时钟向上走的部分,对应下降沿就是时钟线向下走的过程),主设备(CPU)给出读数据的目的地址
  • 在T2上升沿,主设备(CPU)给出读命令
  • 在T3上升沿,从设备给出数据信息,执行读数据操作
  • T3下降沿,读命令、数据信号撤销
  • T4,地址线撤销

这种方式,比较中规中矩,就是说在每一个时间段,执行固定的操作,模块间的配合较为简单。缺点也很明显,就是中规中矩的缺点,不够灵活,设备必须在规定的时间内执行完成相应的操作。 在这中方式中,主从模块的操作按照统一的时标操作。主从设备的速度如果相差较大,那么速度快的设备必须等待速度慢的设备执行。 【适用范围】适用于总线长度较短、各部件存取时间比较一致的场合。

  • 异步通信

这里写图片描述异步通信就比较灵活了,没有统一的时标,只需要主设备发出请求,从设备发出响应即可。异步通信分成了三种方式:

  • 不互锁 想象这样的一个场景,一个人向另外一个人打招呼,打完招呼就去忙自己的事情了,不管那个人是否听到了自己的问候,都去做自己的事情。类比这种情况:主设备发出请求,发完请求后就去执行其他的操作了,不管从设备是否收到了回答。理想的状况下肯定是需要从设备回答的,这就衍生了另外一种方式。
  • 半互锁 再想象一个场景,A向B打招呼,如果B和A没有仇的话,B肯定是会回复A的,如果A发现B没有搭理他,那么他一般会再和B打招呼,如果B依然不回应,那么这个过程就会持续下去。 到这里也是一样的,当主设备向从设备发出信号时,如果从设备接收到这个信号,那么就会向主设备发送响应信息。如果主设备一直没有接收到这个信号,就会一直向从设备发送信息。
  • 全互锁 全互锁,就是半互锁的升级版本。在半互锁中,如果主设备没有收到从设备发出的响应信号,除了是从设备没有接收到主设备的信号外,还有可能是因为从设备发送的信号主设备没有收到,如果是这种情况,主设备也会一直请求下去。 在全互锁的情况中,如果主设备发出信号后,从设备也收到了信号,则会向主设备发送响应信号;如果主设备接收到了信号,那么就会再从设备发送一个表示接收到了的信号,此时从设备就可以撤销响应信号了。如果没有收到,则从设备就会保持这个响应信号。 总结一句话就是,主设备一直请求,从设备一直应答。

  • 半同步通信(同步、异步结合)

这里写图片描述 为什么说半同步通信是同步通信和异步通信相互结合的方式呢?因为半同步通信保留了同步通信的时钟周期,又继承了异步通信的能够使得不同速度的设备协调工作的优点,可以说是十分的强大。 从图中可以看到,半同步通信不同于同步通信的一个重要的特点就是:增加了两个Tw周期,还增加了WAIT信号。下面我们就来说一下它的具体情况。 首先,和同步通信相同,都是在T1给出地址信号,T2给出读命令,读命令给出后,紧接着的并不一定是数据信号。如果从设备的速度很慢,不能在T3时间给出数据,则会通知主设备,我现在还没有准备好。随后主设备就会给出WAIT信号,插入等待周期,当从设备说我已经准备好了的时候,主设备就会撤销掉等待信号,开始读数据。后面的情况就和同步通信一致了。

  • 分离式通信:充分发挥系统总线每瞬间的潜力 这种通信方式比较复杂,我们很难在一般的计算机上见到,这里就不多说了,只需要知道它的这个特性就可以了。感兴趣的可以看看这篇博文:https://blog.csdn.net/ce123_zhouwei/article/details/6936047,不过我发现这个作者好像是直接摘抄的唐朔飞教授的《计算机组成原理》这本书。无奈╮(╯▽╰)╭,大家看看就行了。

结语

感谢您的阅读,欢迎指正博客中存在的问题,也可以跟我联系,一起进步,一起交流!

邮箱:roobtyan@outlook.com 个人博客:http://roobtyan.cn

微信公众号:最高权限比特流

扫一扫关注我,不亏!
扫一扫关注我,不亏!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
    • 总线的传输方式
      • 总线的结构框图
      • 总线分类
        • 片内总线
          • 系统总线
          • 总线性能指标
          • 总线结构
            • 单总线结构
              • 多总线结构
                • 双总线结构
                • 三总线结构
                • 四总线结构
            • 总线控制(重要内容)
              • 概述
                • 总线的判优控制
                  • 总线的通信控制
                    • 总线的生命周期
                    • 通信方式
                • 结语
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档