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
    +关注

    关注

    88

    文章

    11868

    浏览量

    219894
  • 状态机
    +关注

    关注

    2

    文章

    502

    浏览量

    29425
  • 进程
    +关注

    关注

    0

    文章

    211

    浏览量

    14572
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Verilog状态机+设计实例

    在verilog中状态机的一种很常用的逻辑结构,学习和理解状态机的运行规律能够帮助我们更好地书写代码,同时作为一种思想方法,在别的代码设计中也会有所帮助。 一、简介 在使用过程中我们常说
    的头像 发表于 02-12 19:07 6474次阅读
    Verilog<b class='flag-5'>状态机</b>+设计实例

    labview状态机制作的提款

    labview状态机制作的提款
    发表于 03-31 22:55

    详解Linux内核抢占实现机制

    本文详解了Linux内核抢占实现机制。首先介绍了内核抢占和用户抢占的概念和区别,接着分析了不可抢占
    发表于 08-06 06:16

    采用状态机和消息机制的串口接收程序

    采用状态机和消息机制的串口接收程序
    发表于 05-16 14:51 48次下载

    状态机举例

    状态机举例 你可以指定状态寄存器和状态机状态。以下是一个有四种状态的普通状态机。 // Th
    发表于 03-28 15:18 1252次阅读

    状态机代码生成工具

    状态机代码生成工具状态机代码生成工具状态机代码生成工具状态机代码生成工具
    发表于 11-19 15:12 9次下载

    状态机原理及用法

    状态机原理及用法状态机原理及用法状态机原理及用法
    发表于 03-15 15:25 0次下载

    基于有限状态机Linux多点触摸屏驱动设计刘斌

    基于有限状态机Linux多点触摸屏驱动设计_刘斌
    发表于 03-15 08:00 0次下载

    状态机概述 如何理解状态机

    本篇文章包括状态机的基本概述以及通过简单的实例理解状态机
    的头像 发表于 01-02 18:03 1.1w次阅读
    <b class='flag-5'>状态机</b>概述  如何理解<b class='flag-5'>状态机</b>

    FPGA:状态机简述

    本文目录 前言 状态机简介 状态机分类 Mealy 型状态机 Moore 型状态机 状态机描述 一段式
    的头像 发表于 11-05 17:58 9095次阅读
    FPGA:<b class='flag-5'>状态机</b>简述

    什么是状态机状态机5要素

    玩单片还可以,各个外设也都会驱动,但是如果让你完整的写一套代码时,却无逻辑与框架可言。这说明编程还处于比较低的水平,你需要学会一种好的编程框架或者一种编程思想!比如模块化编程、状态机编程、分层思想
    的头像 发表于 07-27 11:23 2.2w次阅读
    什么是<b class='flag-5'>状态机</b>?<b class='flag-5'>状态机</b>5要素

    状态模式(状态机)

    以前写状态机,比较常用的方式是用 if-else 或 switch-case,高级的一点是函数指针列表。最近,看了一文章《c语言设计模式–状态模式(状态机)》(来源:embed linux
    发表于 12-16 16:53 9次下载
    <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>

    如何构建基于状态机的软件系统

    模式(Design Pattern)。本文介绍如何构建基于状态机的软件系统,以及如何利用Linux下的工具来自动生成实用的状态机框架。
    的头像 发表于 09-14 10:55 2437次阅读

    什么是状态机状态机的种类与实现

    状态机,又称有限状态机(Finite State Machine,FSM)或米利状态机(Mealy Machine),是一种描述系统状态变化的模型。在芯片设计中,
    的头像 发表于 10-19 10:27 1.3w次阅读