文章来源 cxuan 的本身公众号:计算机组成原理之总线设计程序员
公众号不少硬核文章,跪求你们关注~~~ 编程
下面开始正题。安全
咱们知道,计算机是由五大部件组成的:运算器、存储器、控制器、输入设备和输出设备,这个概念比较抽象,简单一点来讲就是 CPU 包含运算器和控制器,存储器也就指的是内存,而输入输出设备分别指的是键盘和显示器。计算机这几个部件之间是须要共同协做完成信息处理的,那么,这几大部件之间如何进行通讯呢?靠的是系统总线,这也是咱们这篇文章讨论的重点。微信
总线
是将两个计算机或者多个功能单元链接在一块儿并容许它们相互交换数据的一种通路。总线还能够将计算机和外部设备链接在一块儿。总线是计算机系统很是重要的组成部分。关于须要知道下面这几个概念。编程语言
下面咱们主要介绍两种总线,一种是片内总线,一种是系统总线,片内总线通常指的是 CPU 芯片内部、寄存器和寄存器之间、寄存器和算术单元 ALU 之间的链接。spa
而系统总线主要是指 CPU 和内存、内存和 IO 设备、CPU 和 IO 设备等各大部件的信息传输介质。系统总线按照传输信息的不一样主要分为下面三类。线程
下面咱们就来具体了解一下这三类总线设计
地址总线主要用于传输源数据或者目的数据在主存单元中的地址。3d
CPU 经过地址总线
来指定存储单元的位置的,地址总线上能传送多少信息,CPU 就能够对多少个存储单元进行寻址。code
上图中 CPU 和内存中间信息交换经过了 10 条地址总线,每一条线可以传递的数据都是 0 或 1 ,因此上图一次 CPU 和内存传递的数据是 2 的十次方。
因此,若是 CPU 有 N 条地址总线,那么能够说这个地址总线的宽度是 N 。这样 CPU 能够寻找 2 的 N 次方个内存单元。
数据线顾名思义就是一次传递数据的位数,数据总线的位数就是数据总线宽度。
CPU 与内存或其余部件之间的数据传送是由数据总线
来完成的。数据总线的宽度决定了 CPU 和外界的数据传输速度。8 根数据总线能够一次传送一个 8 位二进制数据(即一个字节)。16 根数据总线一次能够传输两个字节,32 根数据总线能够一次传输四个字节。。。。。。
控制总线是在总线上发出控制信号的传输线,常见的控制信号有:时钟(同步操做)、复位(初始化操做)、中断请求/响应、存储器读写、IO读写等。
CPU 与其余部件之间的控制是经过 控制总线
来完成的。有多少根控制总线,就意味着 CPU 提供了对外部器件的多少种控制。因此,控制总线的宽度决定了 CPU 对外部部件的控制能力。
在互联网的早期阶段,大多数总线采用的是分散链接
(还有一种是总线链接,后面说),这种链接方式以下图所示
从图上能够看到,运算器是这种分散链接的核心部分,这种链接方式会出现问题,当你的 CPU 正在忙于计算时,发生了 IO 与存储器的信息交换,此时你的运算器也就是 CPU 不得不停下来,这就致使了运算器运行的中断,严重影响了 CPU 的工做效率。
你想,当你正在写文章的时候,你对象问你:你今天怎么不理我?因此你就得放下工做和她聊天;当你处理好她的情绪后继续写了 5 分钟文章,这时你的读者发表了长篇大论向你咨询问题,这时候你总不能不回复吧,因此你此时又要放下写文章,继而帮助他解决问题,因而可知,你写文章的效率会高吗?CPU 也是同样的道理。
固然你也能够选择进入专一模式不回复,这就要视事情的优先级而定了,CPU 也是同样的。
后来,为了改善这种状况,出现了以存储器
为中心的结构,这种结构以下所示
能够看到,这种链接方式以存储器为核心,图中主要涉及的部件功能以下
因为运算器和控制器在电路结构上的关系很是紧密,因此一般将运算器和控制器统称为 CPU
,把输入/输出设备统称为 IO设备
,存储器就是内存
。
因此现代计算机的构成通常就是 CPU + 存储器 + 输入/输出设备。
使用这种链接方式后,使 IO 与主存之间的信息交换能够不通过运算器,而且随着中断、DMA 技术的发展和成熟,使 CPU 效率获得很大的提升。
可是使用这种方式,仍然不能解决 IO 设备和主机之间链接的灵活性,由于当咱们想增长一种 IO 设备时,这种链接方式却没法处理,由此出现了总线的链接方式。
总线采用的是多种 IO 部件共享的链接方式,总线其实是由许多传输线组成,每条线可一位一位的传输二进制数据,好比 16 条传输线能够同时传输 16 位二进制代码。
下面是一种以 CPU 为中心的双总线
结构
上图的这种链接方式就是一种总线的链接方式,它将各部件链接到一组公共传输线上。从图中能够体会出双总线
的概念:其中一组总线链接 CPU 和内存,称为存储总线;另外一组用来创建 CPU 和各 I/O 设备之间交换信息的通道,称为 IO 总线。
这种链接方式也会出现问题,当多个部件与总线相连时,若是两个及以上的部件同时发送消息,那么势必会产生信号冲突,致使传输无效。因此,在同一时刻只容许有一个部件发送消息,可是能够有多个部件接收消息。
若是将 CPU 、主存和 IO 设备经过 IO 接口都挂到一组总线上,就造成了单总线的链接方式。
这里思考一个问题,你以为单总线的链接方式和以 CPU 为主的双总线的链接方式相比,最大的区别在哪里?
以 CPU 为主的双总线链接方式中,CPU 和 IO 总线的交互须要 CPU 参与,CPU 和内存的交互也须要 CPU 参与,因此 CPU 无时无刻都在作功,这也得亏是 CPU ,换个其余人得累死。
单总线链接链接方式,由于 CPU 、内存和 IO 都挂在同一个总线上,因此内存和 IO 交互不须要 CPU 的参与,这就是最大的改变。这种链接方式一样也会出现问题,由于只有一组总线,当各个部件都须要交换信息时,就会发生冲突,因此,在这种设计中,须要设定总线占用优先级,让各个组件按照优先级顺序来依次占用总线。这也是为何编程语言中使用锁做为线程安全性的真正缘由。
还有一个问题是 CPU 没有和内存直接交互,大大影响工做效率。
还有一种链接方式是以存储器为中心的双总线结构,它的设计以下
这种总线设计结构就很舒服了。它是在上面单总线结构的基础上,在 CPU 和内存之间增长了一条存储总线,在 IO 使用系统总线频率比较高的时候,CPU 和内存能够经过存储总线交互,这样既大大加快了系统工做效率,又下降了总线开销。还保留了内存和 IO 交互时不须要通过 CPU 的特色。
我本身肝了六本 PDF,全网传播超过10w+ ,微信搜索「程序员cxuan」关注公众号后,在后台回复 cxuan ,领取所有 PDF,这些 PDF 以下