Chapter 3 Basic Input/Output(5)

中文内容 英文内容
与CPU的通信方法 Communication Methods with CPU
程序控制I/O(轮询) Program controlled I/O (Polling)
中断驱动I/O Interrupt driven I/O
直接内存访问(DMA) Direct Memory Access (DMA)

直接内存访问

  • 中断驱动I/O和程序控制I/O的不足
    • 传输速率受限:中断驱动I/O以及程序控制I/O都需要CPU积极介入,这就导致传输速率会受到限制。
    • 占用CPU资源:CPU会被束缚在管理I/O传输的事务上,无法去处理其他工作。
  • 直接内存访问(DMA)解决方案
    • 适用场景:用于外部设备和主存之间直接进行高速的块传输。例如在需要快速大量传输数据的情况下,DMA就能发挥作用。
    • 核心部件:配备一个DMA控制器,它可以从CPU那里接管系统的控制权,使得数据传输过程能够独立于CPU运行。
    • 对CPU的影响:在数据传输期间,CPU并不参与其中,这样CPU就可以解放出来去执行其他任务,提高了整个系统的运行效率。
  1. 初始化阶段
    • 首先,CPU对DMA控制器进行初始化。这包括设置要传输的数据的源地址(通常是外部设备的缓冲区地址)、目的地址(主存中的存储位置)、传输数据的长度(字节数或字长等)以及传输的方向(是从外部设备到主存,还是从主存到外部设备)等参数。
    • 例如,假设要从硬盘读取一个大型文件到内存中,CPU会告诉DMA控制器硬盘上数据的起始位置(源地址),内存中用来存储这些数据的起始位置(目的地址),以及文件的大小(数据长度)。
  2. 请求阶段
    • 当外部设备准备好进行数据传输时,它会向DMA控制器发送一个DMA请求信号(DREQ)。这个信号类似于外部设备在告诉DMA控制器“我已经准备好数据,可以开始传输啦”。
    • 以磁盘驱动器为例,当磁盘寻道和旋转操作完成,数据已经可以读取时,磁盘控制器就会发出DREQ信号。
  3. 仲裁阶段
    • DMA控制器收到多个设备的DREQ信号时,可能需要进行仲裁。它会根据预先设定的优先级规则来确定先处理哪个设备的请求。这就像交通指挥员,要决定哪辆车(设备)先通过路口(进行数据传输)。
    • 比如,在一个系统中有磁盘和网卡同时发出DREQ信号,而磁盘的DMA请求被设置为更高优先级,那么DMA控制器会先处理磁盘的数据传输请求。
  4. 接管总线阶段
    • 一旦确定要处理某个设备的请求,DMA控制器会向CPU发送一个总线请求信号(HOLD),请求接管系统总线的控制权。CPU在完成当前总线周期后,会发出总线应答信号(HLDA),将总线控制权交给DMA控制器。
    • 此时,就好像CPU把数据传输的“指挥棒”交给了DMA控制器,让它来主导接下来的数据传输工作。
  5. 数据传输阶段
    • DMA控制器开始控制数据在外部设备和主存之间的传输。它会按照初始化阶段设置的参数,通过系统总线将数据从源地址逐块地传输到目的地址。在这个过程中,不需要CPU的干预,数据可以以很高的速度进行传输。
    • 例如,在从外部设备向内存传输数据时,DMA控制器会通过系统总线读取外部设备中的数据,并将其写入内存的指定位置,这个过程是自动进行的,而且传输速度通常比中断驱动I/O和程序控制I/O要快得多。
  6. 传输完成阶段
    • 当数据传输完成后,DMA控制器会释放系统总线的控制权,将控制权交还给CPU。同时,它还会向CPU发送一个中断信号(通常称为DMA中断),通知CPU数据传输已经完成。
    • CPU收到这个中断信号后,就知道数据传输已经结束,可以进行后续的处理,比如对传输到内存中的数据进行进一步的运算或者存储操作。

DMA操作

(1)

  • DMA中的程序控制I/O
    • CPU通过向DMA控制器(DMAC)传输信息来“准备”DMA操作。
    • 设备上数据的位置:明确数据在外部设备中的具体存放位置。
    • 内存中数据的位置:确定数据要传输到内存中的具体存储位置。
    • 要传输的数据块大小:设定此次需要传输的数据量大小,例如以字节数等为单位来衡量。
    • 传输方向:指明是从外部设备传输到内存,还是从内存传输到外部设备。
    • 传输模式(突发模式、周期窃取模式):确定采用哪种具体的数据传输模式进行数据传输。
image-20241205191035525

(2)

  • DMAC控制数据传输
    • 当设备准备好进行数据传输时,DMAC会接管系统总线的控制权(由DMAC负责处理传输事宜),而CPU则可以继续执行其他工作。
image-20241205191154565

(3)

  • DMA中的I/O中断
    • DMAC在完成数据传输后会发送中断信号。
image-20241205191235749

DMA控制器

(1)

  • 带有DMA控制器的计算机系统: 介绍了相关的信号标识,如BR表示总线请求,BG表示总线应答(准许)。
image-20241205191354331

(2)

  • DMA控制器的功能
    • 接管内存与I/O设备间的数据传输控制:在数据传输过程中,替代CPU来主导内存和外部I/O设备之间的数据交互工作。
    • 对于传输的字(数据单元)而言,DMA控制器会进行以下操作
      • 提供内存地址:确定数据在内存中读写的具体位置,确保数据准确地在内存和设备之间传输。
      • 提供控制数据传输的所有总线信号:通过发出相应的总线信号来保障数据传输能按要求顺利进行,比如控制数据传输的开始、停止以及传输方向等。
      • 对连续传输的字递增内存地址:每传输完一个字的数据后,会自动将内存地址按照一定规则增加,以便后续数据能正确地存储到内存的下一个合适位置或者从内存的下一个位置读取,确保数据传输的连续性。
      • 记录传输的次数:跟踪已完成的数据传输次数,方便知晓整个传输任务的进展情况以及判断是否完成全部的数据传输工作。

(3)

  • DMA接口中的寄存器

    • 起始地址寄存器:存放着数据传输的起始内存地址,用于确定最开始从哪里读取数据或者向哪里写入数据。

    • 字计数寄存器:记录需要传输的数据字(数据单元)的数量,随着传输的进行,依据传输情况相应变化,当计数归零时意味着数据传输任务完成。

    • 完成(Done)寄存器:用于标识数据传输是否已经结束,系统可以通过查看该寄存器的状态来确认传输情况。

    • 中断使能(IE)寄存器:可以用来设置是否允许在特定情况下(比如传输完成等)产生中断信号,控制中断功能的开启或关闭。

    • 中断请求(IRQ)寄存器:当满足一定中断触发条件(比如传输完成且中断使能开启时),会在该寄存器体现相应的中断请求状态,便于系统知晓并处理。

    • 状态和控制寄存器:综合反映DMA控制器当前的工作状态,同时也能用于对DMA控制器进行一些控制操作,比如设置传输模式等。

    • 读(R)/写(W):用于指示数据传输的读写方向,是从设备读入数据到内存(读操作),还是从内存写出数据到设备(写操作),通过对这两个信号的设置来明确具体的数据流向。

      image-20241205191541549

DMA传输模式

(1)

  • 突发模式(块模式)
    • 工作原理:一旦处理器准许DMA控制器访问系统总线,它就会将数据块中的所有字节数据传输完,之后才会把系统总线的控制权交还给处理器。
    • 应用场景:对于将程序或者数据文件加载到内存中这种情况很有用。
    • 缺点
      • 会使处理器在相对较长的时间内处于不工作状态。
      • CPU效率较低。
image-20241205191714134

(2)

  • 周期窃取模式
    • 工作原理:DMA控制器一旦获得系统总线的访问权限,就传输一个字节的数据,然后将系统总线的控制权交还给处理器。
    • 工作过程:它会持续发出请求,每次请求传输一个字节的数据,直到将整个数据块传输完毕。
image-20241205191745457

(3)

  • 透明模式
    • 工作原理:DMA控制器只在CPU执行不使用系统总线的操作时才进行数据传输。
    • 注意点:DMA控制器不需要请求系统总线的控制权。
    • 优点:处理器从不停下它的程序执行。
    • 缺点:用于确定处理器何时不使用系统总线的硬件可能会非常复杂,并且相对昂贵。

DMA配置

(1)

  • 单总线、独立DMA控制器
    • 总线使用情况:每次数据传输需要使用两次总线,先是从I/O设备传输到DMA控制器,然后再从DMA控制器传输到内存。
    • 对CPU的影响:CPU会被暂停两次,也就是在上述两个传输阶段都会暂停,等待相应传输完成。
image-20241205191933113

(2)

  • 单总线、集成DMA控制器
    • 控制器特点:该控制器可能支持多个设备进行数据传输操作。
    • 总线使用情况:每次传输只使用一次总线,是直接从DMA控制器传输到内存。
    • 对CPU的影响:CPU仅会被暂停一次,即当数据从DMA控制器往内存传输时暂停。
image-20241205192028896

(3)

  • 独立I/O总线
    • 总线功能:这条总线能够支持所有启用了DMA功能的设备进行数据传输操作。
    • 总线使用情况:每次传输只使用一次总线,同样是进行从DMA控制器到内存的传输。
    • 对CPU的影响:CPU也只会被暂停一次,发生在数据从DMA控制器传输到内存的过程中。
image-20241205192216795

Quiz (1)

问题

Which method bypasses the CPU for certain types of data transfer?

A. Software interrupts B. Polled I/O C. Interrupt - driven I/O D. Direct Memory Access (DMA)

答案:D. Direct Memory Access (DMA)

解释

  • A. Software interrupts(软件中断):软件中断是一种由软件指令触发的中断机制。当软件中断发生时,CPU会暂停当前执行的程序,转而执行中断服务程序。在这个过程中,CPU仍然深度参与数据的处理和传输控制。例如,当一个程序需要处理一些异步事件(如用户输入或系统错误)时,通过软件中断来通知CPU,CPU需要花费时间去确定中断源并处理相关事务,并没有绕过CPU进行数据传输。
  • B. Polled I/O(轮询I/O):在轮询I/O方式中,CPU会不断地询问I/O设备是否需要进行数据传输或者是否有数据准备好。这意味着CPU需要频繁地检查设备状态,数据传输完全是在CPU的控制下进行的。比如,CPU可能会每隔一段时间读取设备的状态寄存器来查看是否有新的数据到来,这种方式下CPU高度介入数据传输过程,没有绕过CPU。
  • C. Interrupt - driven I/O(中断驱动I/O):当I/O设备准备好数据或者完成一个操作时,会向CPU发送中断请求。CPU收到中断请求后,会暂停当前任务,去处理与该设备相关的I/O操作。虽然相比于轮询I/O,中断驱动I/O在一定程度上提高了CPU的利用率,但CPU仍然需要参与每一次中断的处理,包括保存当前程序状态、确定中断源、执行中断服务程序来完成数据传输等,没有绕过CPU进行数据传输。
  • D. Direct Memory Access (DMA):DMA的主要目的就是让外部设备和主存之间能够直接进行数据传输,而无需CPU的过多参与。在DMA操作过程中,CPU只需要在开始时对DMA控制器进行初始化(设置数据的源地址、目的地址、传输长度等参数),之后的数据传输过程由DMA控制器接管系统总线来完成。例如,在硬盘和内存之间进行大量数据传输时,DMA控制器可以独立地将硬盘中的数据块直接传输到内存中,CPU在这个过程中可以去执行其他任务,真正实现了在某些类型的数据传输过程中绕过CPU。

问题

_____ is used for high - speed block transfers directly between an external device and the main memory.

A. Program - controlled I/O B. Interrupt - driven I/O C. DMA approach D. Event - driven

答案:C. DMA approach

解释

  • A. Program - controlled I/O(程序控制I/O):在程序控制I/O方式中,数据的传输完全由CPU控制。CPU需要执行一系列的指令来实现数据从外部设备到内存或者从内存到外部设备的传输。这种方式传输速度较慢,因为每一步传输都需要CPU参与,不能实现外部设备和主内存之间的高速块传输。例如,要从一个外部设备读取数据,CPU需要不断地发送指令来读取设备的数据寄存器,然后将数据存储到内存中,这是一个逐字节或逐字的操作过程,效率较低。
  • B. Interrupt - driven I/O(中断驱动I/O):中断驱动I/O是当外部设备准备好数据或者完成一个操作时,向CPU发送中断请求,CPU响应中断后进行数据传输。虽然这种方式比程序控制I/O在一定程度上提高了CPU的利用率,但由于每次数据传输都需要CPU响应中断并处理,对于高速块传输来说,仍然会因为CPU的频繁介入而受到限制。例如,在网络数据接收过程中,每收到一个数据包就产生一个中断,CPU需要暂停当前任务来处理这个数据包,无法满足高速块传输的要求。
  • C. DMA approach(直接内存访问):DMA专门用于外部设备和主存之间的高速块传输。它通过DMA控制器来接管系统总线的控制权,在外部设备和主存之间直接传输数据块,而CPU在这个过程中可以去执行其他任务。例如,在从硬盘读取大型文件到内存的过程中,DMA控制器可以独立地控制数据传输,按照预先设置好的源地址(硬盘上的数据位置)、目的地址(内存中的存储位置)和数据块大小等参数,快速地将数据从硬盘传输到内存,无需CPU逐字节或逐字地参与传输过程,非常适合高速块传输。
  • D. Event - driven(事件驱动):事件驱动是一种编程模式,它不是一种专门用于外部设备和主存之间数据传输的机制。事件驱动主要关注的是事件的产生和处理,在数据传输方面并没有像DMA那样针对外部设备和主存之间高速块传输的特定功能。例如,在图形用户界面(GUI)编程中,事件驱动用于处理用户的操作事件,如鼠标点击、键盘输入等,与外部设备和主存之间的高速数据传输关联不大。

Quiz (2)

问题

Once the DMA controller obtains access to the system bus, it transfers one byte of data and then returns the control of system bus to the processor. This is _______.

A. burst mode B. block mode C. cycle stealing mode D. transparent mode

答案:C. cycle stealing mode

解释

  • A. burst mode(突发模式)/B. block mode(块模式):在突发模式(块模式)下,一旦DMA控制器获得系统总线的访问权,它会将整个数据块的所有字节全部传输完,然后才把系统总线的控制权交还给处理器。而不是像题目中描述的只传输一个字节就归还控制权,所以A和B选项不符合题意。
  • C. cycle stealing mode(周期窃取模式):此模式的特点是,DMA控制器获得系统总线访问权限后,只传输一个字节的数据就将系统总线的控制权交还给处理器。之后它会持续发出请求,每次请求传输一个字节的数据,直到完成整个数据块的传输,这与题目中的描述完全相符。
  • D. transparent mode(透明模式):透明模式是指DMA控制器只在CPU执行不使用系统总线的操作时才进行数据传输,并且不需要请求系统总线的控制权。与题目中所描述的传输一个字节就归还控制权的方式不同,所以D选项也不符合。