2.3 定时器:内核定时器与超时机制

张开发
2026/4/8 22:09:03 15 分钟阅读

分享文章

2.3 定时器:内核定时器与超时机制
庖丁解牛:Linux内核工作队列(Workqueue)与系统线程深度剖析001、开篇:为什么需要工作队列?——从内核线程到中断下半部的演进深夜的调试现场上周三凌晨两点,我在实验室盯着串口调试输出,屏幕上一行BUG: soft lockup - CPU#1 stuck for 23s!让我瞬间清醒。这是一个典型的软锁死——某个内核线程占着CPU不放,调度器都救不了场。问题出在我们自己写的驱动模块里,某个中断处理函数中直接调用了kmalloc(..., GFP_KERNEL),然后试图获取一个可能被其他进程持有的互斥锁。这种场景太经典了:中断上下文里做了不该做的事。但为什么不能做?内核提供了什么机制来解决?这就引出了我们今天要拆解的核心——工作队列(Workqueue)。从内核线程说起早期Linux驱动开发者有个朴素的想法:我要异步执行任务,那就自己起个内核线程呗。代码大概长这样:staticintmy_thread_func(

更多文章