版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DMAs igangm ti. xi di an. edu. cnDMA D?v£A艮卩Direct Memory access无需计算机的CPU的干预就可以在内存和夕卜 设之间传输数据通常都有DMA控制器来进行DMA操作, DMA控制器可能是主板上的,也有可能是 外设特有的。为什么需要DMA? Windows中的 DMA传输基于这个模型传输模型Physical addressspaceMapregistersBus addressspace适配器对象(况cUpter) Windows 2000内核使用一个称为适配器对象的数 据结构来描述设备上的DMA特征,并用它来控制 访问潜在的共
2、享资源,如系统DMA通道和映射寄 存器通常在StartD evice函数中调用IoGetDmaAdapter获 得适配器对象适配器对象中有一个指针,指向一个 DmaOperationsK结构,该结构包含了所有需要 的DMA相关的其它函数,这些函数如下表DmaOperations FunctionPointerPutDmaAdapterAllocateCommonBuffer FreeCommonBuffer AllocateAdapterChannelFlushAdapterBuffersFreeAdapterChannel FreeMapRegisters MapTransfer GetDm
3、aAlignment ReadDmaCounterGetS c atterG atherListPutSc atterGatherLi stDescriptionDestroys adapter objectAllocates a common bufferReleases a common bufferReserves adapter and map registersFlushes intermediate data buffers after transferReleases adapter object and map registersReleases map registers o
4、nlyPrograms one stage of a transferGets address alignment required for adapterDetermines residual countReserves adapter and constructs scatter/gather listReleases scatter/gather list传输策略选择io如果设备有总线主控能力,那么它就有 访问主存的必要硬件部件,因此只需要告 诉它几个基本事实,如从哪开始,需要传 输多少单位的数据,是输入操作还是输出 操作,等等。可以向硬件设计者咨询或者 固件程序员咨询以得到细节部分,否
5、则只 能参考许多硬件级的说明文档。传输策略选择 2。一个有分散/聚集(scatter/gather)能力 的设备可以在自身与不连续的物理内存区 之间传输大块数据。设备的分散/聚集能力 对软件十分有利,它可以避免对具有连续 页帧的大块的内存的需求。页可以被简单 地锁定在所在的物理内存,只要把内存地 址告诉设备就可以进行。传输策略选择 3o如果设备不是总线主控设备,那么需要 使用计算机主板上的系统DMA控制器。这 种形式的DMA传输被称为从属DMA (slave DMA) o与ISA总线连接的系统DMA控制 器对所能访问的物理内存和一次传输的数 据量会有些限制。EISA总线的DMA控制器 去掉了这
6、些限制。在Windows 2000中,不必 知道硬件具体插入到哪种类型的总线,因 为系统自动参考这些不同的限定。 4o通常,DMA操作将包括编程硬件映射寄 存器或操作前后的数据复制。如果设备需 要连续地读写数据,我们不希望在每次I/O 请求中都做这两步,这将大大地降低处理 速度,在某些情况下也是不能接受的。因 此,应该分配一个公用缓冲区 (common buffer),设备和驱动程序可以在任何时间 同时访问这个缓冲区。说明在涉及DMA传输的过程中策略的选择是第 一步也是最重要的一步。不仅需要参考硬件,还要参考可能的软件 需求(主控,从属,包,通用缓冲区)尽管这四种因素的相互影响会产生许多种 不
7、同的结果,但执行的步骤中有许多共同 的特征。如下图显示了一次传输过程:Startlo routineFfQGAdapierChamelor FrseM&pRegisters执行DMA传输基于包(packet-based)的DMA传输。在这种方 式中,将使用IRP携带的数据缓冲区来传输 一是量萌数据。为了简单,让我们假设面对当前最普通的 情况:一个基于PCI的总线主控设备并且没 肴分散/聚集能另。为什么简单?下面按照程序编写的通常步骤来详细说明 DMA的过程缓冲方式当创建设备对象时,通常指定使用。加/缓 冲方式,即设置DO_DIRECT_IO标志。或 者在定义CTL_CODE时指定dir
8、ect input或者 direct output方式。因为调用的MapTransfer函数需要一个MDL 作为参数,这种方式会在彗一个IRP的 MdlAddress保存描述用户缓冲区的MDL创建和销毁适配器对象在处理start device的pnp请求时,我们除了要 取得IO,内存,中断资源外,还要创建一 个适配器对象(adapter obiect)。在处理stop device请求时,除了释放映射的 IO,内存资源,断开中断的连接外,还要 销毁适配器对象。例如:DMAJoc和其它资源区别前面讲过的IO,内存,和中断资源,我们 都回在一个CmResourceTypeXxx类型的 case 子
9、句中获得,这里不需要 CmResourceTypeDma 类型的 case 子句,因为 谟备是总线主控方式,硬件本身包含有执 行DMA传输所必须的所有电路逻辑,所以 系统没必要赋予设备DMA资源。获取DMA通道为了初始化一个I/O操作,Startlo例程必须 首先调用适配器对象的AllocateAdapterChannelfJ 程以获取适配器 对象。该函数的一个参数AdapterControl 例程的地址,I/O管理器将在获取操作完成 后调用这个例程。 Allo c ate A dap te r Channel函数的准备和调用过 程:DMA.docAllo cateAdapte rChanne
10、 1 何 时完成 Allo c ate A dap te rChannel 做什么?等待DMA控制器,和映射寄存器可用主控,从属,支持映射寄否?当DMA控制器,和映射寄存器都可用时, AllocateAdapterChanneliM Adapter Control列 程调用 AdapterControl Allo c ate A dap te rChannel最终将调用驱动程序 提供的AdapterControl例程(在 DISPATCH_LEVEL,就象Ssrtlo例程_样)。AdapterControl例程的两个任务:Ad况p terControl例程的两个任务第一,应该调用适配器对象的M
11、ap Tran s fer例程以 便为I/O操作的第一阶段准备映甯寄存器和其它系 统资源。如果是总线主控设备,M仇pTransfer将返 回一个代表传输第一阶段开始点的逻辑地址。这 个逻辑地址可能会与CPU的物理内存地址相同, 但也可能会不同。所需要知道的就是该地址就是 编程设备硬件的正确地址。第二个任务是执行与“通知设备这个物理地址” 操作中涉及的任何设备相关的操作步骤,然后开 始操作设备硬件:DMA.docDPC中断通常都发生在传输启动后的很短一段 时间后,弄且1st只假很少的事情,比如判 断中断类型清除中断状态位之后,1st通常都请求一个DPC来处理传输 第一阶段的完成,并开始下一个操作
12、。 DNIA.doc使用分散集中列表进行传输如果硬件支持分散/聚集能力,那么系统可以更容易地处 理设备的DMA传输。分散/聚集能力允许设备传输所涉及 的页在物理内存中不连续。这种设备的StartDevice例程在创建适配器对象上便用与前 面i寸论的同梓的方式,除了 ScatterGather标志应该设为传统方法在安排一个涉及分散/聚集功能的DMA传输时, 几乎等同于前面段“执行DRIA传输”中的基于包的例子。 唯一不同之处是毎需要为WW每个墮啟參次週鬼 MapTi-ansfei-o每茨调用后都荟得到分歆/鬆列耒中的一 个血含物理地址和长度的数组元素。当循环完成时,可以使用设备专用的方法把分散/
13、聚集列 表爱搖劲设蓉,姝启开始彳专输。DbLA.doc使用 Ge tS c a tte r Ga the r Lis t这种方法不用手动构建Scatter/gather列表 DMA.doc在决定使用GetScatterGatherList前,以下的 前提需要满足:程序运行在2000及以后系统,98/ME不支持 这个函数如果不确定或者为了程序的兼容性,应该 使用传统的循环获取Scatter/gather列表使用系统DMA控制器即 slave DMA所有slave设备必须共享有限数 量。AllocateAdapterChannel在这种共孚情形 中具有真正意义,因为一次只能有一个设 备可以使用特定
14、的通道可以在PnP管理器发送的I/O貨源列表中找 到一个 CmResourceTypeDma 资源。大部分方面和总线Master备类似,一些H 别使用公用缓冲区通常应该在StartDevice中,在创建适配器对 象后分配公用缓冲区:DIA.doc使用公用缓冲区的Slave模式DMA传输必须为接收数据的虚拟地址创建一个MDL。MDL 的实际目的是在最后调用MapTransfer中占用一个 参数,这个MDL指名不需要衽何数据复制。通常应该在St狄Device函数中,紧接着分配公用缓 冲区之后创建该MDL为了执行一个输出操作,首先应通过某些手段(如 一个明确的内存复制)使公用缓冲区中包含有要发 往到
15、设备的数据在输入操作的结尾,应该把数据从公用缓冲区复 制到其它某个地方使用公用缓冲区的Slave模式DMA传其它部分和进行基于包的DMA传输类似:调用AllocateAdapterChannel,该函数调用驱动程序提供 的适配器控制例程,这个例程又调用 I<eFlushIoBuffers(如果分配了 一个可被高速缓冲的 缓冲区),最后调用MapTransfero DPC例程将调用 FlushAdapterBuffers 和 F reeAdap ter Channel 函数。唯一要注意的是应该指定公用缓冲区的MDL来代 替读写IRP携带的MDL使用公用缓冲区的master模式DMA传输如果
16、哎备是总线主控模式,那么在分配公用缓冲 区后就没有必要调用Allo c ate Ad ap ter Ch annel、 MapTransfer、FreeMapRegisters 函数。因为AllocateCommonBuffer也能保留必要的映射寄 存器。每个总线主控设备都有一个适配器对象, 该对象不与其它设备共享,因此不必等待。由于 拥有可以在任何时间都能访问缓冲区的虚拟地址, 又由于设备的总线主控能力允许使因物理地址(由 AllocateCommonBuffer返回)访问该缓冲区,所以 没有额外的工作需要做。这是所有形式的DMA传输中最简单的。使用公用缓冲区的注意事项在运行系统中,物理上连续的内存是十分 稀有的,有时根本得不到这样的内存,除 非在系统启动的早期请求这样的内存。内 存管理器为了满足请求会对内存页进行重 排列,但它的尝试十分有限,并且这个过 程会推ISAIlocateCommon
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年陕西户县海丝村镇银行高校见习生招聘笔试备考题库及答案解析
- 2026年合肥市园上园小学喻岗分校教师招聘笔试备考题库及答案解析
- 景泰蓝磨蓝工冲突解决强化考核试卷含答案
- 2026重庆市綦江区郭扶镇招聘公益性岗位人员1人考试备考题库及答案解析
- 2026广西崇左市人民医院招聘(第二批次)考试参考题库及答案解析
- 幼儿园主题活动方案与教案模板
- 2026年上海交通大学附属闵行实验学校教师招聘考试参考试题及答案解析
- 2026广西北海市涠洲岛旅游区医院招聘(北海市海城区涠洲镇中心卫生院)考试备考题库及答案解析
- 2026云南昭通市文化馆招聘城镇公益性岗位人员3人考试参考试题及答案解析
- 新晋教师教学能力考核标准解析
- 律师团队合作规范及管理办法
- 二氧化硅气凝胶的制备技术
- 临床微生物标本采集运送及处理
- 软件系统运维操作手册
- 常规体检指标讲解
- 新人教版高中数学必修第二册-第八章 立体几何初步 章末复习【课件】
- GB/T 157-2025产品几何技术规范(GPS)圆锥的锥度与锥角系列
- TD/T 1041-2013土地整治工程质量检验与评定规程
- 2025年上海市崇明区高考英语一模试卷
- 电子公司生产部年终工作总结
- 《资治通鉴》与为将之道知到课后答案智慧树章节测试答案2025年春武警指挥学院
评论
0/150
提交评论