是否可以从内核空间阻止任务?

时间:2011-10-08 06:11:21

标签: linux-kernel scheduling kernel

我想知道是否有办法阻止来自内核空间的用户空间任务?内核中是否已存在此功能?我试过看,但到目前为止没有发现任何明显的事情。

2 个答案:

答案 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,并设置状态。