0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

搶占式內(nèi)核和非搶占式內(nèi)核的內(nèi)容

strongerHuang ? 來源:嵌入式專欄 ? 作者:嵌入式專欄 ? 2022-06-02 14:35 ? 次閱讀

操作系統(tǒng)分為搶占式內(nèi)核和非搶占式內(nèi)核,通常RTOS都是搶占式內(nèi)核。

下面就來講講搶占式內(nèi)核和非搶占式內(nèi)核的內(nèi)容。

非搶占式內(nèi)核

非搶占式內(nèi)核要求每個(gè)任務(wù)(線程)都做一些事情來明確放棄對(duì) CPU 的控制,為了保持多任務(wù)并發(fā)的錯(cuò)覺,必須要有這一步操作。

非搶占式調(diào)度也稱為協(xié)作多任務(wù),任務(wù)相互協(xié)作以共享 CPU,異步事件仍然由 ISR 處理。ISR 可以使更高優(yōu)先級(jí)的任務(wù)準(zhǔn)備好運(yùn)行,但 ISR 總是返回到被中斷的任務(wù)。

只有當(dāng)當(dāng)前任務(wù)放棄 CPU 時(shí),新的更高優(yōu)先級(jí)任務(wù)才會(huì)獲得對(duì) CPU 的控制。

非搶占式內(nèi)核的優(yōu)點(diǎn)之一是中斷延遲更低,在任務(wù)級(jí)別,非搶占內(nèi)核也可以使用不可重入函數(shù)。每個(gè)任務(wù)都可以使用不可重入函數(shù),而不必?fù)?dān)心被另一個(gè)任務(wù)破壞。這是因?yàn)槊總€(gè)任務(wù)都可以在放棄 CPU 之前運(yùn)行到完成。但是,不應(yīng)允許不可重入函數(shù)放棄對(duì) CPU 的控制。 使用非搶占式內(nèi)核的任務(wù)級(jí)響應(yīng)可能比前臺(tái)/后臺(tái)系統(tǒng)低得多,因?yàn)槿蝿?wù)級(jí)響應(yīng)現(xiàn)在由最長任務(wù)的時(shí)間給出。 非搶占式內(nèi)核的另一個(gè)優(yōu)點(diǎn)是較少需要通過使用信號(hào)量來保護(hù)共享數(shù)據(jù)。每個(gè)任務(wù)都擁有 CPU,你不必?fù)?dān)心任務(wù)會(huì)被搶占。當(dāng)然,這不是絕對(duì)的,在某些情況下,仍應(yīng)使用信號(hào)量。共享 I/O 設(shè)備可能仍需要使用互斥信號(hào)量;例如,任務(wù)可能仍需要對(duì)打印機(jī)的獨(dú)占訪問。

989ab51a-e22c-11ec-ba43-dac502259ad0.png

(1) 任務(wù)正在執(zhí)行但被中斷。 (2) 如果中斷被使能,CPU 向量(跳轉(zhuǎn))到 ISR。 (3) ISR 處理事件并使更高優(yōu)先級(jí)的任務(wù)準(zhǔn)備好運(yùn)行。 (4) ISR完成后,執(zhí)行返回指令,CPU返回被中斷的任務(wù)。 (5) 任務(wù)代碼在中斷指令之后的指令處恢復(fù)。 (6) 當(dāng)任務(wù)代碼完成時(shí),它調(diào)用內(nèi)核提供的服務(wù),將 CPU 交給另一個(gè)任務(wù)。 (7) 內(nèi)核看到更高優(yōu)先級(jí)的任務(wù)已經(jīng)準(zhǔn)備好運(yùn)行,因此,內(nèi)核執(zhí)行上下文切換,以便它可以運(yùn)行(即執(zhí)行)更高優(yōu)先級(jí)的任務(wù)來處理由 ISR 發(fā)出信號(hào)的事件。

非搶占式內(nèi)核最重要的缺點(diǎn)是響應(yīng)性:已準(zhǔn)備好運(yùn)行的較高優(yōu)先級(jí)任務(wù)可能需要等待很長時(shí)間才能運(yùn)行,因?yàn)楫?dāng)前任務(wù)應(yīng)該及時(shí)放棄CPU使用權(quán)。 與前臺(tái)/后臺(tái)系統(tǒng)中的后臺(tái)執(zhí)行一樣,非搶占式內(nèi)核中的任務(wù)級(jí)響應(yīng)時(shí)間是不確定的;你永遠(yuǎn)不知道最高優(yōu)先級(jí)的任務(wù)何時(shí)才能獲得 CPU 的控制權(quán)。這個(gè)操作由你的應(yīng)用程序來決定怎么時(shí)候放棄對(duì) CPU 的控制。 總而言之,非搶占式內(nèi)核允許每個(gè)任務(wù)運(yùn)行,直到它自愿放棄對(duì) CPU 的控制。中斷搶占任務(wù),ISR 完成后,ISR 返回到被中斷的任務(wù)。任務(wù)級(jí)響應(yīng)比前臺(tái)/后臺(tái)系統(tǒng)要好得多,但仍然是不確定的,因此,很少有商業(yè)內(nèi)核是非搶占式的。

搶占式內(nèi)核

μC/OS、RTT等大多數(shù)實(shí)時(shí)內(nèi)核都是搶占式的,準(zhǔn)備運(yùn)行的最高優(yōu)先級(jí)任務(wù)始終被賦予 CPU 控制權(quán)。

當(dāng)一個(gè)任務(wù)使更高優(yōu)先級(jí)的任務(wù)準(zhǔn)備好運(yùn)行時(shí),當(dāng)前任務(wù)被搶占(掛起)并且更高優(yōu)先級(jí)的任務(wù)立即獲得 CPU 的控制權(quán)。

如果 ISR 使更高優(yōu)先級(jí)的任務(wù)準(zhǔn)備就緒,當(dāng) ISR 完成時(shí),被中斷的任務(wù)被掛起并恢復(fù)新的更高優(yōu)先級(jí)任務(wù)。

98d6bc7c-e22c-11ec-ba43-dac502259ad0.png

(1) 任務(wù)正在執(zhí)行但被中斷。 (2) 如果中斷被使能,CPU 向量(跳轉(zhuǎn))到 ISR。 (3) ISR 處理事件并使更高優(yōu)先級(jí)的任務(wù)準(zhǔn)備好運(yùn)行。ISR 完成后,調(diào)用內(nèi)核提供的服務(wù)(即調(diào)用內(nèi)核提供的函數(shù))。 (4) & (5) 該函數(shù)知道一個(gè)更重要的任務(wù)已經(jīng)準(zhǔn)備好運(yùn)行,因此內(nèi)核將執(zhí)行上下文切換并執(zhí)行更重要的代碼而不是返回到被中斷的任務(wù)任務(wù)。當(dāng)更重要的任務(wù)完成時(shí),內(nèi)核提供的另一個(gè)函數(shù)被調(diào)用,讓任務(wù)進(jìn)入休眠狀態(tài),等待事件(即 ISR)發(fā)生。 (6) & (7) 然后內(nèi)核“看到”需要執(zhí)行一個(gè)較低優(yōu)先級(jí)的任務(wù),并完成另一個(gè)上下文切換以恢復(fù)被中斷任務(wù)的執(zhí)行。

使用搶占式內(nèi)核,最高優(yōu)先級(jí)任務(wù)的執(zhí)行是確定性的;你可以確定它何時(shí)可以控制 CPU。因此,通過使用搶占式內(nèi)核可以最大限度地減少任務(wù)級(jí)響應(yīng)時(shí)間。 使用搶占式內(nèi)核的應(yīng)用程序代碼不應(yīng)使用不可重入函數(shù),除非通過使用互斥信號(hào)量確保對(duì)這些函數(shù)的獨(dú)占訪問,因?yàn)榈蛢?yōu)先級(jí)和高優(yōu)先級(jí)任務(wù)都可以使用公共函數(shù)。如果較高優(yōu)先級(jí)的任務(wù)搶占正在使用該功能的較低優(yōu)先級(jí)的任務(wù),則可能會(huì)發(fā)生數(shù)據(jù)損壞。 總而言之,搶占式內(nèi)核始終執(zhí)行準(zhǔn)備運(yùn)行的最高優(yōu)先級(jí)任務(wù)。中斷搶占任務(wù),完成 ISR 后,內(nèi)核將繼續(xù)執(zhí)行準(zhǔn)備運(yùn)行的最高優(yōu)先級(jí)任務(wù)(而不是被中斷的任務(wù))。任務(wù)級(jí)別的響應(yīng)是最佳的和確定性的,當(dāng)系統(tǒng)響應(yīng)性很重要時(shí),建議使用搶占式內(nèi)核。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1337

    瀏覽量

    40085
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209448
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6547

    瀏覽量

    122759

原文標(biāo)題:操作系統(tǒng)搶占、非搶占式內(nèi)核的區(qū)別

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    新書發(fā)布——《RT-Thread嵌入實(shí)時(shí)操作系統(tǒng)內(nèi)核、驅(qū)動(dòng)和應(yīng)用開發(fā)技術(shù)》

    我們非常高興地宣布,由鄭苗秀、沈鴻飛和廖建尚編著的《RT-Thread嵌入實(shí)時(shí)操作系統(tǒng)內(nèi)核、驅(qū)動(dòng)和應(yīng)用開發(fā)技術(shù)》一書正式發(fā)布。本書的編寫團(tuán)隊(duì)由多位在嵌入和實(shí)時(shí)操作系統(tǒng)領(lǐng)域有著豐富經(jīng)驗(yàn)的專家組
    的頭像 發(fā)表于 09-03 08:06 ?198次閱讀
    新書發(fā)布——《RT-Thread嵌入<b class='flag-5'>式</b>實(shí)時(shí)操作系統(tǒng)<b class='flag-5'>內(nèi)核</b>、驅(qū)動(dòng)和應(yīng)用開發(fā)技術(shù)》

    學(xué)習(xí)hypervisor嵌入產(chǎn)品安全設(shè)計(jì)

    第一部分(第1~2章)介紹Hypervisor基礎(chǔ),涵蓋虛擬化技術(shù)與實(shí)現(xiàn)、主流的嵌入Hypervisor產(chǎn)品,以及基于分離內(nèi)核的嵌入Hypervisor等內(nèi)容。第二部分(第3~12
    發(fā)表于 08-25 09:11

    相同的代碼,不同的工程出現(xiàn)定時(shí)器搶占的現(xiàn)象怎么解決?

    如題,相同的代碼,不同的工程出現(xiàn)定時(shí)器搶占的現(xiàn)象,事情是這樣的 ?項(xiàng)目功能描述:emwin作為人機(jī)交互,根據(jù)界面的輸入值,8個(gè)TIM依次輸出驅(qū)動(dòng)電機(jī),驅(qū)動(dòng)方式為定時(shí)器中斷翻轉(zhuǎn)IO電平的方式
    發(fā)表于 05-15 08:27

    求助,關(guān)于stm32F4中斷優(yōu)先級(jí)0無法搶占的問題求解

    。 總結(jié)現(xiàn)象: 1)實(shí)驗(yàn)現(xiàn)象證明0優(yōu)先級(jí)確實(shí)無法被搶占,具有最高優(yōu)先級(jí)(因?yàn)橄扔|發(fā)有限級(jí)為0的中斷后,優(yōu)先級(jí)為1的沒能搶占) 2)0優(yōu)先級(jí)無法搶占其他優(yōu)先級(jí),無法形成中斷嵌套。(因?yàn)橄扔|發(fā)
    發(fā)表于 04-23 07:26

    嵌入實(shí)時(shí)操作系統(tǒng)優(yōu)先級(jí)搶占調(diào)度機(jī)制解析

    當(dāng)搶占發(fā)生時(shí),任務(wù)即使沒有完成也會(huì)被迫放棄處理器,此時(shí)任務(wù)并沒有被掛起,而是會(huì)返回就緒隊(duì)列。任務(wù)在隊(duì)列中的位置是由優(yōu)先級(jí)決定的,它會(huì)在隊(duì)列中等待到下一次被調(diào)度。
    的頭像 發(fā)表于 04-05 05:22 ?2392次閱讀
    嵌入<b class='flag-5'>式</b>實(shí)時(shí)操作系統(tǒng)優(yōu)先級(jí)<b class='flag-5'>搶占</b><b class='flag-5'>式</b>調(diào)度機(jī)制解析

    STM32F103的寄存器NVIC_IPRx搶占優(yōu)先級(jí)和子優(yōu)先級(jí)是怎么設(shè)置的?

    STM32F103的寄存器NVIC_IPRx有些不明白,搶占優(yōu)先級(jí)和子優(yōu)先級(jí)是怎么設(shè)置的? 如果,中斷分組2,搶占優(yōu)先級(jí)3,子優(yōu)先級(jí)3 那下面這樣寫對(duì)嗎? SCB->AIRCR|=0x05FA0500; NVIC->IP[1]|=11110000;
    發(fā)表于 03-27 07:48

    gd32vf103根據(jù)例子配置了systick和adc中斷,但是adc中斷無法搶占systick是為什么?

    根據(jù)例子配置了systick和adc中斷,但是adc中斷無法搶占systick 配置為向量和相量都沒有實(shí)現(xiàn)
    發(fā)表于 01-10 07:43

    智能集成:整合模擬元件和ARM微控制器內(nèi)核,解決棘手嵌入系統(tǒng)問題

    智能集成:整合模擬元件和ARM微控制器內(nèi)核,解決棘手嵌入系統(tǒng)問題
    的頭像 發(fā)表于 01-05 18:18 ?579次閱讀
    智能集成:整合模擬元件和ARM微控制器<b class='flag-5'>內(nèi)核</b>,解決棘手嵌入<b class='flag-5'>式</b>系統(tǒng)問題

    基于嵌入Linux內(nèi)核的Android操作系統(tǒng)智能移動(dòng)終端

    電子發(fā)燒友網(wǎng)站提供《基于嵌入Linux內(nèi)核的Android操作系統(tǒng)智能移動(dòng)終端.pdf》資料免費(fèi)下載
    發(fā)表于 11-06 10:07 ?0次下載
    基于嵌入<b class='flag-5'>式</b>Linux<b class='flag-5'>內(nèi)核</b>的Android操作系統(tǒng)智能移動(dòng)終端

    電機(jī)應(yīng)用中切換ADC搶占組通道導(dǎo)致普通組轉(zhuǎn)換錯(cuò)序

    電機(jī)應(yīng)用中切換ADC搶占組通道導(dǎo)致普通組轉(zhuǎn)換錯(cuò)序
    發(fā)表于 10-19 07:03

    ADC反復(fù)模式下切換搶占組通道導(dǎo)致普通組轉(zhuǎn)換錯(cuò)序

    ADC 控制器內(nèi)部劃分有 2 個(gè)時(shí)鐘域(PCLK 與 ADCCLK),每個(gè)時(shí)鐘域中有各自的狀態(tài)機(jī),這兩狀態(tài)機(jī)之間有相互的控制,會(huì)涉及到信號(hào)之間穿頻。原本更新通道會(huì)結(jié)束正在轉(zhuǎn)換的普通組以及搶占組,并按
    發(fā)表于 10-19 06:45

    基于ARM Linux和S3C2440的嵌入Linux內(nèi)核設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于ARM Linux和S3C2440的嵌入Linux內(nèi)核設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-12 10:37 ?2次下載
    基于ARM Linux和S3C2440的嵌入<b class='flag-5'>式</b>Linux<b class='flag-5'>內(nèi)核</b>設(shè)計(jì)

    基于ARM9內(nèi)核的嵌入檢測(cè)系統(tǒng)設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于ARM9內(nèi)核的嵌入檢測(cè)系統(tǒng)設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-12 09:48 ?0次下載
    基于ARM9<b class='flag-5'>內(nèi)核</b>的嵌入<b class='flag-5'>式</b>檢測(cè)系統(tǒng)設(shè)計(jì)

    CLINT中斷控制器優(yōu)先級(jí)和搶占

    內(nèi)核本地中斷(CLINT) 下圖為CLINT示意圖,CLINT通過固定的中斷號(hào)和優(yōu)先級(jí),可將軟件中斷或定時(shí)器中斷直接發(fā)送給指定的hart,該過程沒有仲裁。 CLINT 占地面積小,可直接向 hart
    的頭像 發(fā)表于 10-08 09:30 ?599次閱讀
    CLINT中斷控制器優(yōu)先級(jí)和<b class='flag-5'>搶占</b>

    什么是SysRq 內(nèi)核配置選項(xiàng)

    Linux內(nèi)核提供了一些與用戶空間的通信機(jī)制,例如 procfs 接口和 sysfs 接口,大部分的這些接口都可以作為獲取內(nèi)核信息的手段。 但除了這些接口,內(nèi)核也提供了專門的調(diào)試機(jī)制——系統(tǒng)請(qǐng)求鍵
    的頭像 發(fā)表于 09-26 16:42 ?640次閱讀