heartofdra
驱动牛犊
驱动牛犊
  • 注册日期2003-03-11
  • 最后登录2016-09-21
  • 粉丝0
  • 关注0
  • 积分443分
  • 威望88点
  • 贡献值0点
  • 好评度43点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1179回复:1

请教两个 "DMA" 问题

楼主#
更多 发布于:2007-11-07 08:26
 


1. 对于Read Write 是通过DMA进行的情形:

      Packet_based 型DMA 和DO_DIRECT_IO 对应的?
      Common Buffer 型DMA是不是和DO_BUFFERED_IO对应的?
  
      但假如是做Common Buffer 型DMA,又和一般的DO_BUFFERED_IO读写不同, 一般的DO_BUFFERED_IO读写I/O管理器会自动的创建一个缓冲区,但是对于DMA来说,必须要通过AllocateCommonBuffer分配一个缓冲区,是这样的吗?
      假如是这样的,那么I/O管理器还会再自动创建一个缓冲区吗?它会不会知道你这个Read、Write用的是DMA,从而不自动创建一个缓冲区了?



   2.IRP的MDL是IO管理器创建的,那么IO管理器能否保证此MDL锁定的是 不可分页的物理内存, 还是说这个是不确定的? 那么怎么做才能保证 它锁定的是不可分页的 物理内存?




   --

Freedom is the right of all sentient beings!

※ 修改:·EuroPad 于 Nov  1 16:03:44 修改本文·[FROM: 211.99.222.*]
king00star
驱动牛犊
驱动牛犊
  • 注册日期2006-08-17
  • 最后登录2014-04-19
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望92点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-11-07 11:31
刚学驱动,帮你顶下

1. 我觉得 DO_DIRECT_IO/DO_BUFFERED_IO 与 Packet_based/Common Buffer 是两个意思。
2.如果用户分配了一块很大的内存,比如100M,这么大的内存肯定不可能都在真实的物理内存上,部分内存被交换到硬盘上。传到驱动以后,MDL怎么能锁定这么大内存?锁定失败怎么办?
游客

返回顶部