2011-04-22 65 views
6

大家好,我對Linux中的任務有一些疑問,我知道當前處於TASK_RUNNING狀態的所有任務都處於名爲runqueue的數據結構中,但是等待某個事件的任務(非TASK_RUNNING的狀態,例如一個正在等待鍵盤輸入的例子)。我是否還有其他數據結構用於這些任務或僅有一般的list of tasks?在此先感謝您的任何解釋哪裏的內核存儲進程沒有運行?

回答

2

TASK_INTERRUPTIBLETASK_UNINTERRUPTIBLE狀態中的進程會進一步細分爲不同的類,其中每個類都對應於特定的事件。在這種狀態下,進程狀態不能提供足夠的信息來快速檢索進程描述符,因此使用另一個名爲wait_queue的進程列表。 Wait_queue實現對事件的條件等待。等待特定事件的進程被放置在正確的等待隊列中。

等待隊列被實現爲循環列表,其元素包括指向進程 描述符的指針。一個等待隊列列表中的每個元素的類型wait_queue的:

struct wait_queue { 
    struct task_struct * task; 
    struct wait_queue * next; 
}; 
0

等待隊列用於使過程等待到發生特定事件 - 諸如來自鍵盤等待輸入。