当前位置: 首页 > news >正文

PREEMPT_RT 技术实现:Threaded interrupt handler

中断线程化,使得高优先级的中断变成了普通的内核线程,和其他程序共用CPU,通过优先级来决定谁能够获取CPU的使用权。将一些不重要的中断改在线程中执行,只要RT任务优先级比中断线程优先级高,就可以优先执行,以此来提高系统的实时性能

传统主线内核默认中断行为

普通硬中断上下文:关闭硬件中断,同时隐式禁止抢占、禁止软中断,中断处理全程在硬中断上下文执行。

为了清晰描述,我用excel画了下面这张图。从图中可以看到,硬中断、软中断、特定的tasklet都不在调度器的管辖范围内,运行在interrupt context中。无论是内核线程还是用户程序,在中断发生时,都需要立刻让出CPU的使用权。在实时系统中,其实很多中断所做的并不是特别重要的工作,或者说,即使有些许延迟,也是无关紧要的。主线内核中的默认中断行为,会严重影响RT任务的执行周期及抖动。

PREEMPT_RT中的中断行为

PREEMPT_RT 默认强制开启线程化中断(threaded interrupts);除带IRQF_NO_THREAD标记的中断外,所有中断处理函数都运行在内核线程上下文,不再跑在硬中断上下文。

如下图所示,不重要的硬中断、所有软中断和tasklet都不在运行在interrupt context中,而是作为普通的内核线程,交给调度器,根据调度算法来决定是否可被抢占。换个说法就是,通过提高RT Task的优先级,在PREEMPT_RT kernel中,RT Task可以避免一些中断的干扰(传统内核中的中断,在PREEMPT_RT内核中已经变成了线程)。

不会被线程化的中断
IRQF_NO_THREAD标志的中断仍以原始硬中断方式运行、关硬件中断;

  • IPI 跨处理器中断 主动使用该标志
  • IRQF_TIMERIRQF_PER_CPU类型中断隐式自带 IRQF_NO_THREAD,不会线程化。

线程化中断的线程属性
开启后,中断交由内核线程执行,调度策略为SCHED_FIFO,默认优先级 50。

/* * Priority of a process goes from 0..MAX_PRIO-1, valid RT * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority * values are inverted: lower p->prio value means higher priority. */ #define MAX_RT_PRIO 100 void sched_set_fifo(struct task_struct *p) { struct sched_param sp = { .sched_priority = MAX_RT_PRIO / 2 }; WARN_ON_ONCE(sched_setscheduler_nocheck(p, SCHED_FIFO, &sp) != 0); } /* * Interrupt handler thread */ static int irq_thread(void *data) { ... sched_set_fifo(current); ... }
http://www.gsyq.cn/news/1586863.html

相关文章:

  • VisualCppRedist AIO:Windows运行库一体化解决方案深度解析
  • 3分钟搞定Rhino到Blender转换:import_3dm插件完全指南
  • 2026年AI论文网站盘点:12款神器助你高效完成去痕改写、润色和过检
  • java--Day3-多态and包
  • Adobe-GenP:免费解锁Adobe全家桶的专业破解工具指南
  • 3步掌握NoFences:让Windows桌面告别杂乱无章的免费开源方案
  • 北大联手中科院:给机器人装上“空间记忆“,让它不再靠蒙猜方向
  • GEO内容结构化技术是什么?如何让AI精准提取和引用品牌信息?
  • DonkeyCar油门校准实战指南:从PWM信号到精准扭矩控制
  • 台球辅助工具终极指南:3分钟掌握精准瞄准技巧
  • 8位MCU市场格局与技术演进:从历史洞察看嵌入式控制器的持久生命力
  • 099、NPU的RISC-V扩展:自定义NPU指令
  • 【维安康】射频功率放大器:全链条自主可控,重新定义无线通信的“能量引擎“
  • Mythos能力解析:隐性知识建模与跨语境前提推演技术
  • Lingjing(灵境)+vulnhub:Empire_Breakout打靶记录
  • 04-性能优化与最佳实践——05. 代码分割 - lazy 与 Suspense
  • 李佳行政法笔记|李佳行政法精讲讲义|李佳行政法口诀
  • ArchivePasswordTestTool:免费高效的压缩包密码恢复终极解决方案
  • 嵌入式网络处理器P1024E参考板硬件设计深度解析
  • OpenCV(五十四):车辆检测
  • 魔方笔记pdf|柏浪涛刑法讲义2026电子版259页|柏浪涛刑法讲义pdf
  • 2023年AI工程化实战手册:从RAG、微调到CUDA排错
  • 告别LLM能力边界!30分钟掌握AI Tools调用核心逻辑
  • GitHub爆火Skill三巨头实测:选错直接让AI代码精神分裂
  • 【WorkBuddy专栏42】初学编程用AI助手是捷径还是陷阱——正确使用方法的深度解析
  • 柏浪涛刑法网课资源|柏浪涛刑法百度|柏浪涛刑法百度云
  • GitLab高危漏洞CVE-2025-5121应急响应实战:从分析到升级加固全记录
  • 快来薅羊毛!千问App新用户快速白嫖8元无门槛通用券,下载千问,输入口令:千问新用户专属876028,就可以领取啦
  • 科研实验领域高速摄像机的使用体验
  • 3分钟零配置上手:用DouyinLiveWebFetcher解锁抖音直播数据宝藏