阅读:1240回复:1
请教两个 "DMA" 问题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.*] |
|
沙发#
发布于:2007-11-07 11:31
刚学驱动,帮你顶下
1. 我觉得 DO_DIRECT_IO/DO_BUFFERED_IO 与 Packet_based/Common Buffer 是两个意思。 2.如果用户分配了一块很大的内存,比如100M,这么大的内存肯定不可能都在真实的物理内存上,部分内存被交换到硬盘上。传到驱动以后,MDL怎么能锁定这么大内存?锁定失败怎么办? |
|