国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

無MMU搶占式操作系統的搶占工作原理介紹

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

掃碼添加小助手

加入工程師交流群

線程基礎原理

線程之間搶占

中斷搶占線程

中斷搶占中斷

strongerHuang

1

運行多個線程

1.單核“單線程”

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

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

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

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

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

例如,計算兩個數字的總和時:

//假設我們有兩個整數:a和bint c = a + b ;

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

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

你會發現上面執行了4個動作,但是搶占式操作系統可以在任何時候搶占另一個線程,包括在這4個動作之間。

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

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

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

strongerHuang

2

線程的堆棧

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

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

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

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

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

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

此時,你會看到:

strongerHuang

3

中斷(ISR)搶占

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

strongerHuang

3

中斷堆棧

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

使用被中斷的線程堆棧;

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

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

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

線程自己的數據;

線程的上下文;

用于執行最壞情況的ISR的數據。

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

為中斷使用單獨的堆棧空間大致如上圖所示。 好了,本文講述了上面幾種關于搶占,以及相關的內容,你學會了幾點,又有幾點沒懂,歡迎留言討論。

責任編輯:xj

原文標題:無MMU搶占式操作系統的搶占工作原理

文章出處:【微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

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

    關注

    37

    文章

    7402

    瀏覽量

    129323
  • 線程
    +關注

    關注

    0

    文章

    509

    瀏覽量

    20829
  • MMU
    MMU
    +關注

    關注

    0

    文章

    92

    瀏覽量

    19227

原文標題:無MMU搶占式操作系統的搶占工作原理

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    PB332在PB331基礎上增加了搶占避讓和按優先級隊列上 傳功能,并可以完全并網PB331系統進行透傳通訊

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

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

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

    操作系統體系結構

    操作系統的體系結構是一個開放的問題。正如上文所述,操作系統在核心態為應用程序提供公共的服務,那么操作系統在核心態應該提供什么服務、怎樣提供服務?有關這個問題的回答形成了兩種主要的體系結構:大內核和微
    發表于 01-15 08:19

    操作系統運行機制

    。操作系統在具體實現上劃分了用戶態(目態)和核心態(管態),以嚴格區分兩類程序。   在軟件工程思想和結構程序設計方法的影響下誕生的現代操作系統,幾乎都是層次的結構。操作系統的各項
    發表于 01-15 07:12

    API監控工具:淘寶新品上架提醒,搶占首發!

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

    什么是嵌入操作系統

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

    搶占優先級和子優先級

    關于搶占優先級和子優先級: 1)具有高搶占優先級的中斷可以在具有低搶占優先級的中斷服務程序執行過程中被響應,即中斷嵌套,或者說高
    發表于 12-03 07:11

    EV10AS180A模數轉換器支持哪些操作系統

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

    單片機的操作系統

    。 ? ? RT-Thread ?:國產開源系統,集成GUI、網絡協議棧、文件系統等組件,兼容POSIX接口,適合物聯網設備。 ? 嵌入操作系統 ? μClinux ?:針對
    發表于 11-14 06:18

    嵌入實時操作系統的特點

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

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

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

    樹莓派操作系統:版本、特性及設置完整指南!

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

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

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

    揭秘LuatOS:實時操作系統RTOS核心庫的關鍵技術剖析!

    為滿足實時控制場景的嚴苛需求,LuatOS核心庫采用搶占調度策略,確保高優先級任務即時響應。通過靜態內存分配和零拷貝通信機制,系統不僅避免了動態內存碎片問題,還大幅提升了任務間數據交換效率,適用于
    的頭像 發表于 05-21 16:02 ?668次閱讀
    揭秘LuatOS:實時<b class='flag-5'>操作系統</b>RTOS核心庫的關鍵技術剖析!

    KaihongOS操作系統FA模型與Stage模型介紹

    FA模型與Stage模型介紹 KaihongOS操作系統中,FA模型(Feature Ability)和Stage模型是兩種不同的應用模型,它們提供了不同的應用開發方式和特性。 FA模型
    發表于 04-24 07:27