linux系統(tǒng)的線程是內(nèi)核線程,所以linux系統(tǒng)的調(diào)度是基于線程而不是基于進程的
為了進行調(diào)度,linux系統(tǒng)將線程區(qū)分為三類:
實時先入先出
實時輪轉(zhuǎn)
分時
在系統(tǒng)內(nèi)部肘交,linux系統(tǒng)區(qū)分140個優(yōu)先級,實時線程的優(yōu)先級從0-99,0是最高優(yōu)先級忍坷,99是實時線程的最低優(yōu)先級,100-139是非實時線程優(yōu)先級
調(diào)整靜態(tài)優(yōu)先級:
linux系統(tǒng)給每個線程分配一個Nice值(優(yōu)先級調(diào)節(jié)值)熔脂,這個值決定線程的靜態(tài)優(yōu)先級.默認(rèn)值是0佩研,修改范圍是-20到+19;
調(diào)整動態(tài)優(yōu)先級:
獎勵互動進程霞揉,懲罰占用CPU進程旬薯,調(diào)整范圍是-5 --5之間
不同的優(yōu)先級被賦予不同的時間片長度,linux操作系統(tǒng)會賦予高優(yōu)先級的進程較長的時間片
linux調(diào)度算法使用一個重要的數(shù)據(jù)結(jié)構(gòu)
調(diào)度隊列:調(diào)度隊列中有兩個數(shù)組适秩,一個是活動的绊序,一個是過期失效的,這兩個分量都是指向數(shù)組的指針秽荞,每個數(shù)組都包含了140個鏈表頭骤公,每個鏈表具有不同的優(yōu)先級,鏈表頭指向給定優(yōu)先級的雙向進程鏈表
調(diào)度器從正在活動的數(shù)組中選擇優(yōu)先級最高的任務(wù)蚂会,如果這個時間片過期失效淋样,就把它移到過期失效的數(shù)組中。當(dāng)正在活動的數(shù)組中沒有其他任務(wù)了胁住,調(diào)度器交換指針趁猴,使得正在活動數(shù)組變?yōu)槭н^期數(shù)組刊咳,過期失效數(shù)組變?yōu)檎诨顒訑?shù)組
等待隊列:等待隊列的頭包含一個指向任務(wù)鏈表的指針和一個自旋鎖
調(diào)度器將可以運行的任務(wù)放入調(diào)度序列中,不可運行的任務(wù)和正在等待的IO操作放入等待隊列中