4.1多任務算法
多任務操做系統就是能同時併發地交互執行多個進程的操做系統。在單處理器機器上,這產生多個進程在同時運行的幻覺。在多處理器機器上,這會使多個進程在不一樣的處理機上真正同時、並行地運行。併發
多任務系統能夠劃分爲兩類:非搶佔式多任務和搶佔式多任務。優化
搶佔式的多任務模式:在此模式下,由調度程序來決定何時中止一個進程的運行,以便其餘進程可以獲得執行機會.這個強制的掛起動做就叫作搶佔。操作系統
非搶佔式多任務模式:除非進程本身主動中止運行,不然它會一直執行。blog
4.2 幾種不一樣的進程和評價標準接口
Linux 採用了兩種不一樣的優先級範圍。第一種是用nice 值,色的範圍是從-20 到+19,默認值爲0 :越大的nice 值意味着更低的優先級。nice值的-20~19恰好映射到100-139之間。進程
第二種範圍是實時優先級,其值是可配置的,默認狀況下它的變化範圍是從0 到99 (包括0和99 )。與nice 值意義相反,越高的實時優先級數值意味着進程優先級越高。原理
4.3策略配置
進程能夠被分爲I/O消耗型和處理器消耗型。因此對進程的響應作了優化(縮短響應時間),更傾向於優先調度I/O消耗型進程。程序
優先級 調度算站中最基本的一類就是基於優先級的調度。這是一種根據進程的價值和其對處理器時間的需求來對進程分級的想法。
時間片 Linux 系統是搶佔式的。當-個進程進入可運行態,它就被准許投入運行。在多數操做系統中,是否要將一個進程馬上投入運行(也就是搶佔當前進程),是徹底由進程優先級和是否有時間片決定的。而在Lint踐中使用新的CFS 調度器,其搶佔時機取決於新的可運行程序消耗了多少處理器使用比。
4.4 Linux 調度算法
調度器類;Unix 系統中的進程調度:進程優先級和時間片;公平調度:CFS 稱爲公平調度器是由於它確保給每一個進程公平的處理器使用比。
4.5 Linux 調度的實現
咱們如今能夠開始具體探索CFS 是如何得以實現的.其相關代碼位於文件kemel/sched_fair.c 中。咱們將特別關注其四個組成部分:時間記帳、進程選擇、調度器入口、睡眠和喚醒。
4.6 搶佔和上下文切換
上下文切換:也就是從一個可執行進程切換到另外一個可執行進程。
用戶搶佔:內核即將返回用戶空間的時候,若是need_resched 標誌被設置,會致使schedule()被調用,此時就會發生用戶搶佔。
內核搶佔會發生在如下四種狀況:
4.9 小結
進程調度程序是內核重要的組成部分,由於運行着的進程首先在使用計算機(至少在咱們大多數人看來)。然而,知足進程調度的各類須要毫不是垂手可得的,很難找到「一刀切」的算棒,既適合衆多的可運行進程,又具備可伸縮性,還能在調度週期和吞吐量之間求得平衡,同時還知足各類負載的需求。不過, Linux 內核的新CFS 調度程序儘可能知足了各個方面的需求,並以較完善的可伸縮性和新穎的方挫提供了最佳的解決方案。前面的章節覆蓋了進程管理的相關內容,本章則考察了進程調度所遵循的基本原理、具體實現、調度算能以及目前Linux 內核所使用的接口。