【问题标题】:Enforce a code segment be atomic inside custom linux kernel system call在自定义 linux 内核系统调用中强制代码段是原子的
【发布时间】:2012-12-12 12:06:44
【问题描述】:

我一直在尝试实现一个给我带来问题的 linux system_call,我怀疑这是因为我的代码没有锁定(或者可能是抢占)。

我在一个非常频繁调用的函数中有一个关键部分(每次进行 system_call 时都会调用这个自定义函数),它也由 system_calls 启动/停止。有什么方法可以确保每次在 linux 内核中进行任何系统调用时都会发生的这个关键段是不可抢占的,并且必须在其他任何事情发生之前完成执行?

【问题讨论】:

    标签: c linux linux-kernel locking critical-section


    【解决方案1】:

    如果我正确理解了这个问题,最简单的方法是使用自旋锁:

    #include <linux/spinlock.h>
    
    static DEFINE_SPINLOCK(foo_lock);
    
    int my_system_call(...)
    {
            ...
            /* critical section starts */
            spin_lock(&foo_lock);
            /* critical section goes here */
            ...
            /* critical section ends */
            spin_unlock(&foo_lock);
            ...
    }
    

    这样的临界区是不可抢占的,临界区的并发执行不会重叠。

    【讨论】:

      猜你喜欢
      • 2015-05-05
      • 2014-01-27
      • 2011-11-16
      • 2019-08-04
      • 2020-01-17
      • 2020-04-04
      • 1970-01-01
      • 2010-09-20
      • 2017-06-13
      相关资源
      最近更新 更多