我想知道是否有办法阻止来自内核空间的用户空间任务?内核中是否已存在此功能?我试过看,但到目前为止没有发现任何明显的事情。
答案 0 :(得分:2)
在UP中,这很简单:将任务状态设置为TASK_INTERRUPTIBLE
并调用schedule()
。您可以稍后通过将其状态设置为TASK_RUNNING
来“恢复”它。
在SMP中,您必须确保该任务未在另一个CPU上运行。
答案 1 :(得分:1)
见:
http://lxr.linux.no/linux+v3.0.4/include/linux/sched.h#L242
250/*
251 * This serializes "schedule()" and also protects
252 * the run-queue from deletions/modifications (but
253 * _adding_ to the beginning of the run-queue has
254 * a separate lock).
255 */
256extern rwlock_t tasklist_lock;
257extern spinlock_t mmlist_lock;
258
所以我们知道这个锁用于同步访问以更新调度结构。要更改任务运行状态,请查看示例:
http://lxr.linux.no/linux+v3.0.4/kernel/signal.c#L1812
1769 read_lock(&tasklist_lock);
1809 __set_current_state(TASK_RUNNING);
1810 if (clear_code)
1811 current->exit_code = 0;
1812 read_unlock(&tasklist_lock
你只需要锁定/解锁tasklist_lock,并设置状态。