Spinlock在设备驱动程序中

时间:2010-11-09 14:38:34

标签: device-driver spinlock

任何人都可以解释在设备驱动程序中使用自旋锁的确切用法。 我很困惑,因为在许多中断处理程序例程中,我看到了自旋锁。 由于螺旋锁正忙着等待。它可以延迟其他中断.. 请尽可能列出我们可以使用spinlock的设备驱动程序的一些场景

我是这个领域的新手。你的帮助对我有所帮助。

1 个答案:

答案 0 :(得分:4)

Spinlocks用于高Irql场景,在这种情况下,您无法将量程提供给调度程序。

因此,例如,当您想要锁定某些数据结构(在中断之外)时,您将获得一个互斥锁。当其他人拥有互斥锁时,您的线程将被放入调度程序中的“等待”列表中,直到释放互斥锁。然后它接收互斥锁的所有权,访问它的所有其他线程在尝试获取互斥锁时都会进入休眠状态。

当你处于中断状态时,你不能这样做。你既没有线程上下文,也没有“无限期”推迟这个中断。但有时,您确实需要访问中断内的共享数据。当系统中存在多个CPU时,可以同时运行多个中断和线程。因此,您必须保护工作队列,共享对象等,以免它们被破坏。为此,您使用自旋锁。 因为策略是在自旋锁保护部分内做尽可能少的事情,所以你可以预期,只有几个周期才能在锁本身上旋转,直到它被所有者释放为止。

因此,从中获取的是,当您从中断访问共享数据时, 使用自旋锁,因为没有其他基元可以使用。

如上所述,始终只在非常短的时间内持有螺旋锁。