【问题标题】:Preemption during spin_lockspin_lock 期间的抢占
【发布时间】:2013-01-09 16:44:42
【问题描述】:

Linux 内核 spin_lock 实现通过调用 preempt_disable() 来禁用抢占。在我的内核配置中未设置 CONFIG_PREEMPT。由于在 spin_lock 中断处理程序期间未禁用中断,因此可以调用 schedule()。任何人都可以指出调度程序没有调度另一个进程的代码,因为它已经获得了一个 spin_lock。

【问题讨论】:

    标签: linux-kernel kernel


    【解决方案1】:

    中断处理程序不允许调用schedule()

    【讨论】:

    • 由于中断处理程序中不允许使用 schedule(),如何在 linux 内核中实现循环类型的调度。即谁经常调用调度程序。在 entry_32.S 中,它仅在定义了 CONFIG_PREEMPT 时才调用调度程序。
    • @user1428099:调度程序可能会在返回用户空间时被调用,包括如果内核是从用户空间进入服务中断的。
    猜你喜欢
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多