Linux内核中断处理的irq_thread机制

中断不能睡眠的原因:睡眠会导致进程的调度,使得从中断切换到别的进程执行。但是由于Linux内核的调度器是基于进程进行调度的,也就是说,调度的实体是基于task_struct的,而中断处理程序执行的时候,并没有这个实体,即没有所谓的进程上下文,所以从中断调度别的进程运行时,便无法再回到该中断继续执行。所以在中断处理程序中不能睡眠(表述的不好,请见谅╮(╯-╰)╭)。
因而内核为中断处理提供了另一种机制——irq_thread机制。该机制的实现原理比较简单,内核创建一个irq_thread内核线程,该线程睡眠等待中断的发生。当中断发生时,中断处理程序负责唤醒该线程,后者进行实际的中断处理工作。因为irq_thread本质上是一个独立的进程,所以采用这种机制将使实质的中断处理工作发生在进程空间,而不是中断上下文。进而该内核线程处理的中断可以睡眠。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值