SharpShooter
驱动小牛
驱动小牛
  • 注册日期2002-04-07
  • 最后登录2013-07-05
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1140回复:1

Tom.Cat仁兄,麻烦你再去看看那个79分的问题,里面小弟有问题请教

楼主#
更多 发布于:2002-07-26 12:25
引用:
--------------------------------------------------------------------------------
只有StartIo写队列,用不用自旋锁无所谓。
这么简单的道理都不清楚。  
--------------------------------------------------------------------------------


Tom老大,多谢指点,不过还请再帮小弟分析分析。

情况是这样的:我现在有个驱动,它接受上层的DeviceIo操作,同时又在内核导出函数,让其它驱动从内核直接调用。对上层DeviceIo和内核调用,该驱动都是将数据稍加处理后调用IoCallDriver访问下层驱动,这里必须同步对下层驱动的访问。我的想法是将所有请求的数据写入队列(或链表),然后启动一个系统线程Pop数据进行处理(包括IoCallDriver)。我是在Dispatch中和内核调用中做Push动作(写队列),这时候同步出了问题。

请老大帮忙看看

1.我的想法是否合理?

2.是否有必要写StartIo Routine?

3.由于我Push入队列的东西不一定是Irp,不知IoStartPacket是否可以在我前面说的内核调用中处理不是Irp的东西?

4.当然,我可以对上层的调用使用IoStartPacket后在StartIo中做Push动作,这时我也必须同步StartIo和内核调用中的Push动作,这时候的同步和我之前做的内核Push和Dispatch中Push有无不同?是否也会出现问题?(如果可以的话,问题似乎就解决了)

5.另一个问题请教,对哥们gung说的,我感觉SpinLock不是用来互斥线程的,而且也做不到,甚至当一个CPU拥有SpinLock时,再去请求该Lock的拥有权,有时候是会出问题的,不知小弟的理解是否有理?

6.还是我之前强调过的,在Dispatch Routine中做Wait动作,是否会有问题?因为我觉得这里做Wait似乎会对用户态的动作有影响,不知老大对此有何看法?

P.S.
不过好像也应该有问题,同步StartIo和内核调用,自然也得Wait,在StartIo里可以做Wait吗?不可以的话该怎么办?

[编辑 -  7/26/02 by  TonyHuyan]
写驱动不如买足彩!!
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-07-27 09:33
用户被禁言,该主题自动屏蔽!
游客

返回顶部