Linux內(nèi)核學(xué)習(xí)012——進程調(diào)度(一)
進程是程序運行態(tài)的表現(xiàn)形式镐确,而確保進程有效工作的是一個內(nèi)核子系統(tǒng)——調(diào)度程序摸屠。調(diào)度程序負責(zé)決定將哪個進程投入運行论悴,何時運行以及運行多長時間移层。進程調(diào)度程序可以視為可運行態(tài)進程之間分配有限處理器時間資源的內(nèi)核子系統(tǒng)漠酿。調(diào)度程序是多任務(wù)操作系統(tǒng)的基礎(chǔ)拐袜,只有通過調(diào)度程序的合理調(diào)度吉嚣,系統(tǒng)資源才能最大限度發(fā)揮作用。
多任務(wù)
多任務(wù)操作系統(tǒng)是能同時并發(fā)地加交互執(zhí)行多個進程的操作系統(tǒng)蹬铺。無論是單處理器或者多處理器上尝哆,多任務(wù)操作系統(tǒng)都能使多個進程處于堵塞或者睡眠狀態(tài)。處于這種狀態(tài)的進程甜攀,并未真正運行秋泄,而是在等待某些事件發(fā)生(比如:鍵盤輸入、網(wǎng)絡(luò)數(shù)據(jù)规阀、文件I/O等)恒序。
進程調(diào)度可以發(fā)生在四種環(huán)境下:
- 當(dāng)一個進程從運行狀態(tài)切換到等待狀態(tài)
- 當(dāng)一個進程從運行狀態(tài)切換到就緒狀態(tài)
- 當(dāng)一個進程從等待狀態(tài)切換到就緒狀態(tài)
- 當(dāng)一個進程終止時
若調(diào)度只能發(fā)生在1、4時谁撼,稱為非搶占式調(diào)度歧胁,否則為搶占式調(diào)度。Linux支持搶占式調(diào)度厉碟,由調(diào)度程序來決定何時停止一個進程的運行喊巍,以便其他進程能夠得到執(zhí)行機會。這個強制的掛起動作稱為搶占箍鼓。進程每次運行都被分配了一個固定的時間段崭参,稱為進程的時間片——即分配給每個可運行進程的處理器時間段。有效管理時間片能夠使得調(diào)度程序從全局角度做出決定款咖,并且可以避免陷入死循環(huán)的進程獨占整個系統(tǒng)資源≌篝幔現(xiàn)代操作系統(tǒng)對程序運行采用了動態(tài)時間片計算的方式逢并,并且引入了可配置的計算策略。
在非搶占式調(diào)度的情況下郭卫,除非進程主動停止,否則會一直運行背稼。進程主動掛起自己的操作稱為讓步贰军。但是該機制存在很多缺點:調(diào)度程序無法規(guī)定每個進程的運行時間,以及陷入死循環(huán)的進程會導(dǎo)致系統(tǒng)崩潰蟹肘。