【问题标题】:preventing process being scheduled防止进程被调度
【发布时间】:2011-11-17 05:47:19
【问题描述】:

我正在为 linux 创建一个内核模块。我想知道,我怎样才能阻止进程被安排在指定的时间? sched.c 中是否有可以执行此操作的函数?是否可以在某个定义的时间段内将特定的 task_struct 添加到等待队列中,或者对特定进程使用 schedule_timeout 之类的东西?

谢谢

【问题讨论】:

  • 是的,这是可能的。看看 linux 内核互斥锁代码是如何做到这一点的。 cs.fsu.edu/~baker/devices/lxr/http/source/linux/kernel/…
  • 我不确定 mutex.c 中那个函数的哪个部分完成了这个任务,我看不到一个函数需要一个 task_struct 和一个超时。如何将 task_struct 添加到等待队列?如果我能做到这一点,那么我可以对等待队列使用休眠功能并超时
  • 要让当前任务休眠吗?还是您希望一项任务强制另一项任务进入休眠状态?
  • 我觉得答案和这个问题一样:stackoverflow.com/questions/7695124/…

标签: linux-kernel kernel


【解决方案1】:

延迟进程调度一段时间,相当于让它休眠。在驱动程序中,这通常使用 msleep()(在工作任务中很常见)来完成,或者对于进程,通过将进程置于可中断的睡眠模式

set_current_state(TASK_INTERRUPTABLE);
schedule_timeout(x*HZ);

直到超时或收到信号,内核才会再次调度任务。

【讨论】:

    猜你喜欢
    • 2011-02-05
    • 2013-05-31
    • 2017-02-05
    • 2014-12-18
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    相关资源
    最近更新 更多