yeammy
驱动牛犊
驱动牛犊
  • 注册日期2002-12-27
  • 最后登录2012-02-22
  • 粉丝0
  • 关注0
  • 积分63分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1011回复:2

Direct I/O问题会萃!!!谢谢!谢谢!谢谢!

楼主#
更多 发布于:2003-06-14 16:48
阁下,请帮个忙,谢谢!谢谢!谢谢!
1)IRP传递MdlAddress,这个MDL好象是由I/O MANGER建立的吧?但是这个IRP是怎么建立的呢?还有这个MDL与应用程序的关系如何?我好象在很多DIRECT I/O的例子中没有看到申请内存与驱动程序的MDL,难道应用程序不指点传送大小,驱动程序就知道要传送多少了?
2)用IoAllocateMdl建立的MDL与IRP传递的MDL之间的关系?
3)PNP的各个副控制代码IRP与ReadFile.WriteFile等应用程序之间是一种什么样的合作或者分工关系?
4)在DIRECT I/O中好象有良种方式共享内存,一是驱动程序申请内存,然后映射到应用程序,二是应用程序申请内存,锁定到驱动程序,请问具体是如何实现的呢?能否提供一些例子?
 
5)DPC,ISR运行级别都在PASSIVE-LEVEL之上,是否意味着DMA DIRECT I/O只能申请非分页内存?如果是这样,用户程序如何访问驱动程序申请的内存?
6)DIRECT I/O中,应用程序能否用WriteFile直接使用驱动程序中申请的内存把数据写到硬盘上,而不用ReadFile?如何实现?
7)申请内存什么地方体现出了连续内存和非连续内存的区别?能申请的最大连续内存是多大?
8)在驱动程序的READ,WRITE IRP中都要处理parameters.read.length,但是应用程序什么地方体现出了对这个length信息的传递?
9)任意上下文arbitrary context 与非任意上下文non-arbitrary context的区别?
下面是有关SCATTER_GATHER_LIST问题:
(1)DMA如果Element.lengh>卡上内存怎么处理?设备描述中的MaximumLength如何设置?是否就是卡上内存大小?
(2)如何把SCATTER_GATHER_LIST的物理地址映射为应用程序能使用的虚拟地址?
(3)DMA何时产生中断?是在完成了卡上内存大小的传输长度,还是在完成指定长度的传输量才产生中断?
(4)DMA中,PCI9054能处理的最大分散/聚集列表元素个数为多大?当DMA处理完了最大的分散/聚集列表元素时,对应的卡上内存数据是否传送完毕?
(5)SCATTER_GATHER_LIST的Elements.Length是否大于卡上内存大小?大于怎么处理?
(6)SCATTER_GATHER_LIST方式如何实现数据存盘?
谢谢,谢谢!谢谢!问题实在多多。

最新喜欢:

juventusjuvent...
ppl
ppl
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2006-05-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-15 11:01
阁下,请帮个忙,谢谢!谢谢!谢谢!
1)IRP传递MdlAddress,这个MDL好象是由I/O MANGER建立的吧? yes
但是这个IRP是怎么建立的呢?不好说清楚,你去下载一个reactos的源代码,看一看,大致的原理是一样的。
还有这个MDL与应用程序的关系如何?我好象在很多DIRECT I/O的例子中没有看到申请内存与驱动程序的MDL,难道应用程序不指点传送大小,驱动程序就知道要传送多少了?
2)用IoAllocateMdl建立的MDL与IRP传递的MDL之间的关系?
3)PNP的各个副控制代码IRP与ReadFile.WriteFile等应用程序之间是一种什么样的合作或者分工关系?
4)在DIRECT I/O中好象有良种方式共享内存,一是驱动程序申请内存,然后映射到应用程序,二是应用程序申请内存,锁定到驱动程序,请问具体是如何实现的呢?能否提供一些例子?
  只有一种。是第二种。
 
5)DPC,ISR运行级别都在PASSIVE-LEVEL之上,是否意味着DMA DIRECT I/O只能申请非分页内存?yes
 如果是这样,用户程序如何访问驱动程序申请的内存?内存是应用程序分配的。
  
  
6)DIRECT I/O中,应用程序能否用WriteFile直接使用驱动程序中申请的内存把数据写到硬盘上,而不用ReadFile?如何实现?
7)申请内存什么地方体现出了连续内存和非连续内存的区别?
   看看MDL的结构
 能申请的最大连续内存是多大?
8)在驱动程序的READ,WRITE IRP中都要处理parameters.read.length,但是应用程序什么地方体现出了对这个length信息的传递?
  不要问!!
9)任意上下文arbitrary context 与非任意上下文non-arbitrary context的区别?
  任意,就是说不清楚是哪一个,哪一个都有可能。
下面是有关SCATTER_GATHER_LIST问题:
(1)DMA如果Element.lengh>卡上内存怎么处理?设备描述中的MaximumLength如何设置?是否就是卡上内存大小?
(2)如何把SCATTER_GATHER_LIST的物理地址映射为应用程序能使用的虚拟地址?
(3)DMA何时产生中断?是在完成了卡上内存大小的传输长度,还是在完成指定长度的传输量才产生中断?
(4)DMA中,PCI9054能处理的最大分散/聚集列表元素个数为多大?当DMA处理完了最大的分散/聚集列表元素时,对应的卡上内存数据是否传送完毕?
(5)SCATTER_GATHER_LIST的Elements.Length是否大于卡上内存大小?大于怎么处理?
(6)SCATTER_GATHER_LIST方式如何实现数据存盘?
谢谢,谢谢!谢谢!问题实在多多。


[编辑 -  6/15/03 by  ppl]
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝1
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-16 09:41
1)IRP传递MdlAddress,这个MDL是由I/O 管理器创建的。
这个IRP也是I/O管理器根据对应的请求建立的。MDL用来映射用户地址,MDL的申请也是 I/O 管理器具体申请的。
2)用IoAllocateMdl建立的MDL与IRP传递的MDL之间的关系?一般是IoAllocateMdl申请的你自己要管理,而IRP传递的MDL是由I/O管理器申请的,也有它管理它的生存期。
3)PNP的各个副控制代码比较好理解,就象领导讲话中的第i点中的第n小点中的第m小小点的关系。
ReadFile.WriteFile 对应于驱动中的IRP_MJ_READ 及 IRP_MJ_WRITE 分发例程。
问题太多... ...
你的认可是对我最大的鼓励!
游客

返回顶部