【问题标题】:Interrupt and spinlock中断和自旋锁
【发布时间】:2015-01-24 21:59:37
【问题描述】:

我知道我们在中断处理程序中获取spinlocks 时禁用了interrupts

我怀疑当spinlock 保存在process context 中并且在那一刻发生中断时会发生什么?

这种情况会发生吗?

根据我的理解,如果处理程序也尝试获取进程上下文中持有的相同lock,它将继续为该锁旋转。

那么我们在获取spinlock 时总是禁用中断吗?

【问题讨论】:

    标签: linux linux-kernel operating-system spinlock


    【解决方案1】:

    自旋是自旋锁的用途。

    当中断发生在另一个 CPU 上时,它只会旋转直到进程上下文锁被解锁。

    当中断发生在同一个 CPU 上时,它将永远旋转。这就是为什么在进程上下文中获取自旋锁时应该禁用中断,并且如果中断处理程序也使用相同的锁。

    (在中断上下文中获取自旋锁时通常不需要禁用中断,因为中断处理程序本身不能被中断。)

    【讨论】:

    • 当中断具有自旋锁时,可能会出现更高优先级的中断,并且更高优先级的中断请求该锁。所以在获取自旋锁时最好禁用中断?
    • 只有当你能证明没有(其他)中断占用相同的锁时,你才能避免禁用中断。
    • 中断可以互相抢占。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多