DMADMAsigang@mti.xidian.edu.csigang@mti.xidian.edu.cnnDMADMADMADMA即即DirectMemoryaccessDirectMemoryaccess无需计算机的无需计算机的CPUCPU的干预就可以在内存和的干预就可以在内存和外设之间传输数据外设之间传输数据通常都有通常都有DMADMA控制器来进行控制器来进行DMADMA操作操作,,DMADMA控制器可能是主板上的,也有可控制器可能是主板上的,也有可能是外设特有的。能是外设特有的。为什么需要为什么需要DMADMA??传输模型传输模型WindoWindowsws中的中的DMADMA传传输基于这输基于这个模型个模型适配器对象(适配器对象(adapteradapter))Windows2000Windows2000内核使用一个称为适配器对象内核使用一个称为适配器对象的数据结构来描述设备上的的数据结构来描述设备上的DMADMA特征,并用它特征,并用它来控制访问潜在的共享资源,如系统来控制访问潜在的共享资源,如系统DMADMA通道通道和映射寄存器和映射寄存器通常在通常在StartDeviceStartDevice函数中调用函数中调用IoGetDmaAdapterIoGetDmaAdapter获得适配器对象获得适配器对象适配器对象中有一个指针,指向一个适配器对象中有一个指针,指向一个DmaOperationsDmaOperations的结构,该结构包含了所有的结构,该结构包含了所有需要的需要的DMADMA相关的其它函数,这些函数如下表相关的其它函数,这些函数如下表DmaOperationsFunctionPointerDescriptionPutDmaAdapterDestroysadapterobjectAllocateCommonBufferAllocatesacommonbufferFreeCommonBufferReleasesacommonbufferAllocateAdapterChannelReservesadapterandmapregistersFlushAdapterBuffersFlushesintermediatedatabuffersaftertransferFreeAdapterChannelReleasesadapterobjectandmapregistersFreeMapRegistersReleasesmapregistersonlyMapTransferProgramsonestageofatransferGetDmaAlignmentGetsaddressalignmentrequiredforadapterReadDmaCounterDeterminesresidualcountGetScatterGatherListReservesadapterandconstructsscatter/gatherlistPutScatterGatherListReleasesscatter/gatherlist传输策略选择传输策略选择11。如果设备有总线主控能力,那么它就有。如果设备有总线主控能力,那么它就有访问主存的必要硬件部件,因此只需要告访问主存的必要硬件部件,因此只需要告诉它几个基本事实,如从哪开始,需要传诉它几个基本事实,如从哪开始,需要传输多少单位的数据,是输入操作还是输出输多少单位的数据,是输入操作还是输出操作,等等。可以向硬件设计者咨询或者操作,等等。可以向硬件设计者咨询或者固件固件程序员咨询以得到细节部分,否则只程序员咨询以得到细节部分,否则只能参考许多硬件级的说明文档。能参考许多硬件级的说明文档。传输策略选择传输策略选择22。一个有分散。一个有分散//聚集(聚集(scatter/scatter/gathergather)能力的设备可以在自身与不连续)能力的设备可以在自身与不连续的物理内存区之间传输大块数据。设备的的物理内存区之间传输大块数据。设备的分散分散//聚集能力对软件十分有利,它可以避聚集能力对软件十分有利,它可以避免对具有连续页帧的大块的内存的需求。免对具有连续页帧的大块的内存的需求。页可以被简单地锁定在所在的物理内存,页可以被简单地锁定在所在的物理内存,只要把内存地址告诉设备就可以进行。只要把内存地址告诉设备就可以进行。传输策略选择传输策略选择33。如果设备不是总线主控设备,那么需要使。如果设备不是总线主控设备,那么需要使用计算机主板上的系统用计算机主板上的系统DMADMA控制器。这种形控制器。这种形式的式的DMADMA传输被称为从属传输被称为从属DMADMA((slaveslaveDMADMA)。与)。与ISAISA总线连接的系统总线连接的系统DMADMA控制控制器对所能访问的物理内存和一次传输的数据量器对所能访问的物理内存和一次传输的数据量会有些限制。会有些限制。EISAEISA总线的总线的DMADMA控制器去掉控制器去掉了这些限制。在了这些限制。在Windows2000Windows2000中,不必知中,不必知道硬件具体插入到哪种类型的总线,因为系统道硬件具体插入到哪种类型...