dma(direct memory access),即直接存储器存取,是一种快速传送数据的机制。数据传递可以从适配卡到内存,从内存到适配卡或从一段内存到另一段内存。 利用它进行数据传送时不需要cpu的参与。每台电脑主机板上都有dma控制器,通常计算机对其编程,并用一个适配器上的rom(如软盘驱动控制器上的rom)来储存程序,这些程序控制dma传送数据。一旦控制器初始化完成,数据开始传送,dma就可以脱离cpu,独立完成数据传送。 在dma传送开始的短暂时间内,基本上有两个处理器为它工作,一个执行程序代码,一个传送数据。利用dma传送数据的另一个好处是,数据直接在源地址和目的地址之间传送,不需要中间媒介。如果通过cpu把一个字节从适配卡传送至内存,需要两步操作。首先,cpu把这个字节从适配卡读到内部寄存器中,然后再从寄存器传送到内存的适当地址。dma控制器将这些操作简化为一步,它操作总线上的控制信号,使写字节一次完成。这样大大提高了计算机运行速度和工作效率。 计算机发展到今天,dma已不再用于内存到内存的数据传送,因为cpu速度非常快,做这件事,比用dma控制还要快,但要在适配卡和内存之间传送数据,仍然是非dma莫属。要从适配卡到内存传送数据,dma同时触发从适配卡读数据总线(即i/o读操作)和向内存写数据的总线。激活i/o读操作就是让适配卡把一个数据单位(通常是一个字节或一个字)放到pc数据总线上,因为此时内存写总线也被激活,数据就被同时从pc总线上拷贝到内存中。 直接内存访问(dma)方式是一种完全由硬件执行i/o交换的工作方式。dma控制器从cpu完全接管对总线的控制。数据交换不经过cpu,而直接在内存和i/o设备之间进行。dma控制器采用以下三种方式: ①停止cpu访问内存:当外设要求传送一批数据时,由dma控制器发一个信号给cpu。dma控制器获得总线控制权后,开始进行数据传送。一批数据传送完毕后,dma控制器通知cpu可以使用内存,并把总线控制权交还给cpu。 ②周期挪用:当i/o设备没有 dma请求时,cpu按程序要求访问内存:一旦 i/o设备有dma请求,则i/o设备挪用一个或几个周期。 ③dma与cpu交替访内:一个cpu周期可分为2个周期,一个专供dma控制器访内,另一个专供cpu访内。不需要总线使用权的申请、建立和归还过程