我有一个进程 P 和一个内核线程 KT。我想将 P 的执行与 KT 同步。KT 基本上是一个事件处理程序。但我的要求是,如果 P 正在运行,KT 不应继续处理事件。所以我需要暂停 P 然后继续在 KT 中进行事件处理并恢复 P。所以我的问题是,从 KT 开始,我如何强制抢占 P ?为了稍后恢复,我可以使用wake_up_process()。
对于调度一个进程,常用的技巧是将状态设置为 TASK_INTERRUPTIBLE 并调用 schedule()。如果我保存了 P 的 task_struct 指针,然后从 KT 调度 P,我将 P 的状态(而不是当前)设置为 TASK_INTERRUPTIBLE 并调用 schedule ,它会起作用吗?这是一个黑客,它会工作吗?你看到我想念的任何干净的方式吗?
有什么信号我可以发送 P 要求它先发制人吗?