資源描述:
《嵌入式linux內(nèi)核開(kāi)發(fā)教程之深入分析linux內(nèi)核源碼-進(jìn)程調(diào)度》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、嵌入式Linux開(kāi)發(fā)教程之Linux內(nèi)核-進(jìn)程調(diào)度(2)Linux的調(diào)度程序-Schedule()3.1基本原理1.時(shí)間片輪轉(zhuǎn)調(diào)度算法2.優(yōu)先權(quán)調(diào)度算法3.多級(jí)反饋隊(duì)列調(diào)度4.實(shí)時(shí)調(diào)度3.2Linux進(jìn)程調(diào)度時(shí)機(jī)三個(gè)函數(shù)是如何協(xié)調(diào)工作的3.3進(jìn)程調(diào)度的依據(jù)3.4進(jìn)程可運(yùn)行程度的衡量3.1基本原理調(diào)度的實(shí)質(zhì)就是資源的分配。系統(tǒng)通過(guò)不同的調(diào)度算法(SchedulingAlgorithm)來(lái)實(shí)現(xiàn)這種資源的分配。通常來(lái)說(shuō),選擇什么樣的調(diào)度算法取決于的資源分配的策略(SchedulingPolicy),在這里只說(shuō)明與Linux調(diào)度相關(guān)的幾種算法及這些算法的原理。一個(gè)好的調(diào)度算法應(yīng)
2、當(dāng)考慮以下幾個(gè)方面:(1)公平:保證每個(gè)進(jìn)程得到合理的CPU時(shí)間。(2)高效:使CPU保持忙碌狀態(tài),即總是有進(jìn)程在CPU上運(yùn)行嵌入式Linux內(nèi)核開(kāi)發(fā)教程之Linux的調(diào)度程序-Schedule()(3)響應(yīng)時(shí)間:使交互用戶(hù)的響應(yīng)時(shí)間盡可能短。(4)周轉(zhuǎn)時(shí)間:使批處理用戶(hù)等待輸出的時(shí)間盡可能短。(5)吞吐量:使單位時(shí)間內(nèi)處理的進(jìn)程數(shù)量盡可能多。很顯然,這5個(gè)目標(biāo)不可能同時(shí)達(dá)到,所以,不同的操作系統(tǒng)會(huì)在這幾個(gè)方面中作出相應(yīng)的取舍,從而確定自己的調(diào)度算法,例如UNIX采用動(dòng)態(tài)優(yōu)先數(shù)調(diào)度、BSD采用多級(jí)反饋隊(duì)列調(diào)度、Windows采用搶先多任務(wù)調(diào)度等等。嵌入式Linux內(nèi)核開(kāi)
3、發(fā)教程下面來(lái)了解一下主要的調(diào)度算法及其基本原理:1.時(shí)間片輪轉(zhuǎn)調(diào)度算法時(shí)間片(TimeSlice)就是分配給進(jìn)程運(yùn)行的一段時(shí)間。在通常的輪轉(zhuǎn)法中,系統(tǒng)將所有的可運(yùn)行(即就緒)進(jìn)程按先來(lái)先服務(wù)的原則,排成一個(gè)隊(duì)列,每次調(diào)度時(shí)把CPU分配給隊(duì)首進(jìn)程,并令其執(zhí)行一個(gè)時(shí)間片。當(dāng)執(zhí)行的時(shí)間片用完時(shí),系統(tǒng)發(fā)出信號(hào),通知調(diào)度程序,調(diào)度程序便據(jù)此信號(hào)來(lái)停止該進(jìn)程的執(zhí)行,并將它送到運(yùn)行隊(duì)列的末尾,等待下一次執(zhí)行;然后,把處理機(jī)分配給就緒隊(duì)列中新的隊(duì)首進(jìn)程,同時(shí)也讓它執(zhí)行一個(gè)時(shí)間片。這樣就可以保證運(yùn)行隊(duì)列中的所有進(jìn)程,在一個(gè)給定的時(shí)間內(nèi),均能獲得一時(shí)間片的處理機(jī)執(zhí)行時(shí)間。嵌入式Linux內(nèi)
4、核開(kāi)發(fā)教程之1.時(shí)間片輪轉(zhuǎn)調(diào)度算法為了照顧到緊迫型進(jìn)程在進(jìn)入系統(tǒng)后便能獲得優(yōu)先處理,引入了最高優(yōu)先權(quán)調(diào)度算法。當(dāng)將該算法用于進(jìn)程調(diào)度時(shí),系統(tǒng)將把處理機(jī)分配給運(yùn)行隊(duì)列中優(yōu)先權(quán)最高的進(jìn)程,這時(shí),又可進(jìn)一步把該算法分成兩種方式:(1)非搶占式優(yōu)先權(quán)算法(又稱(chēng)不可剝奪調(diào)度:NonpreemptiveScheduling)在這種方式下,系統(tǒng)一旦將處理機(jī)(CPU)分配給運(yùn)行隊(duì)列中優(yōu)先權(quán)最高的進(jìn)程后,該進(jìn)程便一直執(zhí)行下去,直至完成;或因發(fā)生某事件使該進(jìn)程放棄處理機(jī)時(shí),系統(tǒng)方可將處理機(jī)分配給另一個(gè)優(yōu)先權(quán)高的進(jìn)程。這種調(diào)度算法主要用于批處理系統(tǒng)中,也可用于某些對(duì)實(shí)時(shí)性要求不嚴(yán)的實(shí)時(shí)系統(tǒng)中
5、。嵌入式Linux內(nèi)核開(kāi)發(fā)教程之2.優(yōu)先權(quán)調(diào)度算法(2)搶占式優(yōu)先權(quán)調(diào)度算法(又稱(chēng)可剝奪調(diào)度:PreemptiveScheduling)該算法的本質(zhì)就是系統(tǒng)中當(dāng)前運(yùn)行的進(jìn)程永遠(yuǎn)是可運(yùn)行進(jìn)程中優(yōu)先權(quán)最高的那個(gè)。在采用這種調(diào)度算法時(shí),每當(dāng)出現(xiàn)一新的可運(yùn)行進(jìn)程,就將它和當(dāng)前運(yùn)行進(jìn)程進(jìn)行優(yōu)先權(quán)比較,如果高于當(dāng)前進(jìn)程,將觸發(fā)進(jìn)程調(diào)度。這種方式的優(yōu)先權(quán)調(diào)度算法,能更好的滿足緊迫進(jìn)程的要求,故而常用于要求比較嚴(yán)格的實(shí)時(shí)系統(tǒng)中,以及對(duì)性能要求較高的批處理和分時(shí)系統(tǒng)中。Linux也采用這種調(diào)度算法。嵌入式Linux內(nèi)核開(kāi)發(fā)教程這是時(shí)下最時(shí)髦的一種調(diào)度算法。其本質(zhì)是:綜合了時(shí)間片輪轉(zhuǎn)調(diào)度和
6、搶占式優(yōu)先權(quán)調(diào)度的優(yōu)點(diǎn),即:優(yōu)先權(quán)高的進(jìn)程先運(yùn)行給定的時(shí)間片,相同優(yōu)先權(quán)的進(jìn)程輪流運(yùn)行給定的時(shí)間片。嵌入式Linux內(nèi)核開(kāi)發(fā)教程之3.多級(jí)反饋隊(duì)列調(diào)度最后我們來(lái)看一下實(shí)時(shí)系統(tǒng)中的調(diào)度。什么叫實(shí)時(shí)系統(tǒng),就是系統(tǒng)對(duì)外部事件有求必應(yīng)、盡快響應(yīng)。在實(shí)時(shí)系統(tǒng)中,廣泛采用搶占調(diào)度方式,特別是對(duì)于那些要求嚴(yán)格的實(shí)時(shí)系統(tǒng)。因?yàn)檫@種調(diào)度方式既具有較大的靈活性,又能獲得很小的調(diào)度延遲;但是這種調(diào)度方式也比較復(fù)雜。嵌入式Linux內(nèi)核開(kāi)發(fā)教程之4.實(shí)時(shí)調(diào)度Linux的調(diào)度程序是一個(gè)叫Schedule()的函數(shù),這個(gè)函數(shù)被調(diào)用的頻率很高,由它來(lái)決定是否要進(jìn)行進(jìn)程的切換,如果要切換的話,切換到哪
7、個(gè)進(jìn)程等等。我們先來(lái)看在什么情況下要執(zhí)行調(diào)度程序,我們把這種情況叫做調(diào)度時(shí)機(jī)。Linux調(diào)度時(shí)機(jī)主要有:1、進(jìn)程狀態(tài)轉(zhuǎn)換的時(shí)刻:進(jìn)程終止、進(jìn)程睡眠;2、當(dāng)前進(jìn)程的時(shí)間片用完時(shí)(current->counter=0);3、設(shè)備驅(qū)動(dòng)程序主動(dòng)調(diào)用schedule;嵌入式Linux內(nèi)核開(kāi)發(fā)教程之3.2Linux進(jìn)程調(diào)度時(shí)機(jī)4、進(jìn)程從中斷、異常及系統(tǒng)調(diào)用返回到用戶(hù)態(tài)時(shí);時(shí)機(jī)1,進(jìn)程要調(diào)用sleep()或exit()等函數(shù)進(jìn)行狀態(tài)轉(zhuǎn)換,這些函數(shù)會(huì)主動(dòng)調(diào)用調(diào)度程序進(jìn)行進(jìn)程調(diào)度;時(shí)機(jī)2,由于進(jìn)程的時(shí)間片是由時(shí)鐘中斷來(lái)更新的,因此,這種情況和時(shí)機(jī)4是一樣的