當前位置:編程學習大全網 - 源碼下載 - Linux 進程調度

Linux 進程調度

Linux的調度策略區分實時進程和普通進程,實時進程的調度策略是SCHED_FIFO和SCHED_RR,普通的,非實時進程的調度策略是SCHED_NORMAL(SCHED_OTHER)。

實時調度策略被實時調度器管理,普通調度策略被完全公平調度器來管理。實時進程的優先級要高於普通進程(nice越小優先級越高)。

SCHED_FIFO實現了壹種簡單的先入先出的調度算法,它不使用時間片,但支持搶占,只有優先級更高的SCHED_FIFO或者SCHED_RR進程才能搶占它,否則它會壹直執行下去,低優先級的進程不能搶占它,直到它受阻塞或自己主動釋放處理器。

SCHED_RR是帶有時間片的壹種實時輪流調度算法,當SCHED_RR進程耗盡它的時間片時,同壹優先級的其它實時進程被輪流調度,時間片只用來重新調用同壹優先級的進程,低優先級的進程決不能搶占SCHED_RR任務,即使它的時間片耗盡。SCHED_RR是帶時間片的SCHED_FIFO。

Linux的實時調度算法提供了壹種軟實時工作方式,軟實時的含義是盡力調度進程,盡力使進程在它的限定時間到來前運行,但內核不保證總能滿足這些進程的要求,相反,硬實時系統保證在壹定的條件下,可以滿足任何調度的要求。

SCHED_NORMAL使用完全公平調度算法(CFS),之前的算法直接將nice值對應時間片的長度,而在CFS中,nice值只作為進程獲取處理器運行比的權重,每個進程都有壹個權重,nice優先級越高,權重越大,表示應該運行更長的時間。Linux的實現中,每個進程都有壹個vruntime字段,vruntime是經過量化的進程運行時間,也就是實際運行時間除以權重,所以每個量化後的vruntime應該相等,這就體現了公平性。

CFS當然也支持搶占,但與實時調度算法不同,實時調度算法是根據優先級進行搶占,CFS是根據vruntime進行搶占,vruntime小就擁有優先被運行的權利。

為了計算時間片,CFS算法需要為完美多任務中的無限小調度周期設定近似值,這個近似值也稱作目標延遲,指每個可運行進程在目標延遲內都會調度壹次,如果進程數量太多,則時間粒度太小,所以約定時間片的默認最小粒度是1ms。

進程可以分為I/O消耗型和處理器消耗型,這兩種進程的調度策略應該不同,I/O消耗型應該更加實時,給對端的感覺是響應很快,同時它壹般又不會消耗太多的處理器,因而I/O消耗型需要調度頻繁。相對來說,處理器消耗型不需要特別實時,應該盡量降低它的調度頻度,延長其運行時間。

參考: linux內核分析——CFS(完全公平調度算法) - 壹路向北妳好 - 博客園

  • 上一篇:電商視頻軟件有哪些?
  • 下一篇:黑馬頂底指數源代碼
  • copyright 2024編程學習大全網