购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.6 I/O操作

在处理器体系结构中,I/O的目标是在外围设备和系统内存之间进行有效的数据传送。输入操作将数据从外围设备传送到内存中,而输出操作则将数据从内存发送出去。

I/O接口的外部数据格式差异很大。以下是计算机I/O数据外部表现形式的一些示例:

● 连接到显示器视频电缆上的信号。

● 以太网电缆上的电压波动。

● 磁盘表面上的磁性特征。

● 计算机扬声器产生的声波。

无论数据在计算机外部采用哪种形式,I/O设备与处理器的连接都必须符合处理器的I/O体系结构,并且必须与计算机系统中的其他I/O设备兼容。

处理器使用前面介绍的指令类型、寻址方式和中断处理方法与I/O设备进行交互。不同之处在于,I/O指令读写与I/O设备通信的位置,而不是读写系统内存。

内存映射I/O (memory-mapped I/O)和 端口映射I/O( port-mapped I/O)是现代处理器访问I/O设备最主要的两种方法。内存映射I/O是将系统地址空间的一部分专门用于I/O设备。处理器使用与内存访问相同的指令和寻址方式访问为外围设备预留的地址。6502使用内存映射I/O与外围设备进行通信。

使用端口映射I/O的处理器实现了专门的I/O操作指令。端口映射I/O设备具有独立于系统内存的专用地址空间,同时也为I/O设备分配了 端口号 (port number)作为地址。x86体系结构使用的就是端口映射I/O。

内存映射I/O的一个缺点是需要将系统地址空间的一部分专用于I/O设备,这减少了计算机系统支持的最大内存量。端口映射I/O的一个缺点是要求处理器实现I/O操作的额外指令。

端口映射I/O能够提供额外的硬件信号,用来指示当前访问的是I/O设备,而非系统内存。如果使用该信号作为选择器(实际上是另一个地址位),则可以使用相同的地址线来访问内存和I/O设备。此外,有些高端处理器使用完全独立的总线实现端口映射I/O操作,这种体系结构允许同时进行I/O访问和内存访问。

在最简单的I/O处理中,处理器通过使用指令在内存和I/O设备之间传输数据来完成I/O操作需要的工作。更为复杂的处理器体系结构使用硬件来加速执行重复的I/O操作。现在,我们将按照处理器参与度的不同讨论三种I/O处理方法:程序查询I/O、中断驱动I/O和直接内存访问。

3.6.1 程序查询I/O

在程序查询I/O中,处理器使用程序指令完成I/O数据传输的每一步操作。例如,一个键盘在处理器I/O地址空间中占用两个内存映射的单字节地址。其中一个字节包含状态信息,特别是使用一位表示是否有某个键被按下,另一个字节保存按下键的值。

每次按下一个键时,就置位键的可用状态位。当使用程序查询I/O时,处理器必须定期读取键盘状态寄存器来查看是否按有键被按下。如果状态位表示按下了一个键,则处理器读取键盘数据寄存器,该读取操作会关闭键的可用状态位,直到下一个键被按下。

如果键盘数据寄存器一次只能保存一个键值,那么必须频繁检查键盘状态,确保不会丢失按键动作。因此,处理器必须花费大量的时间来检查按键是否被按下。当输入速度较慢时,大多数检查都是无效的。

通常情况下,程序查询I/O不是一个非常有效的方法。这和每隔几秒钟查看一下你的手机是否有电话呼入很相似。

但是在某些情况下,使用程序查询I/O还是有意义的。例如,在系统启动期间对外围设备进行一次性的配置,就是该技术的一个合理使用示例。

3.6.2 中断驱动I/O

当需要进行操作时,I/O设备可以使用中断的方式通知处理器。就键盘接口而言,外设可以在每次按键时将6502的 设置为低电平来启动中断,而不仅仅对状态寄存器中的相应位置位。这使得处理器可以在不用检查按键的情况下工作。只有中断请求需要处理器进行服务时,处理器才会将注意力集中在键盘接口上。用中断来触发I/O操作,类似于在电话中添加振铃器,而在使用程序查询I/O时,必须每隔几秒钟检查一次来电。

6502只有一个可用于I/O操作的可屏蔽中断输入信号( ),而计算机系统包含多个I/O中断源,这使得6502的处理中断变得有些复杂,其原因是处理器必须首先要确定哪个外设发起了中断,然后才能开始传送数据。

中断处理程序必须轮询每个具有中断功能的设备来定位中断源。对于键盘接口来说,这种轮询操作是指读取键盘状态寄存器确定其是否被置位,从而确定是否发生了按键。一旦处理器识别出相应的中断设备,它就会跳转到相应的代码,与设备进行交互以完成请求的I/O任务。对于键盘接口来说,该处理需要执行以下步骤:读取键盘数据寄存器并清除键的可用状态位,使 输入信号无效。

外部设备产生的中断是异步事件,这意味着它们可以随时发生。计算机系统设计必须仔细考虑中断的各种可能性,例如在系统启动期间或在处理其他中断时发生中断。此外,多个设备的中断请求可能会同时发生或几乎同时发生,并且发生的顺序是随机的。在任何情况下,中断处理硬件电路和中断服务代码必须检测和处理所有中断。

中断驱动I/O消除了处理器定期检查I/O设备的弊端。但是,如果处理中断要传送大量数据时(例如,读取或写入磁盘驱动器),则可能会消耗大量的处理器时间。下面要讨论的I/O方法,在进行大量数据传送的过程中,不需要处理器过多地参与。

3.6.3 直接内存访问

DMA允许外围设备的I/O操作可以独立于处理器去访问系统内存。使用DMA传输数据块时,处理器根据将要传输的数据块的起始地址、块长度和目的地址等信息配置DMA控制器。启动DMA之后,处理器可以继续执行其他工作。操作完成后,DMA控制器会产生一个中断,以通知处理器传输完成。

在计算机系统中,DMA控制器可以是由处理器进行管理的独立集成电路,处理器体系结构中也可以包含一个或多个集成的DMA控制器。

磁盘驱动器、声卡、显卡和网络接口等进行大量数据传送的I/O设备,通常依靠DMA来有效地与系统内存进行数据传送。DMA在对系统内存中的数据块进行传送时也很有用。

6502体系结构不支持DMA操作,但是传统的IBM PC中包含了DMA控制器,几乎每个32位和64位处理器体系结构都支持DMA操作。

DMA是通过加速重复操作来提高计算机系统性能的众多技术之一,后面的章节会进一步讨论DMA。 X8nWI4E1Lwwt20NV2VvfGZTFk1xAa/IC0DwAkJKLj+x1gAP9UWRMHF0EHnWlSktD

点击中间区域
呼出菜单
上一章
目录
下一章
×