2011-10-08 69 views
1

我想知道是否有辦法阻止內核空間的用戶空間任務?內核中是否有這個功能?我試圖尋找,但迄今爲止沒有發現任何明顯的跡象。是否可以阻止來自內核空間的任務?

+0

這是什麼意思? –

+0

停止執行,以便稍後恢復。 –

回答

2

在UP中,這很簡單:將任務的狀態設置爲TASK_INTERRUPTIBLE,並調用schedule()。稍後可以通過將其狀態設置爲TASK_RUNNING來「恢復」它。

在SMP中,您必須確保任務未在另一個CPU上運行。

+0

好吧,在SMP中,我必須首先檢查它是否在CPU上運行,如果是,是否有辦法中斷任務,或者是否必須等待時間片完成? –

+0

您不必等待:您可以通過smp_call_function()使用處理器間中斷(IPI)(但請注意有關限制,請參閱http://lxr.linux.no/linux+v3.0.4/kernel /smp.c#L573) – Mircea

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,並設置狀態。

相關問題