首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Linux CFS 調度器時間片機制:進程提前結束剩餘時間如何處理?

     編輯:程式設計綜合問答

Linux 現代調度器 (CFS, Completely Fair Scheduler) **不使用固定時間片**,而是基於虛擬運行時間 vruntime 實現「完全公平」。

核心機制

  • 每個進程擁有 vruntime,單位納秒,表示「已佔用 CPU 的虛擬時間」。
  • 紅黑樹按 vruntime 排序,最左節點 (最小 vruntime) 下一個獲得 CPU。
  • 時間片動態計算:timeslice = sched_latency * (weight / total_weight),權重由 nice 值決定。

進程提前結束 (睡眠/阻塞/退出)

  1. 進程主動放棄 CPU (調用 schedule())。
  2. 調度器立即選取紅黑樹最左節點運行,**不存在「剩餘時間」概念**—— CFS 是連續流式調度,非固定時隙輪轉。
  3. 已消耗的 vruntime 保留,下次入隊繼續累加。
  4. 被搶佔場景

    • 更高優先級進程就緒 (實時調度類 SCHED_FIFO/RR)。
    • 當前進程 vruntime 超過下一個進程太多 (觸發 resched_task)。
    • 時間片用盡:內核定時器中斷周期性檢查 need_resched 標誌。

    參考資料

    「剩下的時間片是繼續運行下一個進程還是計時器清零」—— 兩者都不是,CFS 沒有固定時間片,只有動態 vruntime 排隊。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved