libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1244回复:19

讨论:非排队的IRP方式和系统排队IRP的方式

楼主#
更多 发布于:2003-03-31 08:42
在驱动中对IRP的处理方式,可以把IRP排队,应用程序线程接着往下执行,也可以不进行排队,当IRP完全处理完后,应用程序才往下执行,我的理解是这样的,但在具体的编程中采取哪种方式,我看书上说看设备的处理能力和驱动怎样设计,在这里我不太明白,大家讨论一下可以吗!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
petz
禁止发言
禁止发言
  • 注册日期2001-03-23
  • 最后登录2015-12-19
  • 粉丝0
  • 关注0
  • 积分-22276分
  • 威望15点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-31 09:22
用户被禁言,该主题自动屏蔽!
glqgglq
驱动小牛
驱动小牛
  • 注册日期2001-04-16
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望4点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-31 09:22
我的理解是这样的,上层软件如果使用的异步存取方式对驱动进行访问时,应用程序就不会等待驱动的结果,如果使用是同步方式的话就有可能等待影响结果返回
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-31 09:39
我的设备每次只能同时处理一个输入/输出操作,那么选择是同步还是异步呢??
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
petz
禁止发言
禁止发言
  • 注册日期2001-03-23
  • 最后登录2015-12-19
  • 粉丝0
  • 关注0
  • 积分-22276分
  • 威望15点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-31 09:46
用户被禁言,该主题自动屏蔽!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-31 09:50
好象只能选择异步吧,假如我选择同步,我的硬件每次只能处理一个IRP,而且处理速度很慢,那么我的应用程序发生阻塞,是不是导致效率很低,导致死机!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
petz
禁止发言
禁止发言
  • 注册日期2001-03-23
  • 最后登录2015-12-19
  • 粉丝0
  • 关注0
  • 积分-22276分
  • 威望15点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-03-31 09:52
用户被禁言,该主题自动屏蔽!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-31 09:55
我的板子是个ISA的,用到DMA,我看了很多的资料说,做DMA要异步的IRP,我觉得DMA的处理速度很快,况且,我的块很小,几K,我感觉用同步IRP也可以吧!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
petz
禁止发言
禁止发言
  • 注册日期2001-03-23
  • 最后登录2015-12-19
  • 粉丝0
  • 关注0
  • 积分-22276分
  • 威望15点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-03-31 10:08
用户被禁言,该主题自动屏蔽!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-03-31 10:33
最好还是用异步方式,也没什么麻烦的呀。
并且就算用同步方式,也要排队的。否则顶层的多个进程同时操作DMA就乱套了。当然,如果你每次只允许一个进程打开设备例外。

我理解DMA的执行过程是在硬件准备好后通过ISR和DPC通知应用程序发请求的,所以不存在乱套的问题!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
petz
禁止发言
禁止发言
  • 注册日期2001-03-23
  • 最后登录2015-12-19
  • 粉丝0
  • 关注0
  • 积分-22276分
  • 威望15点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-03-31 10:41
用户被禁言,该主题自动屏蔽!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-03-31 10:54
我不理解怎么用IRP去启动一次DMA???能启动硬件??
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
petz
禁止发言
禁止发言
  • 注册日期2001-03-23
  • 最后登录2015-12-19
  • 粉丝0
  • 关注0
  • 积分-22276分
  • 威望15点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-03-31 11:41
用户被禁言,该主题自动屏蔽!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-03-31 11:56
我知道你的意思,那样也能实现,但是我不知道那个怎样实现,我看了DS的一个关于PCI的DMA的例子,就是在IRP的例程中启动DMA,好象ISA的系统DMA不能这么做吧!能和你在网上聊聊吗?你的QQ是多少??
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
petz
禁止发言
禁止发言
  • 注册日期2001-03-23
  • 最后登录2015-12-19
  • 粉丝0
  • 关注0
  • 积分-22276分
  • 威望15点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-03-31 12:16
用户被禁言,该主题自动屏蔽!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-03-31 13:39
我是用DS写的,那本书是DDK的,DS的DMA模式好象改变了很多,不知道借鉴的意义大不大,你用DS做过DMA吗?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
petz
禁止发言
禁止发言
  • 注册日期2001-03-23
  • 最后登录2015-12-19
  • 粉丝0
  • 关注0
  • 积分-22276分
  • 威望15点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-03-31 14:19
用户被禁言,该主题自动屏蔽!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-03-31 14:21
谢谢,我找书,看看!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-03-31 15:14
我的意思是在IRP例程中启动DMA。


怎么在IRP中启动DMA?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
petz
禁止发言
禁止发言
  • 注册日期2001-03-23
  • 最后登录2015-12-19
  • 粉丝0
  • 关注0
  • 积分-22276分
  • 威望15点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-03-31 15:21
用户被禁言,该主题自动屏蔽!
游客

返回顶部