总线设计
以存储器为主的连接方式
后来,为了改善这种情况,出现了以存储器
为中心的结构,这种结构如下所示
可以看到,这种连接方式以存储器为核心,图中主要涉及的部件功能如下
- 输入设备将常用的信息转换为机器能够识别的数据形式,常见的有键盘和鼠标等
- 存储器用于存放指令和数据
- 运算器用来完成算数和逻辑运算,并将运算结果暂存在运算器内
- 控制器用来完成指挥、控制程序和数据的输入、运行和处理运算结果
- 输出设备的转换过程就是输入设备的逆过程,即将运算结果转换为人们可以熟知的形式
由于运算器和控制器在电路结构上的关系非常紧密,所以通常将运算器和控制器统称为 CPU
,把输入/输出设备统称为 IO设备
,存储器就是内存
。
所以现代计算机的构成一般就是 CPU + 存储器 + 输入/输出设备。
使用这种连接方式后,使 IO 与主存之间的信息交换可以不经过运算器,并且随着中断、DMA 技术的发展和成熟,使 CPU 效率得到很大的提高。
但是使用这种方式,仍然不能解决 IO 设备和主机之间连接的灵活性,因为当我们想增加一种 IO 设备时,这种连接方式却无法处理,由此出现了总线的连接方式。
以 CPU 为主的双总线连接方式
总线采用的是多种 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 合并一下,不知道计算机组成相关的大家感兴趣么,如果感兴趣,可以帮我点个赞哟~