自旋锁简介

您所在的位置:网站首页 旋转锁图片 自旋锁简介

自旋锁简介

2023-10-22 05:34| 来源: 网络整理| 查看: 265

自旋锁简介 项目 06/15/2023

旋转锁是内核定义的仅限内核模式的同步机制,以不透明类型导出:KSPIN_LOCK。 旋转锁可用于保护共享数据或资源免受共享数据或资源的同时访问,这些例程可以并发执行,并在 SMP 计算机中以 IRQL >= DISPATCH_LEVEL 执行。

许多组件使用旋转锁,包括驱动程序。 任何类型的驱动程序都可能使用一个或多个 执行旋转锁。 例如,大多数文件系统使用文件系统驱动程序 (FSD) 设备扩展中的互锁工作队列来存储由文件系统的工作线程回调例程和 FSD 处理的 IRP。 互锁工作队列受执行旋转锁的保护,该锁可解决 FSD 尝试将 IRP 插入队列和同时尝试删除 IRP 的任何线程之间的争用。 另举一例,系统软盘控制器驱动程序使用两个执行旋转锁。 一个执行旋转锁可保护与此驱动程序的设备专用线程共享的互锁工作队列;另一个保护由三个驱动程序例程共享的计时器对象。

Microsoft Windows XP 及更高版本的 Windows 驱动程序可以使用 KeAcquireInStackQueuedSpinLock 和 KeReleaseInStackQueuedSpinLock 获取并释放旋转 锁作为排队的旋转锁。 对于多处理器计算机上的高争用锁,排队的旋转锁比普通旋转锁的性能更好。 有关详细信息,请参阅 排队的旋转锁。 适用于 Windows 2000 的驱动程序可以使用 KeAcquireSpinLock 和 KeReleaseSpinLock 获取并释放作为普通旋转锁的旋转锁。

若要同步对简单数据结构的访问,驱动程序可以使用任何 ExInterlockedXxx 例程来确保对数据结构的原子访问。 使用这些例程的驱动程序不需要显式获取或释放旋转锁。

具有 ISR 的每个驱动程序都使用 中断旋转锁 来保护其 ISR 与其 SynchCritSection 例程之间共享的任何数据或硬件,这些例程通常从其 StartIo 和 DpcForIsr 例程中调用。 中断旋转锁与驱动程序调用 IoConnectInterrupt 时创建的中断对象集相关联,如注册 ISR 中所述。

在驱动程序中使用旋转锁时,请遵循以下准则:

为受旋转锁保护的任何数据或资源以及驻留系统空间内存 (非分页池中的相应旋转锁提供存储,如 虚拟内存空间和物理内存 图) 所示。 驱动程序必须为它使用的任何执行旋转锁提供存储。 但是,设备驱动程序不需要为中断旋转锁提供存储,除非它具有多向量 ISR 或具有多个 ISR,如注册 ISR 中所述。

调用 KeInitializeSpinLock 以初始化驱动程序为其提供存储的每个旋转锁,然后再使用它来同步对它所保护的共享数据或资源的访问。

调用在适当的 IRQL 处使用旋转锁的每个支持例程,对于



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3