阅读:1140回复:1
Tom.Cat仁兄,麻烦你再去看看那个79分的问题,里面小弟有问题请教
引用:
-------------------------------------------------------------------------------- 只有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] |
|
|
沙发#
发布于:2002-07-27 09:33
用户被禁言,该主题自动屏蔽! |
|