0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux为什么中断不允许休眠

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:Jasonangel 2023-09-27 17:48 次阅读

Linux 为什么中断不允许休眠?

所谓的睡眠,就是调用 schedule 让出 CPU,调度器选择另外个进程继续执行,这个过程涉及进程栈空间的切换。

1、假如中断上下文中调用 schedule ,此时获取的 struct thread info 数据结构是发生中断时该进程栈信息,而不是中断上下文调用 schedule 时任何信息。这就导致再也无法返回中断上下文中调用 schedule 的地方。

2、中断上下文处于关中断中,需要发送个 EOI 通知 GIC 中断处理结束,GIC 和CPUinterface 才会进入下一次中断处理。如果中途 schedule,那么整个系统的中断都会被屏蔽掉。

一般进入中断后,需要关中断,也会关抢占,同时注意不可以调用schedule。

unhandled interrupt 和 spurious interrupt

未处理中断和虚假中断

在中断处理的最后,总会有一段代码如下:

irqreturn_t

handle_irq_event_percpu(structirq_desc*desc,structirqaction*action)

{

……

if(!noirqdebug)

note_interrupt(irq,desc,retval);

returnretval;

}

note_interrupt就是进行unhandled interrupt和spurious interrupt处理的。对于这类中断,linux kernel有一套复杂的机制来处理,你可以通过command line参数(noirqdebug)来控制开关该功能。

当发生了一个中断,但是没有被处理(有两种可能,一种是根本没有注册的 specific handler,第二种是有 handler,但是 handler 否认是自己对应的设备触发的中断),怎么办?毫无疑问这是一个异常状况,那么 kernel 是否要立刻采取措施将该 IRQ disable 呢?也不太合适,毕竟 interrupt request 信号线是允许共享的,直接 disable 该 IRQ 有可能会下手太狠,kernel 采取了这样的策略:如果该 IRQ 触发了 100,000 次,但是 99,900 次没有处理,在这种条件下,我们就是 disable 这个 interrupt request line。

中断线和中断号是一个意思。

相关的控制数据在中断描述符中,如下:

structirq_desc{

……

unsignedintirq_count;--------记录发生的中断的次数,每100,000则回滚

unsignedlonglast_unhandled;-----上一次没有处理的IRQ的时间点

unsignedintirqs_unhandled;------没有处理的次数

……

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10816

    浏览量

    210936
  • Linux
    +关注

    关注

    87

    文章

    11216

    浏览量

    208781
  • 中断
    +关注

    关注

    5

    文章

    895

    浏览量

    41361
收藏 人收藏

    评论

    相关推荐

    为保医疗质量不允许开展互联网医疗诊治?

    互联网时代,很多人都已经习惯了通过网络解决很多问题,包括看病找医生。在线辅助问诊是否合法?对此,国家卫计委新闻发言人宋树立表示:互联网上涉及医学诊断治疗是不允许开展的,只能做健康方面的咨询。
    发表于 04-13 09:46 1121次阅读

    “tc1.3”编译报错不允许使用向量表编号TriCore™怎么解决?

    “tc1.3” TriCore™ 不允许使用矢量表编号
    发表于 01-22 08:33

    NgdBuild:486不允许属性“SIM_MODE”

    “BU2_U0_blk_mem_generator_valid.cstr_ramloop [3] .ram.r_v5_noinit.ram_SP.WIDE_P RIM36.TDP”上不允许属性“SIM_MODE”。该属性将被忽略。这可以吗?ISE版本
    发表于 10-10 11:48

    请问SPI不允许在main函数中对SD卡操作吗?

    请问下,我在一个定时中断里使用原子哥写SD的程序写SD卡,在mian函数的循环里同样也有对SD卡的操作(SD_Init(),MSD_WriteBuffer),这时我发现程序有一定概率在出定时中断后不跑了,把main函数中对SD卡操作的函数都去掉后就完全没有这个问题了。难道
    发表于 07-11 04:35

    电压互感器二次侧为什么不允许短路

    变压器的工作原理是什么?变压器是由哪些部分组成的?电流互感器二次侧为什么不允许开路?电压互感器二次侧为什么不允许短路?
    发表于 08-09 06:48

    电流互感器与电压互感器二次侧为什么不允许开路

    变压器的工作原理是什么?变压器是由哪些部分组成的?电流互感器二次侧为什么不允许开路?电压互感器二次侧为什么不允许短路?
    发表于 08-23 06:14

    FreeRTOS的某些内容是不允许MDMA读取内存吗?

    验证了 RAM 地址存在于 AXI 内存中,所以似乎 FreeRTOS 的某些内容不允许 MDMA 读取内存?// Write operationMDMA_Channel0-&gt
    发表于 12-07 07:47

    STM32H7时钟为什么不允许调整?

    时钟不允许调整。通常它不应该发出警告。
    发表于 12-14 06:52

    TTL门电路为什么输出端不允许并联相接呢?

    TTL门电路为什么输出端不允许并联相接?希望能从三极管的角度解释一下,最好有图解。
    发表于 04-28 11:06

    不允许32位传输的i.MX 8是否有限制?

    字节的 DMA 传输(DMA 控制器在设备内部,因此它会进行 PCI 总线主传输)并且该传输从未开始或完成,所以看起来 4 字节的传输大小是太小。较大的传输(8 个或更多字节)工作正常。 不允许
    发表于 05-11 06:34

    网络电视不允许直播世界杯?

    2018世界杯比赛不允许在互联网电视平台上进行赛事的直播和延时播出,否则都属于违规,只能在赛事结束后提供比赛点播服务。
    的头像 发表于 06-08 09:44 5248次阅读

    AVR单片机外部中断实例及下载烧录的方法

    中断向量位于Boot Loader 区,那么执行应用区代码时中断是禁止的。401不允许运行于Boot Loader 区的LPM 指令从应用区读取数据。若中断向量位于Boot Load
    发表于 04-09 15:05 2149次阅读
    AVR单片机外部<b class='flag-5'>中断</b>实例及下载烧录的方法

    为什么中性线不允许单独断开

     在我们通常所用的TN系统中,不管单相电路还是三相电路,零线和地线一样在任何情况下都是不允许断开的,也就是说零线不允许经过开关和保险丝。零线在电工学里用PEN表示,中性线用N表示,保护线(地线)用PE表示。我们生活中所用、通常所说的零线实际上在电工学里叫“中性线”。
    的头像 发表于 12-22 03:42 9401次阅读
    为什么中性线<b class='flag-5'>不允许</b>单独断开

    减速机为什么不允许有轴向窜动现象?

    减速机为什么不允许有轴向窜动现象? 减速机是一种用来改变输入轴传动力矩和转速的装置。作为机械设备的核心部件之一,减速机在各个行业中起到非常重要的作用,广泛应用于机械传动系统中。 在减速机
    的头像 发表于 11-23 10:46 948次阅读

    电力系统不允许发生谐振的原因

    电力系统谐振是指在电力系统中,由于某些特定条件的满足,导致系统内部的电感和电容元件相互配合,形成一种振荡现象。谐振现象在电力系统中是不允许发生的,因为它会带来一系列严重的问题和危害。以下是对电力系统
    的头像 发表于 08-22 14:21 524次阅读