阅读:1011回复:2
Direct I/O问题会萃!!!谢谢!谢谢!谢谢!
阁下,请帮个忙,谢谢!谢谢!谢谢!
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方式如何实现数据存盘? 谢谢,谢谢!谢谢!问题实在多多。 |
|
最新喜欢:![]() |
沙发#
发布于:2003-06-15 11:01
阁下,请帮个忙,谢谢!谢谢!谢谢! [编辑 - 6/15/03 by ppl] |
|
板凳#
发布于: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 分发例程。 问题太多... ... |
|
|