Linux 中断处理与内核线程化——以触摸屏中断为例

文章目录

  • [1 什么是中断?](#1 什么是中断?)
  • [2 传统的中断处理模型](#2 传统的中断处理模型)
  • [3 内核线程与用户进程](#3 内核线程与用户进程)
  • [4 中断线程化的理念](#4 中断线程化的理念)
  • [5 `devm_request_threaded_irq` 与 `request_irq` 的比较](#5 devm_request_threaded_irqrequest_irq 的比较)
  • [6 触摸屏驱动中的中断线程化](#6 触摸屏驱动中的中断线程化)
  • 参考链接
  • 封面

本文探讨了 Linux 中断处理的传统模型与中断线程化的理念,以及在触摸屏驱动中为何使用线程化的中断处理。

1 什么是中断?

中断(Interrupt)是硬件设备用来通知处理器发生某个事件的机制。当设备产生中断时,处理器会暂停当前正在执行的任务,转而执行与该中断相关的中断处理程序(Interrupt Handler)。

触摸屏与中断:

  • 触摸屏设备通常使用中断机制来报告触摸事件。例如,当用户手指触摸屏幕时,触摸屏控制器会发出中断信号,通知处理器读取触摸点的坐标信息。

2 传统的中断处理模型

在传统的中断处理模型中,中断处理程序分为上半部 (Top Half)和下半部(Bottom Half):

  • 上半部:这是在中断发生时立即执行的部分,处理最紧急的任务,如确认中断源、清除中断标志等。上半部的执行时间应该尽量短,以便快速恢复系统的正常运行。

  • 下半部:用于处理那些不需要立即完成的任务,如数据传输、复杂计算等。虽然下半部可以延迟执行,但它仍然比普通进程有更高的优先级,可能会影响系统的实时性能。

问题:

  • 如果中断非常频繁,处理器可能会花大量时间在上下半部处理中,导致系统中其他任务得不到及时处理。

3 内核线程与用户进程

在操作系统中,执行任务的实体可以分为内核线程用户进程

  • 内核线程(Kernel Thread):运行在内核空间,专门用于内核任务,如驱动程序的后台处理、系统资源管理等。内核线程不涉及用户空间的地址转换,执行效率更高。

  • 用户进程(User Process):运行在用户空间,通常是用户启动的应用程序。它们通过系统调用与内核交互来完成任务,但执行优先级通常低于内核线程。

4 中断线程化的理念

为了减少频繁中断对系统性能的影响,Linux 内核引入了中断线程化(Threaded Interrupts)的概念。

  • 中断线程化:通过将中断的下半部处理放入内核线程中,使中断处理程序成为一个可调度的线程。这些中断处理线程与普通进程一样,由操作系统调度器管理,可以被赋予不同的优先级。

优势:

  • 优先级控制:中断线程可以设置不同的优先级,甚至低于某些重要的用户进程。这样可以保证系统中更重要的任务优先执行,而不会因为频繁的中断处理而被延迟。
  • 公平竞争:线程化后的中断处理程序与普通进程一起竞争 CPU 资源,减轻中断对系统实时性的影响。

5 devm_request_threaded_irqrequest_irq 的比较

在 Linux 中,有两种常见的中断注册函数:

  • request_irq:用于注册一个中断处理程序。当中断发生时,立即调用该处理程序。
  • devm_request_threaded_irq:除了注册中断处理程序外,还支持中断线程化,并具有自动资源管理的功能。

为什么选择 devm_request_threaded_irq

  • 当中断处理比较耗时或非关键时,可以通过 devm_request_threaded_irq 将中断处理线程化,以减少对系统整体性能的影响。
  • devm_ 系列函数还具有自动资源管理功能,确保在设备卸载时,系统自动释放相关资源,避免资源泄漏。

6 触摸屏驱动中的中断线程化

触摸屏设备的中断处理通常需要读取触摸点的坐标信息,这个过程可能涉及较慢的 I2C 通信(通常最大速度为 400KHz)。如果触摸事件频繁发生,处理器可能会花费大量时间处理触摸中断,影响系统的其他任务。

中断线程化的应用场景:

  • 对于触摸屏这样的设备,触摸事件通常不是最高优先级的任务。因此,可以将触摸中断处理线程化,降低其优先级,确保系统中其他更重要的任务(如音视频处理)能够优先执行。

实例:

  • Linux 内核中的一些触摸屏驱动(如 goodix.cmms114.c 等)就是通过 devm_request_threaded_irq 实现中断线程化的。

参考链接

封面

由 DALL-E-3 生成

相关推荐
xhbh6665 小时前
路由端口转发常见应用场景有哪些?有什么?
服务器·ip·端口转发·ip地址·流量转发·建站
前端之虎陈随易5 小时前
2年没用Nodejs了,Bun很香
linux·前端·javascript·vue.js·typescript
宁小法5 小时前
Linux批量删除文件
linux·服务器·批量·删除文件
AC赳赳老秦6 小时前
财务报销自动化:用 OpenClaw 自动识别发票信息、填写报销单、校验报销规则,减少手工操作
运维·网络·eclipse·github·visual studio·deepseek·openclaw
05候补工程师6 小时前
深度解构 ROS 2:如何手动调通 Nav2 A* 路径规划引擎
linux·人工智能·经验分享·算法·机器人
zhangfeng11336 小时前
适合 5人以内小团队的Git 工作流 + Code Review + 自动化部署方案 FastAdmin +linunx服务器宝塔系统 外包项目 —
服务器·git·自动化·php·代码复审
北冥湖畔的燕雀7 小时前
Linux线程编程核心指南
linux·服务器·网络
倔强的石头1067 小时前
【Linux 指南】文件系统系列(一):磁盘底层原理 —— 从物理结构到 CHS与LBA 寻址全解析
linux·运维·服务器
南汁bbj7 小时前
彻底解决!Milvus远程连接报错code=2、gRPC超时问题(Windows访问Linux服务终极方案)
linux·windows·milvus
小金的学习笔记7 小时前
小白打造个人博客的神奇秘诀:WordPress 竟如此简单?
服务器