Linux 抢占机制与中断状态机

中断状态机
对于 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 状态的时候。

小米11屏幕已实现高端屏幕的新突破
现代汽车拟建第二座氢燃料电池工厂 产能将扩大到每年约40000台
大联大世平集团推出可穿戴设备与微信平台互联互通的低功耗蓝牙解决方案
烟雾传感器详解
腾讯发布二代小Q机器人,高清触摸屏,百科答疑智能音箱
Linux 抢占机制与中断状态机
华为以优异表现通过中国移动5G SPN设备高精度时间同步测试
力得尔智能传感技术研发总部项目启动
华为巨变!2万员工投奔余承东!
安规电容选型规范要求,安规电容选型注意哪些问题
5G商用进入良性循环 骁龙系列精彩收官
speedfan控制电脑风扇转速
电动调节阀的原理是什么
以莫扎特命名的迷你蓝牙收音音箱
到2023年,美国联邦政府将在人工智能上花费近10亿美元
飞腾开发者平台openKylin专区上线
无锡公交给通电的公交站台安装“物联网盒子”
实际电路设计中常用的三点式LC振荡器
POE技术在摄像机的应用分析
什么是CoS (Class of Service)