文章目录
计算机内部数据的公共交通——总线
前言
本文记录于2024年1024程序猿节。
过节很开心,于是就带着开心的心情上巴士上班啦!
提起巴士Bus,不由想起计算机里的Bus。
日常生活中,我们常见的 Bus 是由交通公司运营的巴士,是一个城市的公共交通重要组成部分,方便我们到达各种地方。在计算机内部,Bus是指总线。计算机总线也是计算机内部数据的公共交通通道。总线连接计算机各个功能部件,让数据和指令可以到达各个部件,使得各个部件能接收到指令实现目标操作,实现计算机内部的数据传输与共享。
那就来学学 Bus吧 。
学习目标
- 了解总线的概念
- 了解总线分类
- 了解总线工作流程
- 了解总线仲裁
1. 总线概述
1.1 总线概念
总线是计算机各部件数据和指令传输的纽带和桥梁,现代计算机系统内部数据传输一般都采用总线结构。
物理组成
总线的物理组成是导线和相应的驱动电路。
思考
若不引入总线会发生什么?
就好比一个城市没有公共交通系统,也没有公共交通道路。那么我们各自想到目的地就只能各自修一条路直达,而且这条路只能给自己通行,这样不就乱了嘛。放计算机系统也一样,我们不可能为了让各部件相互连接,而采取直接各自连线的方式实现。
作用
总线是计算机内部数据的公共传输通道,只要像我们遵守公共交通规则一样,让计算机的各部件都遵守统一的总线规范,就可以通过总线传输数据,并可以方便地添加部件,只要都遵守总线规范就行。
1.2 总线分类
位置维度
通过位置的维度,我们可以将总线分为:片内总线、内部总线和外部总线
- 片内总线:Chip Bus, 芯片级总线,是同一部件内部的传输线路。例如CPU的内部总线,连接寄存器、ALU等等。特点是距离短、控制简单、速度快。
- 内部总线:Internal Bus,插板级总线,计算机系统内部的传输线路。如CPU与主存与外设的连接线路。特点相对片内总线,距离长,效率低。
- 外部总线:External Bus,系统级总线,即通信总线,是系统与系统之间的相互连线。主要描述的是多机系统中各子系统的相连。
功能维度
计算机内部 部件通信的信息可分为:数据、地址信息和控制信息。根据传输信息的不同,总线可划分为数据总线、地址总线和控制总线。
- 数据总线:Data Bus。数据总线可以用来传送数据、状态和控制信息,它的位数表明了总线的数据传输能力。必要时可与地址总线实现分时复用,提高总线利用率
- 地址总线:Address Bus。地址总线可以传输地址信息,用来确定存储器或 I/O 端口的地址,它的宽度表明了系统的寻址能力,体现规模
- 控制总线:Control Bus。控制总线可以传递各种控制信号,如时钟信号、中断信号、DMA控制信号、仲裁信号等等。控制信号控制总线上的各种操作。控制总线表明了总线标准的性能。
发展历程维度
- 单总线:早期的一些计算机采用单总线机构,所有模块都连接到单一总线上。这种总线结构简单,成本低。缺点也非常明显,所有模块只用一条总线,势必会有性能瓶颈。单总线现在已很少见了。
- 多总线:各个模块进行相互通信时,公用总线必然会造成总线堵塞,从而降低系统整体吞吐率。类比为我们现实生活中的堵车。因此,科学家与科技工作者们想了一个合理的办法:使用单独的系统总线来实现系统中主要功能模块的信息传递,使用拓展总线来实现一些相对较慢,影响整体运行效率的拓展设备,如I/O等。单纯的系统总线与拓展总线形成了双总线结构。随着技术与应用的发展,对总线之间速度差异的要求越来越高,拓展总线已不能满足系统的需求,这时,在系统总线与拓展总线之间增加一条高速总线,将图形、声音和网络等连接到高速总线上。这就是三总线结构
-
- 双总线:系统总线连接主要模块,CPU、Cache,主存;拓展总线连接I/O等外设。
-
- 三总线:在系统总线、拓展总线之间增加高速总线。
层次结构
从层次结构的角度看总线分类,是对总线位置维度划分的一种细分。微处理器总线对应的是片内总线;局部总线与系统总线对应的是内部总线,外部总线即通信总线。
- 微处理器总线:用于连接微处理器和控制芯片,主要有数据线、地址线、控制线,负载能力较低
- 局部总线:介于微处理器总线和系统总线之间,为了适应高速外设的需求,可以通过桥接电路来扩充局部总线
- 系统总线:插板级总线,系统内各部件之间进行连接和通信的一组信号线
- 外部总线:连接外部设备,通信总线
1.3 总线工作流程
在正式介绍总线的工作流程之前,我们还需要先了解以下概念:
同一时刻,一条总线上只允许两个部件之间进行通信。当有多个部件要求通信时,可以通过仲裁信号来选择通信的部件,或选择分时复用技术实现复用。一段时间内完成某两个部件之间的通信称为一个总线操作周期。在一个总线周期中,可以控制总线并启动数据传送的任何设备成为主控器或主设备,能够响应总线主控器发出的总命令的任何设备称为受控器或从设备。
总线工作流程
总线工作流程可概括为如下步骤:
- (1)总线请求和仲裁过程:
总线主控器接收总线请求信号,通过仲裁过程,决定下一个通信部件 - (2)寻址过程:
通过寻址,获得从部件的位置信息,并让从部件启动接收信息 - (3)传送过程:
主、从部件通过总线传输数据 - (4)结束过程:
主、从部件均让出使用权
特别地,对于单总线结构而言,因为主控器从始至终都拥有总线使用权,因此单总线结构的工作流程只有寻址过程和传送过程
总线冲突
对于共享的总线,若同一时刻有多个模块向总线进行信息的输出,那么就会造成总线上的信息发生混乱,使得系统不能正常工作,这种情况称为总线冲突。
思考:一个大型的系统,若将网络信道看作是外部总线,且用到多种复用技术,那么当出现冲突时,也能看作是总线冲突吗?
可靠传输
我们需要了解以下保证总线内传输的信息可靠的一些概念:
- 握手信息:用于控制信息传送同步的信号称为总线握手信息,包括信息传送开始和结束两个主要的信号。
握手信息使得数据在总线传输时,就可以实现在只有接收方已经做好接收准备时,发送方才开始发送操作,并在接收方确认收到信息后,再结束此操作周期。 - 总线约定/总线协议:用于保证正确识别和可靠的传送,需要对信息的传输速率、格式等作约定,这些约定称为总线协议。
2. 总线仲裁
为了解决总线冲突问题,采用总线仲裁的方式,以期望在同一时间段内,同一总线始终只有1个主控器。
总线仲裁方式分为集中仲裁和分布仲裁两类。
总线仲裁过程中,主要用到三种辅助信号:总线请求、总线可用和总线忙。
总线请求:各个模块为了申请使用权向总线控制器发出的信号。
总线可用:总线控制器在收到总线请求信号后,若此时总线可用,则发出总线可用信号,将总线使用权赋给该申请的模块。其它申请总线的模块只能等待,然后重新发出总线请求信号。
总线忙:总线忙信号用于维护总线可用信号,总线忙信号建立后,总线控制器就不会再相应其它模块的总线请求,表明总线的使用权已被占用。
2.1 集中仲裁
集中仲裁是将总线的控制逻辑集中在一起,交给中央仲裁器集中判定。即需要中央仲裁器作为总线控制器来辅助。
集中仲裁主要有链式查询、定时查询以及独立请求3种方式。
链式查询
信号链式通过各个模块以裁决拥有使用权的模块。此处链式的排序通常与硬件物理位置关联,靠近中央仲裁器的模块拥有更高优先级。
其过程如下:需要申请使用总线且共享同一总线的模块向总线控制器发送总线请求。若此时总线没有被使用,则总线控制器接收到总线请求后发送总线可用信号。总线可用信号依次经过在同一总线的模块,直到物理位置上第一个发出了总线请求的模块。此时,建立总线忙信号,总线使用权分配给这个模块。直到当前使用模块使用完毕,释放总线资源,再开始下一轮循环。
链式查询优点:
- 结构简单
- 扩充性好,只需要在同一总线上增加模块即可
缺点:
- 链路上某个模块故障,如不断发出总线请求或者信号到这个模块时终止,则会导致链路下游的模块无法正常使用总线,系统就会出错
- 根据物理位置链式查询,则靠近总线控制器一侧的模块优先级高,远一侧的模块优先级始终低,资源分配不平均,可能会导致系统性能问题
- 总线分配逻辑效率低
定时查询
通过设置一个计数器,实时查询哪些模块需要使用总线。
定时查询方式又分为统一计数式和局部计数式
统一计数式:
在总线控制器里增加一个计数器,计数器里存放的是总线上各模块的地址。之后的流程和链式查询类似,模块发出总线请求信号,总线控制器开始里的计数器开始计数,当计数值与发出总线请求信号的模块地址一致时,发出总线忙信号。
局部计数式:
局部计数式里每个模块都设置了一个计数器,此时总线控制器给各个模块的计数器提供计数脉冲。当计数器的值与发出总线请求的模块号一样式,改模块就成为了这条总线的主控器,可以使用总线进行信息传输,建立总先忙信号,并阻止总线控制器发送计数脉冲。
集中式定时查询优点:
- 资源分配更合理
- 总线上的模块故障时,只要该故障不会导致长时间建立总线忙信号,则不影响其它模块的工作
缺点:
- 总线控制器的计数器轮询的是总线上模块的地址。总线上的模块数量受编址能力的限制
- 对干扰和时钟失效敏感
独立请求
独立请求是在同一共享总线链路上,每个模块都直接由一条或多条信号线连接到总线控制器。此时,总线控制器用设定好的总线策略,分配总线资源。即分配策略全由总线控制器内部完成。
优点:
- 非常灵活,关注总线控制器的设计即可
- 效率高
缺点:
- 随着模块增多,总线控制器会变得非常复杂
2.2 分布仲裁
分布式总线仲裁将仲裁逻辑分散连接到总线上的各个模块中。
分布式仲裁不需要总线控制器了,而是在每个可能会成为主控器的模块上增加仲裁信号和仲裁器。
链式查询
分布链式查询中,由于没有了总线控制器,也就没有了总线忙信号。总线请求和总线可用信号共用一条信号线路。
当模块发出总线请求信号时,该总线链路上的总线可用信号电平发生变化,该电平开始在所有模块上进行查询,直到第一个发出了总线请求的模块。此时,该模块成为主控设备,可以使用总线,并维持当前总线可用信号。该模块使用完毕后,释放资源,总线可用信号复原,开始下一次循环。
优点:
- 结构简单
- 扩充性好,只需要在同一总线上增加模块即可
缺点:
- 对总线上模块的故障非常敏感
定时查询
分布式定时查询会有一个定时查询代码,在系统启动时就分配一个模块占用总线。当这个模块释放资源时,将一个新的定时查询代码放于定时查询代码线路上,此时,若一个总线请求的地址或优先级命中这个查询代码,则将使用权分给该模块,建立总线相应信号,同时去除定时查询代码以及总线可用信号。直至下一个循环。
优点:
- 资源分配更合理
- 对总线上的模块故障不敏感
缺点:
- 结构相对复杂,控制线路数量要多
独立请求
分布式独立请求相比集中式,则是总线使用交给各个模块的仲裁器自身去判断。这种方式的一种判断依据是请求信号线路上的优先级,若该优先级比模块自身请求优先级低,则占用总线,否则,维持总线请求。
3. 性能指标
总线的性能指标主要由总线宽度、总线时钟频率、总线带宽描述。其中,总线宽度直接决定了计算机最多有多少寻址空间。由于总线是数据传输的纽带,总线的性能也深远影响计算机的整体性能。
总线宽度
总线宽度指的是总线能同时传输数据的位数,用位bit 表示。现在常见的总线宽度有32bit、64bit。
总线时钟频率
总线工作频率。一般情况下,总线时钟频率越高,单位时间内传输数据的量就越大。例如,100MHz。
总线带宽
总线带宽指的是总线上每秒能传输的最大字节量,用MB/s 表示。
其公式如下:
总线带宽 = 总线时钟频率 * 总线宽度 / 8
在这个公式中,我们也可以顺便回顾一下: 8 bit = 1 字节
4. 总线与系统
4.1 地址总线与寻址空间的关系
在计算机中,内存单元的基本存储单位是字节(Byte),每个字节由8个位(bit)组成。字节是计算机中最小的可寻址单位,也是存储和传输数据的基本单元。
因此,一个地址总线的一个编址对应的就是一个内存单元的地址。
一般来说,若地址总线为n位,则可寻址空间为2^n字节。
例如:
16 位 地址总线的 最大寻址空间为: 2^16 B = 2^10 * 2^6 B = 64 KB
32 位 地址总线的 最大寻址空间为: 2^32 B = 2^30 * 2^2 B = 4 GB
4.2 总线宽度与操作系统位数、CPU位数的关系
操作系统位数 = 其所依赖的指令集位数 <= CPU位数
CPU位数:
-
CPU位数通常指的是CPU的寄存器可以处理的数据宽度,也就是CPU一次能处理的数据的位数。例如,32位CPU的寄存器宽度为32位,64位CPU的寄存器宽度为64位。
-
CPU位数决定了CPU可以执行的指令集的复杂度和数据操作的宽度。
例如,32位CPU只能执行32位指令集,而64位CPU可以执行64位指令集,后者通常提供更高效的数据处理能力。
CPU位数决定了数据总线宽度,因为数据总线需要与CPU的寄存器宽度相匹配,以确保数据可以高效地在CPU和其他系统组件之间传输。
5. 总结
本文我们首先学习了总线的相关概念,接着,从不同维度介绍常见的总线分类。之后,我们着重介绍总线仲裁。最后,我们又了解了地址总线位数与最大寻址空间、CPU位数与数据总线的关系。
日常软件开发工作中,一般我们不会直接用到总线相关的知识,因此我们主要了解总线分类,了解总线仲裁的设计思想作为知识拓展,以及了解地址总线位数与寻址空间的关系。主要是对基础的一个复习,对计算机组成的进一步了解,以及对知识的拓展,希望对您有所帮助。
参考资料
- 《计算机组成原理》——陈慧主编
- CSDN-总线与主板优秀参考文章