linux的任務排程機制是指系統在某個事件執行的特定指令或程式;每一個CPU都會有一個佇列來儲存處於「TASK_RUNNING」狀態的任務,任務排程就是從這些佇列中取出優先順序最高的任務作為下一個放入CPU執行的任務。
本教學操作環境:linux7.3系統、Dell G3電腦。
是指系統在某個時間執行的特定的命令或程式
在Linux中,每一個CPU都會有一個佇列來儲存處於TASK_RUNNING狀態的任務,而任務調度就是從這些佇列中取出優先順序最高的任務作為下一個放入CPU執行的任務。
任務的調度需要進過兩個過程:上下文切換和選擇演算法
上下文切換
從一個行程的上下文切換到另一個進程的上下文,因為其發生頻率很高,所以通常都是調度器效率高低的關鍵。
schedule()函數中呼叫了switch_to宏,這個宏實現了進程之間的真正切換,其程式碼存放於include/i386/system.h 。
switch_to巨集是用嵌入式匯編寫成的,較難理解。
switch_to()函數正常返回,堆疊上的返回位址是新進程的task_struct::thread::eip,即新進程上一次被掛起時設定的繼續運行的位置(上一次執行switch_to ()時的標號”1:”位置)。
至此轉入新進程的上下文中執行。這其中涉及wakeup,sleepon等函數來對進程進行睡眠與喚醒操作。
選擇演算法
Linux schedule()函數將遍歷就緒佇列中的所有進程,呼叫goodness()函數計算每一個進程的權值weight ,從中選擇權值最大的進程投入運作。 Linux的調度器主要實作在schedule()函數中。
調度步驟:
Schedule函數工作流程如下:
(1)清理目前執行中的進程
(2)選擇下一個要運行的進程(pick_next_task)
(3)設定新進程的運行環境
(4) 進程上下文切換
Linux 調度器將進程分為三類
進程調度是作業系統的核心功能。
調度器只是調度過程中的一部分,進程調度是非常複雜的過程,需要多個系統協同工作完成。
本文所關注的僅為調度器,它的主要工作是在所有RUNNING 進程中選擇最合適的一個。
作為一個通用作業系統,Linux 調度器將流程分為三類:
#互動式行程
此類行程有大量的人機交互,因此進程不斷地處於睡眠狀態,等待使用者輸入。典型的應用例如編輯器 vi。此類進程對系統回應時間需求比較高,否則使用者會覺得系統反應遲緩。
批次處理程序
此類進程不需要人機交互,在後台運行,需要佔用大量的系統資源。但是能夠忍受反應延遲。比如編譯器。
即時進程
即時對調度延遲的要求最高,這些進程往往執行非常重要的操作,要求立即回應並執行。例如視訊播放軟體或飛機飛行控制系統,很明顯這類程式不能容忍長時間的調度延遲,輕則影響電影放映效果,重則機毀人亡
推薦學習:Linux影片教學
以上是linux的任務調度機制是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!