gpt4 book ai didi

linux-kernel - 被抢占的中断处理程序会发生什么?

转载 作者:行者123 更新时间:2023-12-04 15:14:02 29 4
gpt4 key购买 nike

即使在一些写得很好的内核书籍中,我也找不到以下问题的正确答案:

  • 他们说 ISR 无法休眠,因为它无法重新调度 ISR,因为它不与任何进程连接,那么当更高优先级的中断抢占正在执行的中断时会发生什么?中断的 ISR 不会再次重新调度(执行)?如果是,如何以及谁来完成这项工作?
  • 很多时候我们会禁用中断(例如:1.在临界区 2.当一个快速中断正在执行时,它将禁用当前处理器中的所有中断),那么当中断被禁用时发生的中断会发生什么?他们只是被丢弃了?或者将存储在某个地方以供以后执行?如果是,在哪里以及如何?
  • 当 ISR 正在执行时,它将禁用当前 IRQ 行中的中断以避免重入(防止同一行上的另一个 ISR 被执行),但为什么呢?如果 ISR 是可重入的,有什么问题?

  • *ISR=中断服务程序

    *他们=本书的作者

    最佳答案

    中断通过首先保存当前 CPU 状态并强制程序计数器 (PC) 跳转到中断向量表的位置来捕获从用户空间到内核的执行。然后,该表提供了一个指向内核函数(序列)的指针,该函数保存当前进程状态并将中断 ID 映射到 ISR 的开始。当在 ISR 期间发生更高优先级的中断时,会发生相同的事件序列,除了正在运行的 ISR 和传入的中断都由同一个(内核)进程处理,因此没有进程进入休眠状态。

    如果禁用了新中断,则当然会忽略它。但是,如果在处理器正在处理更高优先级的中断时启用中断,则该中断可能处于挂起状态。

    ISR 是内核空间内的函数调用,需要分配自己的堆栈。如果抢占过多,可重入中断会导致堆栈溢出。大多数内核(包括 Linux 和 Windows)都有固定的堆栈大小。

    关于linux-kernel - 被抢占的中断处理程序会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11779397/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com