內(nèi)核搶占機(jī)制及驅(qū)動(dòng)

內(nèi)核搶占機(jī)制及驅(qū)動(dòng)

ID:6294362

大小:66.50 KB

頁(yè)數(shù):16頁(yè)

時(shí)間:2018-01-09

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

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

1、Linux內(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)度?!娟P(guān)鍵字】?jī)?nèi)核搶占,用戶搶占,中斷,實(shí)時(shí)性,自旋鎖,搶占時(shí)機(jī),調(diào)度時(shí)機(jī),schedule,preemptcount1內(nèi)核搶占概述2.6新的可搶占式內(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)

2、核是不可搶占的,高優(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)核如同用戶空間一樣允許被搶占。當(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í)候,它知道自己是安全的。

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

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

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

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

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

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

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

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