91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

線程基礎(chǔ)原理

線程之間搶占

中斷搶占線程

中斷搶占中斷

strongerHuang

1

運(yùn)行多個(gè)線程

1.單核“單線程”

嚴(yán)格來(lái)說(shuō),單核處理器一次只能執(zhí)行一條指令,也就是說(shuō)只能“單線程”。(當(dāng)然,多核處理器就不一樣)

為了在單核處理器上運(yùn)行多個(gè)線程,我們實(shí)際上需要定期在線程之間進(jìn)行快速切換,以便用戶(hù)感覺(jué)多個(gè)線程在并行運(yùn)行。

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

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

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

例如,計(jì)算兩個(gè)數(shù)字的總和時(shí):

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

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

# 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的值存儲(chǔ)在RAM中(變量c所在的位置)

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

假如在這過(guò)程中有其他線程搶占了,其他線程同樣搶占了當(dāng)前線程V0、 V1,如果不對(duì)V0、 V1進(jìn)行保存,那么下次回來(lái)執(zhí)行當(dāng)前線程,結(jié)果就會(huì)出錯(cuò)。

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

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

strongerHuang

2

線程的堆棧

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

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

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

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

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

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

此時(shí),你會(huì)看到:

strongerHuang

3

中斷(ISR)搶占

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

strongerHuang

3

中斷堆棧

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

使用被中斷的線程堆棧;

為中斷使用單獨(dú)的堆??臻g;

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

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

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

線程的上下文;

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

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

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

責(zé)任編輯:xj

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

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

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

    關(guān)注

    37

    文章

    7405

    瀏覽量

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

    關(guān)注

    0

    文章

    510

    瀏覽量

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

    關(guān)注

    0

    文章

    92

    瀏覽量

    19242

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    PB332在PB331基礎(chǔ)上增加了搶占避讓和按優(yōu)先級(jí)隊(duì)列上 傳功能,并可以完全并網(wǎng)PB331系統(tǒng)進(jìn)行透?jìng)魍ㄓ?/a>

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

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

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

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

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

    操作系統(tǒng)運(yùn)行機(jī)制

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

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

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

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

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

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

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

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

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

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

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

    嵌入實(shí)時(shí)操作系統(tǒng)的特點(diǎn)

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

    用這個(gè)秘籍,輕松解決鴻蒙應(yīng)用中搶占音頻焦點(diǎn)的難題

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

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

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

    一文讀懂:嵌入Linux實(shí)時(shí)性進(jìn)階

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

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

    為滿(mǎn)足實(shí)時(shí)控制場(chǎng)景的嚴(yán)苛需求,LuatOS核心庫(kù)采用搶占調(diào)度策略,確保高優(yōu)先級(jí)任務(wù)即時(shí)響應(yīng)。通過(guò)靜態(tài)內(nèi)存分配和零拷貝通信機(jī)制,系統(tǒng)不僅避免了動(dòng)態(tài)內(nèi)存碎片問(wèn)題,還大幅提升了任務(wù)間數(shù)據(jù)交換效率,適用于
    的頭像 發(fā)表于 05-21 16:02 ?681次閱讀
    揭秘LuatOS:實(shí)時(shí)<b class='flag-5'>操作系統(tǒng)</b>RTOS核心庫(kù)的關(guān)鍵技術(shù)剖析!

    KaihongOS操作系統(tǒng)FA模型與Stage模型介紹

    FA模型與Stage模型介紹 KaihongOS操作系統(tǒng)中,F(xiàn)A模型(Feature Ability)和Stage模型是兩種不同的應(yīng)用模型,它們提供了不同的應(yīng)用開(kāi)發(fā)方式和特性。 FA模型
    發(fā)表于 04-24 07:27