第7章 输入/输出

除了处理器和存储模块外,计算机系统中第3个关键元素是Io模块。每个模块与系统总线或中央交换机之间都有接口,并控制一个或多个外围设备。io模块不仅物理上连接设备和系统总线,还包含外围设备与总线之间执行通信功能的逻辑,通信包括控制、状态和数据。

读者可能会好奇:为什么不直接把外围设备连接到系统总线呢?原因如下:

1.外设种类繁多,操作方法也各不相同。

2.外设的数据传输率常常比内存或处理器的慢得多。

3.外设使用的数据格式和字长常常不同于其连接的计算机。

4.因此需要io模块,功能为通过系统总线或中央交换机与处理器和内存连接;通过定制的数据链路连接到一个或多个外围设备。

7.2 io模块

io模块的主要功能和需求分为以下几种:

1.控制和计时;

2.处理器通信;

3.设备通信;

4.数据缓冲;

5.错误检测;

在任何时间段内,处理器可能会以不可预知的模式与一个或多个外部设备通信,这取决于程序对io的需求。因此,io功能包含了控制和定时,以协调内部资源和外部设备之间的流量。

控制数据从外设到处理器就可能有以下步骤:

  1. 处理器查询io模块以检查相连设备的状态;

  1. io模块返回设备状态;

  1. 如果设备可操作且已准备好传输,那么处理器通过向io模块发送命令来请求传输数据;

  1. io模块从外部设备获取一个单元的数据(如8位或16位);

  1. 数据从io模块传输到处理器;

  1. 如果系统使用了总线,那么处理器 io模块之间的每个交互都会涉及一个或多个总线。

处理器通信包括以下内容:

  1. 命令译码:io模块从处理器接收命令,一般是作为控制总线上的信号发送的。

  1. 数据:通过数据总线在处理器与io模块之间交换数据。

  1. 状态报告:由于外设非常慢,因此了解io模块的状态非常重要;

  1. 地址识别:每个io设备也有一个唯一标注自身的地址;

io模块还必须能与设备通信,这个通信包括了命令、状态信息和数据。

io模块的一个基本任务是数据缓冲。来自主存的数据以快速突发的方式被传递给io模块。然后数据在io模块中缓冲,接着再以外设的数据传输率传输至外设。反之,缓冲数据,以免在慢速传输中占用内存。所以,io模块必须能同时以设备和内存速度运行。

最后,io模块通常还负责错误检查以及随后向处理器报告错误。检测传输错误通常使用某种形式的校验码。io模块检查奇偶校验来确定是否有错误发生。

7.3 可编程io

有三种技术可以用于io操作。对于可编程io,数据在处理器和io模块之间交换。当处理器向io模块发出一个命令时,它必须等待io操作完成,该技术缺点是使处理器保持不必要的忙碌。对于中断驱动io,处理器发出io命令,然后继续执行其他指令,当io模块完成其工作后中断处理器,该技术比可编程io更高效,因为它消除了不必要的等待。但是,中断io仍然消耗了大量的处理器时间,因为每个数据字从内存到io模块。这2者都需要处理器负责从主存提取输出数据和向主存输入数据。还有一种称为直接内存访问dma,io模块与主存直接交换数据,不涉及处理器。

7.5 直接内存访问

7.5.1 可编程io和中断io的缺点:

  1. io传输速率受限于处理器测试并服务设备的速度;

  1. 处理器忙于管理io传输,每次io传输都要执行很多指令;

使用简单的可编程io,处理器专注于io任务,可以以相当高的速率移动数据,代价是不做任何其他事情。中断io在一定程度上释放了处理器,代价是io传输速率。

当移动大量数据时,用直接内存访问dma。

7.5.2 dma功能

dma涉及系统总线上的一个附加模块。dma模块能模拟处理器,并确实从处理器接管了对系统的控制,才能通过系统总线与内存传输数据。为此,dma模块必须仅在处理器不需要总线的时候才使用总线,或者它必须迫使处理器暂时挂起。后一种技术更常见,称为周期窃取,因为dma模块实际上窃取了总线周期。当处理器想要读写数据时,它向dma模块发出一条命令,以向dma模块传递以下信息:

  1. 是否有读或写请求,使用处理器与dm模块之间的读或写控制线。

  1. 所涉及的io设备地址,用数据传输。

  1. 内存中用于读写的起始位置,用数据线传送,由dma模块存储在地址寄存器中。

  1. 要读写的字数,也要数据线传送,保存在数据寄存器中。

之后,处理器继续其他的工作,它已经把io操作委托给dma模块。dma模块直接把整个数据块传送给内存,或是从内存传输出去,一次一个字,不需要经过处理器。当传输结束时,dma模块向处理器发送一个中断信号。

整体效果上,dma使得处理器执行的更慢,然而,对于多字传输,dma比中断驱动io或可编程io的效率要高很多。

dma模块若充当代理处理器,用可编程io通过dma模块在内存与io模块之间交换数据,这种结构虽然便宜,但是显然效率很低。与处理器控制的可编程io一样,每传输一个字消耗2个总线周期。

若集成dma和io功能可以大大减少所需总线周期数,这意味着在dma模块和一个或多个不包含系统总线的io模块之间存在路径。dma逻辑上可能时io模块的一部分,也可能是控制一个或多个io模块的独立模块。这个概念可以更进一步,用io模块总线将io模块连接到dma模块,这就把dma模块中的io接口数量减少到一个,并提供了一个易于扩展的结构。此时,dma模块和处理器与内存共享的系统总线仅仅被dma模块用来与内存交换数据。dma与io模块之间的数据交换在系统总线之外进行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值