linux内核杂记(8)-进程调度(3)
1、紅黑樹存儲了系統中所有的可運行進程,節點的鍵值 是可運行進程的虛擬運行時間。
2、進程高度的主要 入口點是函數schedule(),定義在kernel/sched.c中。是內核其它部分用于調用進程調度器的入口:
(1)選擇哪個進程可以運行,何時將其投入運行。
(2)schedule()需要和一個具體的調度類相關聯
A.會找到一個最高優先級的調度類(有自己的可運行隊列),問該調度類誰才是下一個該運行的進程。
B.調用pick_next_task()(定義在kernel/sched.c),以優先級為序,從高到低,依次檢查每個調度類,并從最高優先級的調度類中,選擇最高優先級的進程。
C.核心是for循環,以優先級為序,從最高優先級工始,遍歷了每個進程調度類,每個調度類實現了pick_next_task函數 ,返回指向下一個可運行進程的指針 ,沒有時返回NULL。
3、進程睡眠:把自己標記成休眠狀態,從可執行紅黑樹中移出,放入等待隊列,調用schedul()選擇執行一個進程。
等待隊列由等待某些事件發生的進程組成的簡單鏈表,內核用wake_queue_head_t代表等待隊列。可通過DECLARE_WAITQUEUE()靜態創建,也可由init_waitqueue_head()動態創建。
4、喚醒通過函數wake_up()進行,會喚醒指定的等待隊列上的所有進程,調用函數try_to_wake_up(),該函數負責將進程設置為TASK_RUNNING狀態,調用enqueue_task()將此進程放入紅黑樹中。
哪段代碼造成了等待條件達成,就要負責隨后調用wake_up()
總結
以上是生活随笔為你收集整理的linux内核杂记(8)-进程调度(3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3精要(34)-import
- 下一篇: 学习Spring Boot:(十九)Sh