无标题
中断处理机制
中断是一个随机事件,因此如果关中断的时间过长,CPU就不能及时的响应其他的中断请求,从而造成中断的丢失。因此,Linux内核的目标就是尽可能快的处理完中断请求,尽可能的把更多的处理向后推迟。因此,内核把中断分为了两部分:上半部和下半部,上半部(就是中断服务程序),下半部(就是一些内核函数)留着稍后处理。首先,一个快速的”上半部”来处理硬件发出的请求,它必须在一个新的中断产生之前终止。其次,“下半部”运行时是允许中断请求的,而上半部运行时是关中断的。这是二者的主要区别
中断的上半部
中断的下半部
处理机制
软中断请求机制
小任务机制
工作队列机制
工作队列是另外一种将工作推后执行的形式,它和tasklet有所不同。工作队列可以把工作推后,交由一个内核线程去执行,也就是说这个下半部可以在进程的上下文中执行。这样,通过工作队列执行的代码能占尽进程上下文的所有优势。最重要的是工作队列允许被重新调度甚至是睡眠。Linux中workqueue机制
为什么需要workqueue?Linux中的workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。
比如fpga中断的频繁上报
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 SCHEN!