引言
在之前的章节中,我们详细讲解了计算机系统中一些核心组成部分,如中央处理器(CPU)、内存、硬盘等。这些组件负责处理和存储数据,使得计算机能够有效地运行。然而,除了这些核心组件,计算机系统还包含许多其他重要的部分,其中之一就是输入输出设备。它们使得计算机能够与用户进行有效的沟通和交流,提升了计算机的实用性和用户体验。因此,在学习计算机系统的过程中,深入了解输入输出设备的原理和工作方式也非常重要。
输入输出设备
I/O接口,又被称为I/O控制器或设备控制器,是一种负责协调主机与外部设备之间数据传输的关键组件。其主要功能是管理数据的输入和输出,在数据传输过程中起到桥梁的作用。通过有效地控制和调度数据流,I/O接口能够实现高效的数据传输,提升系统的整体性能。
I/O控制器涵盖了多种多样的类型和标准。其中,针对不同外部设备的控制需求,相应的I/O接口也会制定相应的标准。举例来说,我们有用于控制USB设备的I/O接口,它提供了可靠的数据传输和连接性能,使得计算机可以方便地与各类USB设备进行通信。另外,还有用于控制SATA 3.0硬盘的I/O接口,它支持高速数据传输,并具备热插拔和高可靠性的特点。
如今,随着技术的不断进步和集成电路的发展,现代的I/O接口(芯片)也趋向于被集成到南桥芯片内部。
CPU如何控制I/O设备
程序直接控制和中断控制方式
- 首先,我们来讨论数据寄存器(Data Register)。当CPU需要将数据写入I/O设备时,例如打印内容为“GeekTime”,首先要将字符“G”发送给对应的I/O设备。
- 接下来是命令寄存器(Command Register)。CPU向打印机发送一个命令,告诉它开始打印工作。此时,打印机的控制电路将执行两个动作。首先,它会设置状态寄存器中的状态为not-ready,表示打印机正在工作中。然后,它会实际操作打印机进行打印。
- 而状态寄存器(Status Register)的作用是向CPU报告设备状态。当设备开始工作时,状态寄存器会告知CPU设备正在工作中。在这个阶段,CPU发送的任何数据或命令都是无效的。只有当前面的动作完成,状态寄存器重新变为ready状态时,CPU才能发送下一个字符或命令。
现在,让我们讨论快速的I/O设备(如磁盘),如果每准备好一个字就向CPU发送一次中断请求,会导致什么问题呢?
这种情况下,CPU需要花费大量的时间来处理中断服务程序,从而导致CPU利用率严重下降。每次中断请求都会打断CPU正在执行的任务,使其无法充分利用时间进行其他计算工作。这种频繁的中断请求会导致CPU的效率下降,影响系统的整体性能。
为了解决这个问题,可以采取一些优化措施。例如,可以引入缓冲区,将多个字节的数据一次性传输给CPU,减少中断请求的次数。另外,也可以使用DMA(直接内存访问)技术,将数据直接传输到内存,减轻CPU的负担。通过这些优化措施,可以提高CPU的利用率,提升系统的整体性能。
DMA存取方式
DMA控制方式是一种优化技术,它通过在主存和设备之间建立一条直接数据通路(DMA总线)来实现高速数据传输。在这种方式下,CPU只需向DMA接口发送读/写命令,并指示主存地址、设备地址以及读写数据的数量等参数,然后DMA控制器便会自动控制设备与主存之间的数据读写操作。
具体而言,当CPU发出读/写命令后,DMA控制器会通过DMA总线直接访问设备,并将数据传输到主存或从主存传输到设备。为了保证数据的完整性,在每传输一整块数据(如1KB)后,DMA控制器才会向CPU发出一次中断请求,通知CPU数据传输已完成。这样,CPU就能够及时处理其他任务,而不需要等待每个数据传输的完成。
通道控制方式
有的商用中型机、大型机可能会接上超多的I/0设备。如果都让CPU来直接管理这些设备的数据传输和操作,那么CPU的负担将会非常沉重,无法充分发挥其处理计算任务的能力。为了解决这个问题,引入了通道的概念。
通道是具有特殊功能的处理器,可以将CPU与I/0设备之间的通信过程进行统一管理。通道有自己的数据寄存器、命令寄存器和状态寄存器,可以完成与I/0设备之间的数据传输、设备控制和错误处理等任务。CPU只需要发送指令给通道,然后通道会自动完成与设备之间的数据传输和操作,不再需要CPU的直接参与。
通道可以被理解为是一种功能较为有限的处理器,类似于“弱鸡版的CPU”,它能够识别并执行一系列通道指令,通常这些指令的种类和功能比较单一。
信号和地址
一旦我们理解了实际的I/O设备和接口之间的关系,就会面临一个新的问题:CPU到底需要向总线发送怎样的命令,才能与I/O接口上的设备进行通信呢?
在计算机系统中,CPU和I/O设备之间的通信是通过CPU支持的特定机器指令来实现的。这些机器指令被称为I/O指令,用于控制和操作I/O设备。CPU可以使用这些指令来发送命令、读取数据、写入数据以及查询设备状态等操作。
为了简化已经足够复杂的CPU,计算机系统将I/O设备的各个寄存器和I/O设备内部的内存地址都映射到主内存地址空间中。主内存的地址空间中会为不同的I/O设备预留一段一段的内存地址。当CPU想要与这些I/O设备进行通信时,它会向这些预留的地址发送数据。
而我们的I/O设备会监控地址线,并在CPU向其发送数据时,将传输过来的数据接入到对应设备的寄存器和内存中。无论是向I/O设备发送命令、查询设备状态还是传输数据,CPU都可以通过这种方式进行。这种方式被称为内存映射I/O(Memory-Mapped I/O,简称MMIO)。
CPU 和 I/O 设备之间的通信
在计算机系统中,CPU和I/O设备之间的通信是通过以下方式来解决的。
首先,在I/O设备一侧,我们将I/O设备分成可以与CPU通信的接口电路和实际的I/O设备本身。接口电路包含状态寄存器、命令寄存器、数据寄存器、数据缓冲区和设备内存等组件。接口电路通过总线与CPU通信,接收来自CPU的指令和数据。接口电路中的控制电路会解码接收到的指令,并实际操作相应的硬件设备。
而在CPU一侧,CPU通过访问内存地址或端口地址进行数据的传输和读取。对于CPU来说,它并不直接与特定设备进行交互,而是通过读写特定的内存地址或端口地址来实现与I/O设备的通信。在软件层面,通过定义传输命令和数据的方式,而不是引入新的指令,来实际操作对应的I/O硬件。这样,CPU可以通过与接口电路的通信来与I/O设备进行交互,完成输入和输出的功能。
总结
本文主要介绍了计算机系统中输入输出设备的原理和工作方式。输入输出设备是计算机系统中的重要组成部分,它们使得计算机能够与用户进行有效的沟通和交流。文章介绍了I/O接口的功能和作用,以及不同类型的I/O接口的标准。同时,还介绍了CPU如何控制I/O设备的程序直接控制和中断控制方式,以及使用DMA和通道控制方式进行优化的方法。最后,文章解释了CPU和I/O设备之间的通信方式。通过深入了解输入输出设备的原理和工作方式,可以更好地理解计算机系统的工作原理,提升系统的整体性能。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!