阅读:2867回复:6
DO_DIRECT_IO还是DO_BUFFERED_IO?
1、DO_DIRECT_IO还是DO_BUFFERED_IO?这两种方式有什么区别?分别对应什么情况使用?
2、应用程序中writefile、readfile会进入ds封装好的write、read,但我如果在write、read中写了几个pipe的传输,怎么在应用程序中控制? 3、同步方式与异步方式与Isochronous Transfer有什么关系吗? 我理解的同步方式、异步方式是指对irp的处理,异步方式也可以建立Isochronous Transfer吧? 现在开始有些乱了,还请高手讲讲,谢谢! |
|
最新喜欢:r2109t... |
沙发#
发布于:2004-03-07 14:09
懂的人能给指点一下吗?
|
|
板凳#
发布于:2004-03-07 19:43
1、DO_DIRECT_IO还是DO_BUFFERED_IO?这两种方式有什么区别?分别对应什么情况使用?
答: DO_DIRECT_IO常用于传输大块的讲求速度的数据。DO_BUFFERED_IO常用于传输小块的,慢速的数据。DO_DIRECT_IO的效率较高(只需内存锁定即可),代价是牺牲物理内存。DO_BUFFERED_IO的内存效率高,但速度差(它要分配内存,复制数据)。造成这种区别的主要原因还是因为处理器的Ring 0到Ring4的穿越造成的(微软只用了两层)。你无法两全其美,只能取其一(当然有时候能两全其美,后面会提到)。 DO_DIRECT_IO主要用于使用DMA的底层驱动。Mass Storage也用。 DO_BUFFERED_IO主要用于HID(包括Mouse,Keyboard), 一些Video, 还有串口,并口什么的。 不过我看绝大多数设计者都挺自私的,上来就用DIRECT IO, :) 2、应用程序中writefile、readfile会进入ds封装好的write、read,但我如果在write、read中写了几个pipe的传输,怎么在应用程序中控制? 答: 我没太看懂你是什么意思。我猜你是说如何在应用程序中控制Driver中的Read、Write函数中的执行细节-即有选择地执行指定的代码。如果是这样,那你最好是加入IO CTRL或Vendor Request什么的外部控制。然后在Driver和固件中使用全局变量即可。 3、同步方式与异步方式与Isochronous Transfer有什么关系吗? 我理解的同步方式、异步方式是指对irp的处理,异步方式也可以建立Isochronous Transfer吧? 答:同步方式与异步方式是一种概念,到处都在使用,也更容易混淆和混乱。你可以在软件、通信、甚至电机领域都见得到他们。跟它们类似的还有“中断”-让论坛上的兄弟们头大的又一杀手! 你说的“同步方式与异步方式”是指Request的操作模式。对应于软件中的编程。Windows更提倡采用异步方式,界面更友好,效率更高。同步方式更古典,简单,适合初学者。简单地说,对于一个长时间的操作(放在一个函数里),异步操作立刻返回STATUS_PENDING,至于什么时候完成或超时,你自己再去查询。同步操作会傻在那里直到操作完成或超时。如果做过串口编程或网络编程会很容易理解这两个概念。异步操作配合Windows的消息机制可以做出很漂亮的接口和界面。 Isochronous Transfer则完全是USB的一种传输方式:主有用于多媒体流。你可以设想:如果Usb传输出错,对于资料传输(例如文件传输)而言事必要重发。而对于音视频,则完全可以丢弃,因为同步连续才是最重要的。因为即便你重传,声音和图像也已经停顿或扰动了。所以同步传输关心的是在此时此刻把当前的数据发送出去。完全不理会前一个包是否有问题。就像电视机一样,关注于实时性。 所以结论是:“我理解的同步方式、异步方式是指对irp的处理,异步方式也可以建立Isochronous Transfer”可以这样理解。 最后,提到关于两全其美的事情:可以DO_DIRECT_IO和DO_BUFFERED_IO两种都不用,达到内存与效率兼顾。但是(说到“但是”总是令人失望,真是没办法!)只能用于高层驱动程序(是指它运行于用户线程空间),诸如FSD等。这种IO方式的使用还有一堆罗里罗唆的要求,比如ProbeForRead,ProbeForWrite什么的。初学者可以暂时不去玩它。 |
|
|
地板#
发布于:2004-03-07 19:53
另外,提到分数问题。
分数不是必需的,可给可不给。但是是对别人的一种肯定。必定一分钱一分货。 我可以写一行,也可以写十行。毕竟拿人钱财,与人消灾。得到分数的人肯定会更有回答问题的积极性。 如果你的分数不多,有两种选择: 1。努力回答别人的提问。(这也就是分数设计的目的) 2。给别人一个解释,没人会太贪财的。 我认为免费的东西是毫无价值甚至会害人的。 我们国家已经被微软免费的操作系统还苦了。(我认为这就是鸦片战争!!!) 我们做研发的要争气呀,不能给中国人丢脸! |
|
|
地下室#
发布于:2004-03-08 09:07
谢谢!!!
基本上清楚了,至于加IO CTRL或Vendor Request什么的外部控制,我再想想. 哈哈,不过我还是觉得分数这东西真的是很无聊,每个人的观念不同嘛~ 如果你在北京,我可以请你去搓一顿,这可比分数实在多了:p |
|
5楼#
发布于:2004-03-08 09:33
最近,电脑老是受到病毒的骚扰,就是那个SVCHOST.EXE中招。
SVCHOST是干什么的呢? 它是为了节约系统资源的。说白了就是:如果好多功能都使用各自单独的进程,则系统开销就会很大。所以Windows系统使用SVCHOST+若干服务DLL的做法。每个DLL都是一个功能服务,但公用一个SVCHOST进程。省是省了,惹得病毒也上来了,并且失去了多进程的安全性优势。可惜可惜。 对比之下:用VB开发的程序员有几个会考虑资源啊效率啊什么的! Windows看起来有点像勒禁裤腰带请客的那种,自己弄得紧巴巴的,让上层软件随便吃! 不过,每个操作系统都这样。 呵呵! |
|
|
6楼#
发布于:2008-11-24 11:32
学到东西了,加油!谢谢提问的 asslittle 和解答的zmwk
|
|