直接存储器访问方式又称为DMA(Direct Memory Access)方式,这种输入输出方式主要用来连接高速外围设备。例如,磁盘存储器、磁带存储器、光盘存储器及高速打印机等。
  目前,一般高速活动头磁盘的数据传输速度为每秒66兆字节以上。对于这类高速外围设备,不能采用程序控制输入输出方式,也不能采用中断输入输出方式,即不能通过执行程序来逐个传送数据,必须在外围设备与主存储器之间建立直接数据通路。因此,支持DMA方式的计算机系统必须采用以主存储器为中心的系统结构。DMA方式的数据传送过程如图6.4所示。
图 6.4 DMA 方式的数据传送过程

  DMA方式具有如下特点:
  1.DMA方式主要用于高速外围设备中,CPU不仅能够与外围设备并行工作,而且整个数据的传送过程不需要CPU的干预。如果主存储器的频带宽度足够的话,外围设备的工作可以丝毫不影响CPU运行它自身的程序。
  2.主存储器既可以被CPU访问,也可以被外围设备访问。在主存储器中通常要有一个存储管理部件来为各种访问主存储器的申请排队,一般计算机系统把外围设备的访问申请安排在最高优先级。
  3.由于在外围设备与主存储器之间传送数据不需要执行程序,也不动用CPU中的数据寄存器和指令计数器等。因此,不需要做保存现场和恢复现场等工作,从而使DMA方式的工作速度大大加快。
  4.在DMA控制器中,除了需要设置数据缓冲寄存器、设备状态寄存器或控制寄存器之外,还要设置主存储器地址寄存器,设备地址寄存器和数据交换个数计数器等。外围设备与主存储器之间的整个数据交换过程全部要在硬件的控制下完成。
  另外,由于外围设备一般是以字节为单位传送的,而主存储器是以字为单位访问的,因此,在DMA控制器中还要设置从字节装配成字和从字拆卸成字节的硬件设备。
  在DMA传送方式开始之前,必须对DMA控制器进行初始化,包括向DMA控制器传送主存缓冲区首地址、设备地址、交换的数据块长度等,并启动设备开始工作。
  在DMA方式结束之后,要向CPU申请中断,在中断服务程序中对主存储器的数据缓冲区进行后处理。如果需要继续传送数据的话,要再次对DMA控制器进行初始化。

  DMA方式的工作流程如下:
  对于输入设备:
  从输入介质上读一个字节或字到DMA控制器的数据缓冲寄存器BD中,如果输入设备是面向字符的,则要把读入的字符装配成字。
  若一个字还没有装配满,则返回到上面;若校验出错,则发中断申请;若一个字已经装配满,则将BD中的数据送入主存数据寄存器。
  把主存地址寄存器BA(在DMA控制器中)中的地址送入主存地址寄存器,并且将BA中的地址增值至下一个字地址。
  把DMA控制器内的数据交换个数计数器BC中的内容减"1"。
  若BC中的内容为"0",则整个DMA过程全部结束,否则返回到最上面继续进行。
  对于输出设备:
  把主存地址寄存器BA(在DMA控制器中)中的地址送入主存地址寄存器,并启动主存储器,同时将BA中的地址增值至下一个字地址。
  将主存储器数据寄存器中的数据送入DMA控制器的数据缓冲寄存器BD中。如果输出设备是面向字符的,则要把BD中的数据拆卸字符。
  把BD中数据逐个字符(对于面向字符的设备)或整个字写到输出介质上。
  把DMA控制器内的数据交换个数计数器BC中的内容减"1"。
  若BC中的内容为"0",则整个DMA过程全部结束,否则返回到最上面继续进行。