調度程序:在可運行態進程之間分配有限處理器時間資源的內核子系統
多任務操作系統:同時並發地交互執行多個進程的操作系統
Linux提供了搶占式的多任務模式,對進程強制的掛起動作即搶占
進程可分為:I/O消耗型 和 處理器消耗型
I/O消耗型指進程的大多數時間用來提交I/O請求或等待I/O請求
處理器消費型進程把時間大多數用在執行代碼上,其調度策略往往是盡量降低它們的調度頻率,延長其運行時間
策略兩大矛盾中的平等:進程響應迅速(響應時間短)和最大系統利用率(高吞吐量)
Linux基於優先級的調度算法CFS:搶占時機取決於新的可運行程序消耗了多少處理器使用比
公平調度:每個進程都將能獲得1/n的處理器時間(n指可運行進程的數量)
時間記賬
:通過vruntime變量來記錄一個程序到底運行了多長時間以及他還應該再運行多久
進程選擇
:挑選一個具有最小vruntime的進程作為下一個運行進程
調度器入口
:函數schedule()
睡眠和喚醒
Linux完整地支持內核搶占,只要重新調度是安全的,它的內核可以在任何時間搶占正在執行的任務
由於內核支持SMP,只要進程沒有持有鎖,內核就可以搶占
內核搶占發生在:
中斷處理程序正在執行,且返回內核空間之前
內核代碼再一次具有可搶占性
內核中的任務顯式地調用schedule()
內核中的任務阻塞
Linux的兩種實時調度策略:SCHED_FIFO和SCHED_RR
普通的非實時調度:SCHED_NORMAL
Linux的實時調度提供了一種軟實時工作模式