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

    文章

    10992

    浏览量

    206745
  • 状态机
    +关注

    关注

    2

    文章

    486

    浏览量

    27187
  • 进程
    +关注

    关注

    0

    文章

    193

    浏览量

    13876
收藏 人收藏

    评论

    相关推荐

    状态机编程

    实时控制系统,其整个系统的分析机制和功能与系统的状态有相当大的关系。有限状态机由有限的状态和相互之间的转移构成,在任何时候只能处于给定数目的状态
    发表于 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 5100次阅读