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

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

3天內不再提示

Linux 搶占機制與中斷狀態機

麥辣雞腿堡 ? 來源:嵌入式Linux系統開發 ? 作者:Jasonangel ? 2023-09-27 17:40 ? 次閱讀

中斷狀態機

對于 GIC-V2 而言,中斷的狀態機由 Distributor 維護,每個中斷都有一個狀態機。

Inactive :中斷未激活(未發生)。

Pending:中斷到達 GIC ,等待 CPU 的處理。

Active:中斷得到 CPU 的應答,中斷被CPU處理。

Active and pending :某個中斷正在被 CPU 處理,這時候該中斷又來了。

來看一個例子:

圖片

(a)N 和 M 用來標識兩個外設中斷,N 的優先級大于 M

(b)兩個中斷都是 SPI 類型,level trigger,active-high

(c)兩個中斷被配置為去同一個 CPU

(d)都被配置成 group 0,通過 FIQ 觸發中斷

Linux 搶占機制

GIC中斷控制器支持中斷優先級搶占,一個高優先級中斷可以搶占一個低優先級且處于active狀態的中斷,即GIC仲裁單元會記錄和比較當前優先級最高的pending狀態,然后去搶占當前中斷,并且發送這個最高優先級的中斷請求給CPU。

從GIC角度看,GIC會發送高優先級中斷請求給CPU。但是CPU不一定響應?。?!因為在中斷處理過程中,CPU處于關中斷狀態(關閉本CPU),需要等低優先級中斷處理完畢,直到發送EOI 給GIC,然后CPU才會響應pending狀態中優先級最高的中斷進行處理。所以 Linux 下:

1、高優先級中斷無法搶占正在執行的低優先級中斷。

2、同處于 pending 狀態的中斷,優先響應高優先級中斷進行處理。

3、同優先級同是 pending 狀態的中斷,選擇硬件中斷號 ID 最小的一個發給CPU。

這樣是可以理解的,如果萬一中斷大量爆發,中斷如果允許嵌套的話,棧會越來越大,會爆掉,所以為了防止這種情況發生,Linux中中斷不允許嵌套,單CPU中,在一個中斷處理完之前,不會相應另外一個中斷,哪怕優先級比它高。

FreeRTOS 中是允許高優先級中斷搶占正在執行的低優先級中斷,不同系統設定不一樣。

中斷與進程

進程調度是一個復雜的機制, 根據需求的不同,在不同時刻會切換調度機制,CPU會根據進程優先級、時間片等信息,對不同進程進行調度。

中斷可以打斷進程的運行,任意一個中斷的優先級都比所有的進程高。

在中斷處理過程中,主要是 GIC 和 CPU 的交互,即便 GIC 支持高優先級中斷搶占正在執行的低優先級中斷,發信號給 CPU core,但是CPU core 可以不處理,因為 Linux 中當 CPU core 執行中斷處理時,是關中斷和關搶占的狀態,不再相應中斷信號。

也就意味著,在中斷優先級這個概念中,只有當 GIC 同時存在多個 pending的中斷,這時候會選擇優先級最高的去執行,高優先級會搶占低優先級中斷(哪怕低優先級先來)。如果低優先級中斷處于 active
狀態,是不可以被搶占的,這是前后關系。搶占只存在于同時是pending 狀態的時候。

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

    關注

    87

    文章

    11025

    瀏覽量

    207141
  • 狀態機
    +關注

    關注

    2

    文章

    486

    瀏覽量

    27258
  • 進程
    +關注

    關注

    0

    文章

    196

    瀏覽量

    13905
收藏 人收藏

    評論

    相關推薦

    狀態機編程

    實時控制系統,其整個系統的分析機制和功能與系統的狀態有相當大的關系。有限狀態機由有限的狀態和相互之間的轉移構成,在任何時候只能處于給定數目的狀態
    發表于 07-10 18:00

    raw os 之狀態機編程

    的邏輯時,往往能化繁為簡,出奇制勝。由于狀態機的特殊編程機制,狀態機往往配合事件驅動機制來配合一起使用。raw os巧妙地把狀態機編程引進到
    發表于 02-27 14:35

    labview狀態機制作的提款

    labview狀態機制作的提款
    發表于 03-31 22:55

    Linux內核搶占和用戶搶占的概念和區別

    本文詳解了Linux內核搶占實現機制。首先介紹了內核搶占和用戶搶占的概念和區別,接著分析了不可搶占
    發表于 08-05 08:18

    詳解Linux內核搶占實現機制

    本文詳解了Linux內核搶占實現機制。首先介紹了內核搶占和用戶搶占的概念和區別,接著分析了不可搶占
    發表于 08-06 06:16

    狀態機是什么?什么是消息觸發類型的狀態機?

    狀態機可歸納為哪幾個要素?狀態機可分為哪幾種?什么是消息觸發類型的狀態機?
    發表于 04-19 06:02

    什么是狀態機? 狀態機是如何編程的?

    什么是狀態機?狀態機是如何編程的?
    發表于 10-20 07:43

    什么是狀態機

    一. 什么是狀態機我們以生活中的小區的停車系統為例:停車桿一般沒車的是不動的(初態),有車來的時候需要抬桿(狀態1),車通過需要放桿(狀態2),如果在放桿的過程中突然有車,又需要抬桿(狀態
    發表于 01-06 08:01

    狀態機的相關資料下載

    以前寫狀態機,比較常用的方式是用 if-else 或 switch-case,高級的一點是函數指針列表。最近,看了一文章《c語言設計模式–狀態模式(狀態機)》(來源:embed linux
    發表于 02-15 06:01

    如何設置狀態機中斷的閾值?

    你好 ,我需要知道如何設置狀態機中斷的閾值,你能舉個例子解釋一下嗎?精確地意味著在寄存器中設置喚醒狀態機的值
    發表于 02-03 07:50

    采用狀態機和消息機制的串口接收程序

    采用狀態機和消息機制的串口接收程序
    發表于 05-16 14:51 ?48次下載

    基于有限狀態機Linux多點觸摸屏驅動設計劉斌

    基于有限狀態機Linux多點觸摸屏驅動設計_劉斌
    發表于 03-15 08:00 ?0次下載

    狀態模式(狀態機)

    以前寫狀態機,比較常用的方式是用 if-else 或 switch-case,高級的一點是函數指針列表。最近,看了一文章《c語言設計模式–狀態模式(狀態機)》(來源:embed linux
    發表于 12-16 16:53 ?7次下載
    <b class='flag-5'>狀態</b>模式(<b class='flag-5'>狀態機</b>)

    51中斷系統與vhdl狀態機

    51中斷系統與vhdl狀態機51中斷系統與vhdl狀態機51單片機中斷系統1.為什么要引入中斷?
    發表于 01-14 14:58 ?2次下載
    51<b class='flag-5'>中斷</b>系統與vhdl<b class='flag-5'>狀態機</b>

    什么是狀態機?狀態機的種類與實現

    狀態機,又稱有限狀態機(Finite State Machine,FSM)或米利狀態機(Mealy Machine),是一種描述系統狀態變化的模型。在芯片設計中,
    的頭像 發表于 10-19 10:27 ?6247次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>