jerryq
驱动牛犊
驱动牛犊
  • 注册日期2004-12-28
  • 最后登录2007-09-11
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1344回复:1

弱问:驱动程序中的数据结构需要临界区/互斥量保护吗?

楼主#
更多 发布于:2007-09-07 10:38
驱动程序中有没有类似多线程的概念
如果前一个数据包的OnReceive没有处理完,后一个数据包又到了,系统会怎样处理?

同一个数据结构,可能要new或者delete
需要用互斥锁来保护吗?
zyxcn2002
驱动牛犊
驱动牛犊
  • 注册日期2007-06-13
  • 最后登录2009-07-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望18点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-13 09:41
有线程。
当两个线程共享可被同时访问的资源时,无论是单处理机还是SMP,同步是必须的。例如,对于一个单处理机,如果一个驱动程序正在访问一个共享资源时,被一个运行在更高IRQL(例如ISR)的函数中断时,必须保护共享资源以阻止这种争用的发生而使资源处于不确定状态。在一个SMP中,两个线程可以在同一时刻运行,在不同处理器上并且试图来修改同一数据的访问必须同步。

NDIS提供了自旋锁可以用来对在同一IRQL下运行的线程间访问共享资源实现同步。当两个线程在不同IRQL下访问共享资源时,NDIS提供了一种机制来临时升高低IRQL代码的IRQL,以使得访问共享资源串行化。

当一个线程依赖于一个外部事件的发生时,指示是必须的。例如,对于驱动程序,当经过一定周期后,必须指示它以使它可以检查它的驱动设备。或者一个NIC设备驱动程序要进行周期性的操作例如轮询,时钟提供了这种机质。

事件提供了一种两个执行的线程可进行同步操作的机质。例如,一个微端口驱动程序通过向设备写数据来测试NIC上的中断,它必须待等一种中断来指示驱动程序操作是成功的。事件可以在等待中断完成的线程与处理中断的线程之间进行同步操作。
游客

返回顶部