

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、Linux內(nèi)核搶占實現(xiàn)機制分析內(nèi)核搶占實現(xiàn)機制分析【摘要】本文詳解了Linux內(nèi)核搶占實現(xiàn)機制。首先介紹了內(nèi)核搶占和用戶搶占的概念和區(qū)別,接著分析了不可搶占內(nèi)核的特點及實時系統(tǒng)中實現(xiàn)內(nèi)核搶占的必要性。然后分析了禁止內(nèi)核搶占的情況和內(nèi)核搶占的時機,最后介紹了實現(xiàn)搶占內(nèi)核所做的改動以及何時需要重新調(diào)度。【關(guān)鍵字】內(nèi)核搶占,用戶搶占,中斷,實時性,自旋鎖,搶占時機,調(diào)度時機,schedule,preemptcount1內(nèi)核搶占概述2.6新的可
2、搶占式內(nèi)核是指內(nèi)核搶占,即當進程位于內(nèi)核空間時,有一個更高優(yōu)先級的任務出現(xiàn)時,如果當前內(nèi)核允許搶占,則可以將當前任務掛起,執(zhí)行優(yōu)先級更高的進程。在2.5.4版本之前,Linux內(nèi)核是不可搶占的,高優(yōu)先級的進程不能中止正在內(nèi)核中運行的低優(yōu)先級的進程而搶占CPU運行。進程一旦處于核心態(tài)(例如用戶進程執(zhí)行系統(tǒng)調(diào)用),則除非進程自愿放棄CPU,否則該進程將一直運行下去,直至完成或退出內(nèi)核。與此相反,一個可搶占的Linux內(nèi)核可以讓Linux內(nèi)核
3、如同用戶空間一樣允許被搶占。當一個高優(yōu)先級的進程到達時,不管當前進程處于用戶態(tài)還是核心態(tài),如果當前允許搶占,可搶占內(nèi)核的Linux都會調(diào)度高優(yōu)先級的進程運行。2用戶搶占內(nèi)核即將返回用戶空間的時候,如果needresched標志被設置,會導致schedule()被調(diào)用,此時就會發(fā)生用戶搶占。在內(nèi)核返回用戶空間的時候,它知道自己是安全的。所以,內(nèi)核無論是在從中斷處理程序還是在系統(tǒng)調(diào)用后返回,都會檢查needresched標志。如果它被設置了
4、,那么,內(nèi)核會選擇一個其他(更合適的)進程投入運行。簡而言之,用戶搶占在以下情況時產(chǎn)生:從系統(tǒng)調(diào)返回用戶空間。從中斷處理程序返回用戶空間。3不可搶占內(nèi)核的特點在不支持內(nèi)核搶占的內(nèi)核中,內(nèi)核代碼可以一直執(zhí)行,到它完成為止。也就是說,調(diào)度程序沒有辦法在一個內(nèi)核級的任務正在執(zhí)行的時候重新調(diào)度—內(nèi)核中的各任務是協(xié)作方式調(diào)度的,不具備搶占性。內(nèi)核代碼一直要執(zhí)行到完成(返回用戶空間)或明顯的阻塞為止。在單CPU情況下,這樣的設定大大簡化了內(nèi)核的同步
5、和保護機制??梢苑謨刹綄Υ思右苑治觯菏紫?,不考慮進程在內(nèi)核中自愿放棄CPU的情況(也即在內(nèi)核中不發(fā)生進同CPU上運行的進程并發(fā)執(zhí)行的正確性。當持有這些鎖時,內(nèi)核不應該被搶占,否則由于搶占將導致其他CPU長期不能獲得鎖而死等。內(nèi)核正在執(zhí)行調(diào)度程序Scheduler。搶占的原因就是為了進行新的調(diào)度,沒有理由將調(diào)度程序搶占掉再運行調(diào)度程序。內(nèi)核正在對每個CPU“私有”的數(shù)據(jù)結(jié)構(gòu)操作(PerCPUdatestructures)。在SMP中,對于
6、perCPU數(shù)據(jù)結(jié)構(gòu)未用spinlocks保護,因為這些數(shù)據(jù)結(jié)構(gòu)隱含地被保護了(不同的CPU有不一樣的perCPU數(shù)據(jù),其他CPU上運行的進程不會用到另一個CPU的perCPU數(shù)據(jù))。但是如果允許搶占,但一個進程被搶占后重新調(diào)度,有可能調(diào)度到其他的CPU上去,這時定義的PerCPU變量就會有問題,這時應禁搶占。為保證Linux內(nèi)核在以上情況下不會被搶占,搶占式內(nèi)核使用了一個變量preempt_count,稱為內(nèi)核搶占鎖。這一變量被設置在
7、進程的PCB結(jié)構(gòu)task_struct中。每當內(nèi)核要進入以上幾種狀態(tài)時,變量preempt_count就加1,指示內(nèi)核不允許搶占。每當內(nèi)核從以上幾種狀態(tài)退出時,變量preempt_count就減1,同時進行可搶占的判斷與調(diào)度。從中斷返回內(nèi)核空間的時候,內(nèi)核會檢查need_resched和preempt_count的值。如果need_resched被設置,并且preemptcount為0的話,這說明可能有一個更為重要的任務需要執(zhí)行并且可以
8、安全地搶占,此時,調(diào)度程序就會被調(diào)用。如果preemptcount不為0,則說明內(nèi)核現(xiàn)在處干不可搶占狀態(tài),不能進行重新調(diào)度。這時,就會像通常那樣直接從中斷返回當前執(zhí)行進程。如果當前進程持有的所有的鎖都被釋放了,那么preempt_count就會重新為0。此時,釋放鎖的代碼會檢查need_resched是否被設置。如果是的話,就會調(diào)用調(diào)度程序。6內(nèi)核搶占時機在2.6版的內(nèi)核中,內(nèi)核引入了搶占能力;現(xiàn)在,只要重新調(diào)度是安全的,那么內(nèi)核就可以
9、在任何時間搶占正在執(zhí)行的任務。那么,什么時候重新調(diào)度才是安全的呢?只要premptcount為0,內(nèi)核就可以進行搶占。通常鎖和中斷是非搶占區(qū)域的標志。由于內(nèi)核是支持SMP的,所以,如果沒有持有鎖,那么正在執(zhí)行的代碼就是可重新導人的,也就是可以搶占的。如果內(nèi)核中的進程被阻塞了,或它顯式地調(diào)用了schedule(),內(nèi)核搶占也會顯式地發(fā)生。這種形式的內(nèi)核搶占從來都是受支持的(實際上是主動讓出CPU),因為根本無需額外的邏輯來保證內(nèi)核可以安全
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)核搶占機制及驅(qū)動
- 基于ARM的嵌入式Linux可搶占內(nèi)核的設計與實現(xiàn).pdf
- LINUX內(nèi)核ROOTKIT的分析及實現(xiàn).pdf
- Linux內(nèi)核編譯機制分析以及優(yōu)化研究.pdf
- Wineserver機制在Linux內(nèi)核中實現(xiàn)的研究.pdf
- linux內(nèi)核和用戶空間通信機制分析--文件系統(tǒng)實現(xiàn)方式
- 內(nèi)核中斷,異常,搶占總結(jié)篇
- Linux內(nèi)核支持SMP并行機制的分析.pdf
- linux內(nèi)核
- 深入分析linux內(nèi)核鏈表
- linux內(nèi)核分析 - 網(wǎng)絡[五]網(wǎng)橋
- 深入分析 linux 內(nèi)核鏈表
- 基于Linux內(nèi)核的實時調(diào)度機制的研究和實現(xiàn).pdf
- 深入分析_linux_內(nèi)核鏈表
- 搶占式操作系統(tǒng)內(nèi)核驗證框架的設計和實現(xiàn).pdf
- linux內(nèi)核(kemel)版本
- linux內(nèi)核調(diào)度器分析及模擬.pdf
- Linux內(nèi)核分析及實時性改造.pdf
- ike協(xié)議在linux系統(tǒng)上實現(xiàn)的技術(shù)分析以及在2.6內(nèi)核上實現(xiàn)
- Linux操作系統(tǒng)內(nèi)核分析與研究.pdf
評論
0/150
提交評論