內(nèi)核搶占機制及驅(qū)動

內(nèi)核搶占機制及驅(qū)動

ID:6294362

大小:66.50 KB

頁數(shù):16頁

時間:2018-01-09

內(nèi)核搶占機制及驅(qū)動_第1頁
內(nèi)核搶占機制及驅(qū)動_第2頁
內(nèi)核搶占機制及驅(qū)動_第3頁
內(nèi)核搶占機制及驅(qū)動_第4頁
內(nèi)核搶占機制及驅(qū)動_第5頁
資源描述:

《內(nèi)核搶占機制及驅(qū)動》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、Linux內(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新的可搶占式內(nèi)核是指內(nèi)核搶占,即當(dāng)進程位于內(nèi)核空間時,有一個更高優(yōu)先級的任務(wù)出現(xiàn)時,如果當(dāng)前內(nèi)核允許搶占,則可以將當(dāng)前任務(wù)掛起,執(zhí)行優(yōu)先級更高的進程。在2.5.4版本之前,Linux內(nèi)

2、核是不可搶占的,高優(yōu)先級的進程不能中止正在內(nèi)核中運行的低優(yōu)先級的進程而搶占CPU運行。進程一旦處于核心態(tài)(例如用戶進程執(zhí)行系統(tǒng)調(diào)用),則除非進程自愿放棄CPU,否則該進程將一直運行下去,直至完成或退出內(nèi)核。與此相反,一個可搶占的Linux內(nèi)核可以讓Linux內(nèi)核如同用戶空間一樣允許被搶占。當(dāng)一個高優(yōu)先級的進程到達(dá)時,不管當(dāng)前進程處于用戶態(tài)還是核心態(tài),如果當(dāng)前允許搶占,可搶占內(nèi)核的Linux都會調(diào)度高優(yōu)先級的進程運行。2用戶搶占內(nèi)核即將返回用戶空間的時候,如果needresched標(biāo)志被設(shè)置,會導(dǎo)致schedule()被調(diào)用,此時就會發(fā)生用戶搶占。在內(nèi)核返回用戶空間的時候,它知道自己是安全的。

3、所以,內(nèi)核無論是在從中斷處理程序還是在系統(tǒng)調(diào)用后返回,都會檢查needresched標(biāo)志。如果它被設(shè)置了,那么,內(nèi)核會選擇一個其他(更合適的)進程投入運行。簡而言之,用戶搶占在以下情況時產(chǎn)生:從系統(tǒng)調(diào)返回用戶空間。從中斷處理程序返回用戶空間。3不可搶占內(nèi)核的特點在不支持內(nèi)核搶占的內(nèi)核中,內(nèi)核代碼可以一直執(zhí)行,到它完成為止。也就是說,調(diào)度程序沒有辦法在一個內(nèi)核級的任務(wù)正在執(zhí)行的時候重新調(diào)度—內(nèi)核中的各任務(wù)是協(xié)作方式調(diào)度的,不具備搶占性。內(nèi)核代碼一直要執(zhí)行到完成(返回用戶空間)或明顯的阻塞為止。在單CPU情況下,這樣的設(shè)定大大簡化了內(nèi)核的同步和保護機制??梢苑謨刹綄Υ思右苑治觯菏紫龋豢紤]進程在

4、內(nèi)核中自愿放棄CPU的情況(也即在內(nèi)核中不發(fā)生進程的切換)。一個進程一旦進入內(nèi)核就將一直運行下去,直到完成或退出內(nèi)核。在其沒有完成或退出內(nèi)核之前,不會有另外一個進程進入內(nèi)核,即進程在內(nèi)核中的執(zhí)行是串行的,不可能有多個進程同時在內(nèi)核中運行,這樣內(nèi)核代碼設(shè)計時就不用考慮多個進程同時執(zhí)行所帶來的并發(fā)問題。Linux的內(nèi)核開發(fā)人員就不用考慮復(fù)雜的進程并發(fā)執(zhí)行互斥訪問臨界資源的問題。當(dāng)進程在訪問、修改內(nèi)核的數(shù)據(jù)結(jié)構(gòu)時就不需要加鎖來防止多個進程同時進入臨界區(qū)。這時只需再考慮一下中斷的情況,若有中斷處理例程也有可能訪問進程正在訪問的數(shù)據(jù)結(jié)構(gòu),那么進程只要在進入臨界區(qū)前先進行關(guān)中斷操作,退出臨界區(qū)時進行開中

5、斷操作就可以了。再考慮一下進程自愿放棄CPU的情況。因為對CPU的放棄是自愿的、主動的,也就意味著進程在內(nèi)核中的切換是預(yù)先知道的,不會出現(xiàn)在不知道的情況下發(fā)生進程的切換。這樣就只需在發(fā)生進程切換的地方考慮一下多個進程同時執(zhí)行所可能帶來的并發(fā)問題,而不必在整個內(nèi)核范圍內(nèi)都要考慮進程并發(fā)執(zhí)行問題。4為什么需要內(nèi)核搶占?實現(xiàn)內(nèi)核的可搶占對Linux具有重要意義。首先,這是將Linux應(yīng)用于實時系統(tǒng)所必需的。實時系統(tǒng)對響應(yīng)時間有嚴(yán)格的限定,當(dāng)一個實時進程被實時設(shè)備的硬件中斷喚醒后,它應(yīng)在限定的時間內(nèi)被調(diào)度執(zhí)行。而Linux不能滿足這一要求,因為Linux的內(nèi)核是不可搶占的,不能確定系統(tǒng)在內(nèi)核中的停留

6、時間。事實上當(dāng)內(nèi)核執(zhí)行長的系統(tǒng)調(diào)用時,實時進程要等到內(nèi)核中運行的進程退出內(nèi)核才能被調(diào)度,由此產(chǎn)生的響應(yīng)延遲,在如今的硬件條件下,會長達(dá)100ms級。這對于那些要求高實時響應(yīng)的系統(tǒng)是不能接受的。而可搶占的內(nèi)核不僅對Linux的實時應(yīng)用至關(guān)重要,而且能解決Linux對多媒體(video,audio)等要求低延遲的應(yīng)用支持不夠好的缺陷。由于可搶占內(nèi)核的重要性,在Linux2.5.4版本發(fā)布時,可搶占被并入內(nèi)核,同SMP一樣作為內(nèi)核的一項標(biāo)準(zhǔn)可選配置。5什么情況不允許內(nèi)核搶占有幾種情況Linux內(nèi)核不應(yīng)該被搶占,除此之外Linux內(nèi)核在任意一點都可被搶占。這幾種情況是:2內(nèi)核正進行中斷處理。在Lin

7、ux內(nèi)核中進程不能搶占中斷(中斷只能被其他中斷中止、搶占,進程不能中止、搶占中斷),在中斷例程中不允許進行進程調(diào)度。進程調(diào)度函數(shù)schedule()會對此作出判斷,如果是在中斷中調(diào)用,會打印出錯信息。2內(nèi)核正在進行中斷上下文的BottomHalf(中斷的底半部)處理。硬件中斷返回前會執(zhí)行軟中斷,此時仍然處于中斷上下文中。2內(nèi)核的代碼段正持有spinlock自旋鎖、writelock/readlock讀寫鎖等鎖

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。