日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

無MMU搶占式操作系統(tǒng)的搶占工作原理介紹

strongerHuang ? 來源: strongerHuang ? 作者: strongerHuang ? 2020-11-03 16:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

線程基礎(chǔ)原理

線程之間搶占

中斷搶占線程

中斷搶占中斷

strongerHuang

1

運行多個線程

1.單核“單線程”

嚴格來說,單核處理器一次只能執(zhí)行一條指令,也就是說只能“單線程”。(當然,多核處理器就不一樣)

為了在單核處理器上運行多個線程,我們實際上需要定期在線程之間進行快速切換,以便用戶感覺多個線程在并行運行。

比如處理器執(zhí)行兩個線程,處理器實際在兩個線程之間來回切換,如下圖:

2.處理器在線程之間切換,它是如何做到的?

我們說的單核處理器是“單線程”的,它有一組寄存器,我們就叫這組寄存器屬于一個“線程”。

例如,計算兩個數(shù)字的總和時:

//假設(shè)我們有兩個整數(shù):a和bint c = a + b ;

實際發(fā)生的情況如下所示(當然,它取決于的MCU類型,但總體思路是相同):

# MIPS反匯編: LW V0, -32744(GP) # "a" 的值從RAM加載到寄存器V0LW V1, -32740(GP) # 值"b" 從RAM加載到寄存器V1ADDU V0, V1, V0 # a、b值相加,結(jié)果保存到寄存器V0中SW V0, -32496(GP) # 寄存器V0的值存儲在RAM中(變量c所在的位置)

你會發(fā)現(xiàn)上面執(zhí)行了4個動作,但是搶占式操作系統(tǒng)可以在任何時候搶占另一個線程,包括在這4個動作之間。

假如在這過程中有其他線程搶占了,其他線程同樣搶占了當前線程V0、 V1,如果不對V0、 V1進行保存,那么下次回來執(zhí)行當前線程,結(jié)果就會出錯。

所以,針對當前這種問題,我們就需要在切換線程之前,對V0、 V1的數(shù)值進行保存,當下次切換到當前線程,再恢復V0、 V1的數(shù)值,大致流程如下:

大概意思就是:當我們需要從一個線程切換到另一個線程時,內(nèi)核獲得控制權(quán),執(zhí)行必要的內(nèi)務(wù)處理(至少要保存和恢復寄存器值),然后將控制權(quán)轉(zhuǎn)移到下一個線程以運行。

strongerHuang

2

線程的堆棧

上面說的搶占位置,到底在哪里,每個線程保存在哪個寄存器值中?這就是線程的堆棧的內(nèi)容。 在有MMU的操作系統(tǒng)中,(用戶的)線程堆??梢园葱鑴討B(tài)增長:線程需要的堆??臻g越多,線程堆棧就越多(如果內(nèi)核允許)。 但是,我們一般的MCU卻沒有MMU這個“高端”的東西,所有RAM都靜態(tài)映射到地址空間。因此,每個線程都會有用于堆棧的RAM空間,如果線程使用的RAM超過堆棧的數(shù)量,則會導致內(nèi)存溢出或細微的錯誤。(實際上,每個線程的堆??臻g只是一連續(xù)數(shù)組空間)。 因此,當我們決定為每個線程分配多少堆棧時,我們只是估計可能需要多少堆棧,但是具體多少可能不是很清楚。 比如,如果這是一個具有多層嵌套調(diào)用的GUI線程,則可能需要數(shù)個千字節(jié),但如果它是一個流水燈的小線程,則可能幾十字節(jié)就足夠了。 假設(shè)我們有三個線程,它們的堆棧消耗如下:

如上面所述,每個線程的寄存器值都保存在線程的堆棧中。線程的寄存器值集稱為線程的“上下文”。如下圖所示(線程A為在正在執(zhí)行的“活動線程”):

請注意,在正在執(zhí)行的線程A的上下文沒有保存在堆棧中,堆棧指針指向線程A用戶數(shù)據(jù)的頂部,并且當前處理器的寄存器專用于線程A。 當內(nèi)核決定將控制權(quán)切換到線程B時,它將執(zhí)行以下操作:

將所有寄存器值保存到堆棧中(保存到線程A堆棧的頂部);

將堆棧指針切換到線程B的堆棧頂部;

從堆棧(從線程B的堆棧頂部)恢復所有寄存器值;

此時,你會看到:

strongerHuang

3

中斷(ISR)搶占

上面在執(zhí)行過程中,或進行上下文切換時,還可能會涉及到一個非常重要的內(nèi)容:中斷。 MCU通常具有外設(shè):TIM、UART、 SPI、 CAN等,它們隨時都能發(fā)生重要事件以觸發(fā)中斷。 中斷條件是當當前正在執(zhí)行的線程暫停時,處理器在一段時間內(nèi)執(zhí)行其他操作(Handles Interrupt),然后返回。中斷可能隨時觸發(fā),我們應該做好處理的準備。 中斷處理程序稱為ISR(中斷服務(wù)程序):中斷可能具有不同的優(yōu)先級,例如,如果觸發(fā)了一些低優(yōu)先級的中斷,則當前正在執(zhí)行的線程將暫停,并且ISR會獲得控制權(quán)。然后,如果觸發(fā)了某個高優(yōu)先級中斷,則當前正在執(zhí)行的ISR將再次暫停,并為該高優(yōu)先級中斷運行一個新的ISR。 這樣一來,完成后,控制權(quán)將返回到第一個ISR,并且在完成時,也會恢復被中斷的線程。 重要的關(guān)鍵代碼:在線程活躍過程中,如果有重要的事情“關(guān)鍵的代碼”,在這過程中如果中斷發(fā)生,很容易導致意想不到的結(jié)果。 這部分關(guān)鍵的代碼,我們需要要保護起來,通常我們的做法就是:在之前“關(guān)鍵代碼”之前禁用全局中斷,執(zhí)行完之后,開始全局中斷。 有點需要注意:關(guān)閉全局中斷,此時就不會相應中斷,所以,“關(guān)鍵代碼”不能太長。

strongerHuang

3

中斷堆棧

在上面說到一點,高優(yōu)先級中斷搶占低優(yōu)先中斷,就會出現(xiàn)一個問題:低優(yōu)先級的代碼需要和線程一樣,用于保存數(shù)據(jù)的堆棧。 一般有兩種方法:

使用被中斷的線程堆棧;

為中斷使用單獨的堆??臻g;

1.使用被中斷的線程堆棧如果使用被中斷的線程堆棧,就類似如下圖:

這種情況存在你一個嚴重的問題,你知道是什么嗎? 頻繁中斷,或者中斷較多,線程自身的堆棧空間就會很快被使用完。 每個線程的堆棧都應該包含以下內(nèi)容:

線程自己的數(shù)據(jù);

線程的上下文;

用于執(zhí)行最壞情況的ISR的數(shù)據(jù)。

因此,我們就需要換一種方法,為為所有ISR中斷開辟單獨的堆??臻g。 2.為中斷使用單獨的堆??臻g

為中斷使用單獨的堆??臻g大致如上圖所示。 好了,本文講述了上面幾種關(guān)于搶占,以及相關(guān)的內(nèi)容,你學會了幾點,又有幾點沒懂,歡迎留言討論。

責任編輯:xj

原文標題:無MMU搶占式操作系統(tǒng)的搶占工作原理

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

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

    關(guān)注

    37

    文章

    7444

    瀏覽量

    129649
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    510

    瀏覽量

    20876
  • MMU
    MMU
    +關(guān)注

    關(guān)注

    0

    文章

    92

    瀏覽量

    19293

原文標題:無MMU搶占式操作系統(tǒng)的搶占工作原理

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    兆芯全系列CPU深度適配統(tǒng)信桌面操作系統(tǒng)V25

    這款號稱國內(nèi)操作系統(tǒng)里程碑版本的統(tǒng)信桌面操作系統(tǒng)V25在智能化、高效性、可靠性三個維度實現(xiàn)了突破,推動國內(nèi)操作系統(tǒng)從“可用”全面邁向“成熟與智能”的發(fā)展新階段。V25桌面
    的頭像 發(fā)表于 04-15 18:03 ?1017次閱讀

    PB332在PB331基礎(chǔ)上增加了搶占避讓和按優(yōu)先級隊列上 傳功能,并可以完全并網(wǎng)PB331系統(tǒng)進行透傳通訊

    PB332是POWERBUS-C 技術(shù)的從站通訊芯片。PB332在PB331基礎(chǔ)上增加了搶占避讓和按優(yōu)先級隊列上傳功能,并可以完全并網(wǎng)PB331系統(tǒng)進行透傳通訊。POWERBUS-C屬于低壓供電總線
    發(fā)表于 01-30 13:03

    一種新型直流二總線供電+通訊=搶占通訊方式

    POWERBUS二總線是一種可供電現(xiàn)場總線,不同于4根線的485通信,可實現(xiàn)無極性二總線自由拓撲,如下圖: 早些年,我們與RS485一樣只能輪詢通訊,低效! 但PB332與EV621一系列產(chǎn)品的面試,可以保留以往優(yōu)點的同時,實現(xiàn)搶占通訊!手冊已發(fā),歡迎各位與我交流疑惑
    發(fā)表于 01-30 12:59

    操作系統(tǒng)體系結(jié)構(gòu)

    操作系統(tǒng)的體系結(jié)構(gòu)是一個開放的問題。正如上文所述,操作系統(tǒng)在核心態(tài)為應用程序提供公共的服務(wù),那么操作系統(tǒng)在核心態(tài)應該提供什么服務(wù)、怎樣提供服務(wù)?有關(guān)這個問題的回答形成了兩種主要的體系結(jié)構(gòu):大內(nèi)核和微
    發(fā)表于 01-15 08:19

    操作系統(tǒng)運行機制

    操作系統(tǒng)在具體實現(xiàn)上劃分了用戶態(tài)(目態(tài))和核心態(tài)(管態(tài)),以嚴格區(qū)分兩類程序。   在軟件工程思想和結(jié)構(gòu)程序設(shè)計方法的影響下誕生的現(xiàn)代操作系統(tǒng),幾乎都是層次的結(jié)構(gòu)。操作系統(tǒng)的各項
    發(fā)表于 01-15 07:12

    API監(jiān)控工具:淘寶新品上架提醒,搶占首發(fā)!

    ? ?對于熱衷于淘新品、搶首發(fā)的用戶來說,第一時間知道心儀商品上架是成功的關(guān)鍵。手動刷新頁面不僅效率低下,還容易錯過最佳時機。本文將介紹一種基于技術(shù)手段實現(xiàn)淘寶新品上架監(jiān)控的方法,幫助你搶占
    的頭像 發(fā)表于 01-06 15:10 ?316次閱讀
    API監(jiān)控工具:淘寶新品上架提醒,<b class='flag-5'>搶占</b>首發(fā)!

    什么是嵌入操作系統(tǒng)

    要理解嵌入操作系統(tǒng)(Embedded Operating System,簡稱 RTOS/EOS),我們可以從本質(zhì)定義→核心區(qū)別→實際作用→典型特征→嵌入開發(fā)場景適配,五個維度來拆解, 一
    發(fā)表于 12-09 10:33

    搶占優(yōu)先級和子優(yōu)先級

    關(guān)于搶占優(yōu)先級和子優(yōu)先級: 1)具有高搶占優(yōu)先級的中斷可以在具有低搶占優(yōu)先級的中斷服務(wù)程序執(zhí)行過程中被響應,即中斷嵌套,或者說高
    發(fā)表于 12-03 07:11

    EV10AS180A模數(shù)轉(zhuǎn)換器支持哪些操作系統(tǒng)

    應用。EV10AS180A轉(zhuǎn)換器本身并不直接依賴或支持特定的操作系統(tǒng),其核心功能是完成模擬信號到數(shù)字信號的轉(zhuǎn)換,屬于硬件層面的數(shù)據(jù)處理設(shè)備。硬件獨立性:EV10AS180A作為一款高性能ADC,其工作原理
    發(fā)表于 11-18 09:18

    單片機的操作系統(tǒng)

    。 ? ? RT-Thread ?:國產(chǎn)開源系統(tǒng),集成GUI、網(wǎng)絡(luò)協(xié)議棧、文件系統(tǒng)等組件,兼容POSIX接口,適合物聯(lián)網(wǎng)設(shè)備。 ? 嵌入操作系統(tǒng) ? μClinux ?:針對
    發(fā)表于 11-14 06:18

    嵌入實時操作系統(tǒng)的特點

    實時嵌入操作系統(tǒng)(Real-Time Embedded Operating System)是專門設(shè)計用于嵌入系統(tǒng)的實時操作系統(tǒng)。嵌入
    發(fā)表于 11-13 06:30

    用這個秘籍,輕松解決鴻蒙應用中搶占音頻焦點的難題

    、恢復門,調(diào)試時還得為跨應用協(xié)作反復踩坑。 別擔心, 華為HarmonyOS開發(fā)者官網(wǎng)最新上線的《音頻焦點管理》最佳實踐文檔來了! 針對“前播與后播音頻搶焦點”的核心難題,《音頻焦點管理》不僅提供標準化系統(tǒng)能力,更附詳細
    的頭像 發(fā)表于 09-01 09:13 ?890次閱讀
    用這個秘籍,輕松解決鴻蒙應用中<b class='flag-5'>搶占</b>音頻焦點的難題

    樹莓派操作系統(tǒng):版本、特性及設(shè)置完整指南!

    樹莓派操作系統(tǒng)是什么?樹莓派操作系統(tǒng)是由樹莓派基金會專為樹莓派開發(fā)的官方操作系統(tǒng)。它基于DebianLinux發(fā)行版,并針對樹莓派的ARM架構(gòu)進行了專門優(yōu)化。樹莓派操作系統(tǒng)有多個版本,
    的頭像 發(fā)表于 07-28 18:26 ?1927次閱讀
    樹莓派<b class='flag-5'>操作系統(tǒng)</b>:版本、特性及設(shè)置完整指南!

    一文讀懂:嵌入Linux實時性進階

    在工業(yè)控制、機器人、汽車電子等關(guān)鍵領(lǐng)域,嵌入系統(tǒng)對實時性要求極高。 Linux作為強大的通用操作系統(tǒng),其原生實時性能難以滿足最嚴苛的硬實時需求。為突破這一限制,PREEMPT_RT補丁
    發(fā)表于 07-10 15:26

    揭秘LuatOS:實時操作系統(tǒng)RTOS核心庫的關(guān)鍵技術(shù)剖析!

    為滿足實時控制場景的嚴苛需求,LuatOS核心庫采用搶占調(diào)度策略,確保高優(yōu)先級任務(wù)即時響應。通過靜態(tài)內(nèi)存分配和零拷貝通信機制,系統(tǒng)不僅避免了動態(tài)內(nèi)存碎片問題,還大幅提升了任務(wù)間數(shù)據(jù)交換效率,適用于
    的頭像 發(fā)表于 05-21 16:02 ?817次閱讀
    揭秘LuatOS:實時<b class='flag-5'>操作系統(tǒng)</b>RTOS核心庫的關(guān)鍵技術(shù)剖析!
    额济纳旗| 宁明县| 平利县| 云和县| 吕梁市| 山西省| 漯河市| 东山县| 沛县| 庆城县| 建宁县| 博野县| 杭锦后旗| 延边| 湘潭县| 鸡泽县| 保山市| 肇州县| 普格县| 江达县| 揭西县| 陇西县| 洞口县| 合水县| 浙江省| 博乐市| 大田县| 禹城市| 瓮安县| 棋牌| 伊吾县| 台中县| 乌兰县| 宁都县| 三亚市| 绵阳市| 满城县| 兴宁市| 大余县| 南宁市| 凤山县|