2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Linux內(nèi)核搶占實(shí)現(xiàn)機(jī)制分析內(nèi)核搶占實(shí)現(xiàn)機(jī)制分析【摘要】本文詳解了Linux內(nèi)核搶占實(shí)現(xiàn)機(jī)制。首先介紹了內(nèi)核搶占和用戶搶占的概念和區(qū)別,接著分析了不可搶占內(nèi)核的特點(diǎn)及實(shí)時(shí)系統(tǒng)中實(shí)現(xiàn)內(nèi)核搶占的必要性。然后分析了禁止內(nèi)核搶占的情況和內(nèi)核搶占的時(shí)機(jī),最后介紹了實(shí)現(xiàn)搶占內(nèi)核所做的改動(dòng)以及何時(shí)需要重新調(diào)度。【關(guān)鍵字】內(nèi)核搶占,用戶搶占,中斷,實(shí)時(shí)性,自旋鎖,搶占時(shí)機(jī),調(diào)度時(shí)機(jī),schedule,preemptcount1內(nèi)核搶占概述2.6新的可

2、搶占式內(nèi)核是指內(nèi)核搶占,即當(dāng)進(jìn)程位于內(nèi)核空間時(shí),有一個(gè)更高優(yōu)先級(jí)的任務(wù)出現(xiàn)時(shí),如果當(dāng)前內(nèi)核允許搶占,則可以將當(dāng)前任務(wù)掛起,執(zhí)行優(yōu)先級(jí)更高的進(jìn)程。在2.5.4版本之前,Linux內(nèi)核是不可搶占的,高優(yōu)先級(jí)的進(jìn)程不能中止正在內(nèi)核中運(yùn)行的低優(yōu)先級(jí)的進(jìn)程而搶占CPU運(yùn)行。進(jìn)程一旦處于核心態(tài)(例如用戶進(jìn)程執(zhí)行系統(tǒng)調(diào)用),則除非進(jìn)程自愿放棄CPU,否則該進(jìn)程將一直運(yùn)行下去,直至完成或退出內(nèi)核。與此相反,一個(gè)可搶占的Linux內(nèi)核可以讓Linux內(nèi)核

3、如同用戶空間一樣允許被搶占。當(dāng)一個(gè)高優(yōu)先級(jí)的進(jìn)程到達(dá)時(shí),不管當(dāng)前進(jìn)程處于用戶態(tài)還是核心態(tài),如果當(dāng)前允許搶占,可搶占內(nèi)核的Linux都會(huì)調(diào)度高優(yōu)先級(jí)的進(jìn)程運(yùn)行。2用戶搶占內(nèi)核即將返回用戶空間的時(shí)候,如果needresched標(biāo)志被設(shè)置,會(huì)導(dǎo)致schedule()被調(diào)用,此時(shí)就會(huì)發(fā)生用戶搶占。在內(nèi)核返回用戶空間的時(shí)候,它知道自己是安全的。所以,內(nèi)核無論是在從中斷處理程序還是在系統(tǒng)調(diào)用后返回,都會(huì)檢查needresched標(biāo)志。如果它被設(shè)置了

4、,那么,內(nèi)核會(huì)選擇一個(gè)其他(更合適的)進(jìn)程投入運(yùn)行。簡而言之,用戶搶占在以下情況時(shí)產(chǎn)生:從系統(tǒng)調(diào)返回用戶空間。從中斷處理程序返回用戶空間。3不可搶占內(nèi)核的特點(diǎn)在不支持內(nèi)核搶占的內(nèi)核中,內(nèi)核代碼可以一直執(zhí)行,到它完成為止。也就是說,調(diào)度程序沒有辦法在一個(gè)內(nèi)核級(jí)的任務(wù)正在執(zhí)行的時(shí)候重新調(diào)度—內(nèi)核中的各任務(wù)是協(xié)作方式調(diào)度的,不具備搶占性。內(nèi)核代碼一直要執(zhí)行到完成(返回用戶空間)或明顯的阻塞為止。在單CPU情況下,這樣的設(shè)定大大簡化了內(nèi)核的同步

5、和保護(hù)機(jī)制??梢苑謨刹綄?duì)此加以分析:首先,不考慮進(jìn)程在內(nèi)核中自愿放棄CPU的情況(也即在內(nèi)核中不發(fā)生進(jìn)程的切換)。一個(gè)進(jìn)程一旦進(jìn)入內(nèi)核就將一直運(yùn)行下去,直到完成或退出內(nèi)核。在其沒有完成或退出內(nèi)核之前,不會(huì)有另外一個(gè)進(jìn)程進(jìn)入內(nèi)核,即進(jìn)程在內(nèi)核中的執(zhí)行是串行的,不可能有多個(gè)進(jìn)程同時(shí)在內(nèi)核中運(yùn)行,這樣內(nèi)核代碼設(shè)計(jì)時(shí)就不用考慮多個(gè)進(jìn)程同時(shí)執(zhí)行所帶來的并發(fā)問題。Linux的內(nèi)核開發(fā)人員就不用考慮復(fù)雜的進(jìn)程并發(fā)執(zhí)行互斥訪問臨界資源的問題。當(dāng)進(jìn)程在訪

6、問、修改內(nèi)核的數(shù)據(jù)結(jié)構(gòu)時(shí)就不需要加鎖來防止多個(gè)進(jìn)程同時(shí)進(jìn)入臨界區(qū)。這時(shí)只需再考慮一下中斷的情況,若有中斷處理例程也有可能訪問進(jìn)程正在訪問的數(shù)據(jù)結(jié)構(gòu),那么進(jìn)程只要在進(jìn)入臨界區(qū)前先進(jìn)行關(guān)中斷操作,退出臨界區(qū)時(shí)進(jìn)行開中斷操作就可以了。從中斷返回內(nèi)核空間的時(shí)候,內(nèi)核會(huì)檢查need_resched和preempt_count的值。如果need_resched被設(shè)置,并且preemptcount為0的話,這說明可能有一個(gè)更為重要的任務(wù)需要執(zhí)行并且可

7、以安全地?fù)屨迹藭r(shí),調(diào)度程序就會(huì)被調(diào)用。如果preemptcount不為0,則說明內(nèi)核現(xiàn)在處干不可搶占狀態(tài),不能進(jìn)行重新調(diào)度。這時(shí),就會(huì)像通常那樣直接從中斷返回當(dāng)前執(zhí)行進(jìn)程。如果當(dāng)前進(jìn)程持有的所有的鎖都被釋放了,那么preempt_count就會(huì)重新為0。此時(shí),釋放鎖的代碼會(huì)檢查need_resched是否被設(shè)置。如果是的話,就會(huì)調(diào)用調(diào)度程序。6內(nèi)核搶占時(shí)機(jī)在2.6版的內(nèi)核中,內(nèi)核引入了搶占能力;現(xiàn)在,只要重新調(diào)度是安全的,那么內(nèi)核就可

8、以在任何時(shí)間搶占正在執(zhí)行的任務(wù)。那么,什么時(shí)候重新調(diào)度才是安全的呢?只要premptcount為0,內(nèi)核就可以進(jìn)行搶占。通常鎖和中斷是非搶占區(qū)域的標(biāo)志。由于內(nèi)核是支持SMP的,所以,如果沒有持有鎖,那么正在執(zhí)行的代碼就是可重新導(dǎo)人的,也就是可以搶占的。如果內(nèi)核中的進(jìn)程被阻塞了,或它顯式地調(diào)用了schedule(),內(nèi)核搶占也會(huì)顯式地發(fā)生。這種形式的內(nèi)核搶占從來都是受支持的(實(shí)際上是主動(dòng)讓出CPU),因?yàn)楦緹o需額外的邏輯來保證內(nèi)核可以安

9、全地被搶占。如果代碼顯式的調(diào)用了schedule(),那么它應(yīng)該清楚自己是可以安全地被搶占的。內(nèi)核搶占可能發(fā)生在:當(dāng)從中斷處理程序正在執(zhí)行,且返回內(nèi)核空間之前。當(dāng)內(nèi)核代碼再一次具有可搶占性的時(shí)候,如解鎖及使能軟中斷等。如果內(nèi)核中的任務(wù)顯式的調(diào)用schedule()如果內(nèi)核中的任務(wù)阻塞(這同樣也會(huì)導(dǎo)致調(diào)用schedule())7如何支持搶占內(nèi)核搶占式Linux內(nèi)核的修改主要有兩點(diǎn):一是對(duì)中斷的入口代碼和返回代碼進(jìn)行修改。在中斷的入口內(nèi)核搶

10、占鎖preempt_count加1,以禁止內(nèi)核搶占;在中斷的返回處,內(nèi)核搶占鎖preempt_count減1,使內(nèi)核有可能被搶占。我們說可搶占Linux內(nèi)核在內(nèi)核的任一點(diǎn)可被搶占,主要就是因?yàn)樵谌我庖稽c(diǎn)中斷都有可能發(fā)生,每當(dāng)中斷發(fā)生,Linux可搶占內(nèi)核在處理完中斷返回時(shí)都會(huì)進(jìn)行內(nèi)核的可搶占判斷。若內(nèi)核當(dāng)前所處狀態(tài)允許被搶占,內(nèi)核都會(huì)重新進(jìn)行調(diào)度選取高優(yōu)先級(jí)的進(jìn)程運(yùn)行。這一點(diǎn)是與非可搶占的內(nèi)核不一樣的。在非可搶占的Linux內(nèi)核中,從硬

11、件中斷返回時(shí),只有當(dāng)前被中斷進(jìn)程是用戶態(tài)進(jìn)程時(shí)才會(huì)重新調(diào)度,若當(dāng)前被中斷進(jìn)程是核心態(tài)進(jìn)程,則不進(jìn)行調(diào)度,而是恢復(fù)被中斷的進(jìn)程繼續(xù)運(yùn)行。另一基本修改是重新定義了自旋鎖、讀、寫鎖,在鎖操作時(shí)增加了對(duì)preemptcount變量的操作。在對(duì)這些鎖進(jìn)行加鎖操作時(shí)preemptcount變量加1,以禁止內(nèi)核搶占;在釋放鎖時(shí)preemptcount變量減1,并在內(nèi)核的搶占條件滿足且需要重新調(diào)度時(shí)進(jìn)行搶占調(diào)度。下面以spin_lock()spin_u

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論