我「由羅伯特·愛的Linux內核開發第3版」,以獲取有關Linux內核是如何工作的總體思路閱讀。(2.6.2.3)Linux內核 - 等待隊列
我感到困惑如何等待隊列例如工作驗證碼:
/* ‘q’ is the wait queue we wish to sleep on */
DEFINE_WAIT(wait);
add_wait_queue(q, &wait);
while (!condition) { /* condition is the event that we are waiting for */
prepare_to_wait(&q, &wait, TASK_INTERRUPTIBLE);
if (signal_pending(current))
/* handle signal */
schedule();
}
finish_wait(&q, &wait);
我想知道哪些進程正在運行該代碼?它是一個內核線程?其處理時間是這樣的?
以及在循環,而病情依然沒有得到滿足,我們將繼續睡覺,並呼籲時間表運行另一個程序問題是當我們回到這個循環?
書中說,當一個進程睡眠,它是從我們的運行隊列中刪除,否則會被喚醒,並已經進入一個繁忙的循環......
- 還說:「睡覺應始終處理一個確保任務等待的條件確實已經發生的循環。「
我只是想在這篇循環運行的情況下知道的嗎?
對不起,如果這是一個愚蠢的問題。我只是無法看到的大圖
歡迎來到SO!偉大的第一個答案 –
謝謝,@BrianCain! –
這不是調度程序的一部分(您可以看到它是_calling_ schedule()),它正在將自己置於睡眠狀態。這是一個標準的代碼,等待一個wait_queue,直到滿足一個條件,這樣它的標準被封裝在wait_event()中。這比內核搶佔要早。 –