【问题标题】:What does it mean by code holding semaphore can be preempted代码持有信号量可以被抢占是什么意思
【发布时间】:2019-04-07 03:46:38
【问题描述】:

我正在阅读 Robert Love Book,对这条线有点困惑。代码持有信号量可以被抢占是什么意思?

如果在访问用户空间应用程序在临界区执行代码时访问相同变量时发生中断,那么用户空间应用程序可以被抢占吗?

如果我的上述理解是正确的,那么当用户空间应用程序处于临界区时,除了自旋锁之外别无选择来禁用中断?

那么信号量在 OS 环境中的用途是什么?当用户应用程序处于临界区时,任何时候都可能发生中断,为了避免中断干预,我们需要一直使用自旋锁。

【问题讨论】:

  • 你的问题的问题是我们不知道上下文。什么样的信号量?内核可以实现一个信号量,这样持有它的进程就不能被抢占。或者它可以实现一个信号量,这样持有它的进程就不会被抢占。
  • 是的,但根据我的理解,我们无法实现在中断发生时无法被抢占的信号量?
  • 您可以阻止抢占作为获取信号量的一部分。这不正常,但可以做到。

标签: linux operating-system synchronization semaphore spinlock


【解决方案1】:

代码持有信号量可以被抢占是什么意思?
这意味着当前在其临界区运行的进程可以抢占为了同步而持有一些锁。理想情况下,中断具有最高 优先级,因此除非您禁用该处理器内核上的中断,否则正在运行的进程 可以被抢占,并且可能在进程处于其关键部分时发生。

虽然有多个 spin_lock_XXX api 可以禁用中断,但您可能希望使用 spin_lock_irqsave,因为它将中断标志保存在该内核上并在释放锁定时恢复它们。

【讨论】:

    猜你喜欢
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多