📜  I/O 接口(中断和 DMA 模式)

📅  最后修改于: 2021-09-28 09:46:27             🧑  作者: Mango

用于在内部存储器和外部 I/O 设备之间传输信息的方法称为 I/O 接口。 CPU 通过连接到任何计算机系统的外围设备使用特殊的通信链接进行连接。这些通信链路用于解决 CPU 和外设之间的差异。 CPU 和外围设备之间存在特殊的硬件组件来监督和同步所有称为接口单元的输入和输出传输。

转移方式:

从外部设备接收到的二进制信息通常存储在存储单元中。从 CPU 传输到外部设备的信息源自内存单元。 CPU 仅处理信息,但源和目标始终是内存单元。 CPU 和 I/O 设备之间的数据传输可以以不同的模式完成。

与外围设备之间的数据传输可以通过三种可能的方式中的任何一种完成

  1. 编程的 I/O。
  2. 中断启动的 I/O。
  3. 直接内存访问(DMA)。

现在让我们一一讨论每种模式。

  1. Programmed I/O:它是由于在计算机程序中编写的 I/O 指令的结果。每个数据项传输都由程序中的一条指令启动。通常传输来自 CPU 寄存器和内存。在这种情况下,它需要 CPU 对外围设备进行持续监控。

    编程 I/O 示例:在这种情况下,I/O 设备无法直接访问内存单元。从 I/O 设备到内存的传输需要 CPU 执行几条指令,包括将数据从设备传输到 CPU 的输入指令和将数据从 CPU 传输到内存的存储指令。在已编程的 I/O 中,CPU 停留在程序循环中,直到 I/O 单元指示它已准备好进行数据传输。这是一个耗时的过程,因为它不必要地使 CPU 保持忙碌。这种情况可以通过使用中断设施来避免。这将在下面讨论。

  2. 中断发起的 I/O:因为在上述情况下,我们看到 CPU 处于不必要的忙碌状态。通过使用中断驱动的数据传输方法可以很好地避免这种情况。通过使用中断设施和特殊命令来通知接口在任何设备有可用数据时发出中断请求信号。与此同时,CPU 可以继续执行任何其他程序。接口同时持续监控设备。每当确定设备已准备好进行数据传输时,它就会向计算机发出中断请求信号。当检测到外部中断信号时,CPU 会暂时停止它已经执行的任务,分支到服务程序来处理 I/O 传输,然后返回到它最初执行的任务。

    注意:编程 I/O 和中断驱动 I/O 的方法都需要主动干预
    处理器在内存和 I/O 模块之间传输数据,任何数据传输都必须横向
    通过处理器的路径。因此,这两种形式的 I/O 都有两个固有的缺点。

    • I/O 传输速率受处理器可以测试和服务于一个的速度的限制
      设备。
    • 处理器负责管理 I/O 传输;必须执行许多指令
      对于每个 I/O 传输。
  3. 直接内存访问:快速存储介质(如磁盘)和内存单元之间的数据传输受 CPU 速度的限制。因此,我们可以允许外设使用内存总线直接相互通信,消除 CPU 的干预。这种类型的数据传输技术称为 DMA 或直接内存访问。在 DMA 期间,CPU 处于空闲状态,无法控制内存总线。 DMA 控制器接管总线以直接管理 I/O 设备和内存单元之间的传输。

    总线请求: DMA 控制器使用它来请求 CPU 放弃对总线的控制。

    总线授权:由 CPU 激活以通知外部 DMA 控制器总线处于高阻状态,请求 DMA 可以控制总线。一旦 DMA 控制了总线,它就会传输数据。这种转移可以通过多种方式进行。

    使用 DMA 控制器的 DMA 传输类型:

    突发传输:
    DMA 在完成数据传输后返回总线。寄存器用作字节计数,
    每个字节传输递减,当字节数达到零时,DMAC 将
    释放总线。当 DMAC 在突发模式下运行时,CPU 在数据传输期间暂停
    转移。
    涉及的步骤是:

    1. 总线授权请求时间。
    2. 以设备的传输速率传输整个数据块,因为设备通常比设备慢
      数据传输到 CPU 的速度。
    3. 将总线的控制权释放回 CPU
      因此,传输 N 个字节所花费的总时间
      = 总线授权请求时间 + (N) * (内存传输率) + 总线释放控制时间。
    Where,
    X µsec =data transfer time or preparation time (words/block)
    Y µsec =memory cycle time or cycle time or transfer time (words/block)
    % CPU idle (Blocked)=(Y/X+Y)*100
    % CPU Busy=(X/X+Y)*100

    循环窃取:
    一种替代方法,其中 DMA 控制器一次传输一个字,之后它必须将总线控制权返回给 CPU。 CPU 仅将其操作延迟一个内存周期,以允许直接内存 I/O 传输“窃取”一个内存周期。
    涉及的步骤是:

    1. 将字节缓冲到缓冲区中
    2. 通知 CPU 设备有 1 个字节要传输(即总线授权请求)
    3. 传输字节(以系统总线速度)
    4. 将总线的控制权释放回 CPU。

      在继续传输下一个字节的数据之前,设备再次执行第 1 步,这样总线就不会被占用,并且
      传输不取决于设备的传输速率。
      因此,对于 1 个字节的数据传输,使用周期窃取模式 (T) 所花费的时间。
      = 总线授权所需时间 + 1 个总线周期传输数据 + 释放总线所需时间,即
      N×T

    在循环窃取模式中,我们始终遵循流水线概念,即当一个字节被传输时,设备并行准备下一个字节。如果询问“CPU 时间与数据传输时间的比例”,则使用循环窃取模式。

    Where,
    X µsec =data transfer time or preparation time
    (words/block)
    Y µsec =memory cycle time or cycle time or transfer
    time (words/block)
    % CPU idle (Blocked) =(Y/X)*100
    % CPU busy=(X/Y)*100 
    

    交错模式:在这种技术中,DMA 控制器在以下情况下接管系统总线
    微处理器没有使用它。另一个半周期,即半周期 DMA + 半周期处理器。注意:在 Gate Exam 中,您可以直接将上述公式应用于不同的 DMA 传输模式。