Operating system 内核运行ISR例程时的限制

Operating system 内核运行ISR例程时的限制,operating-system,locking,linux-kernel,interrupt,context-switch,Operating System,Locking,Linux Kernel,Interrupt,Context Switch,内核模式和ISR例程中的一些重要注意事项和不注意事项是什么? 比如说- 运行中断处理程序时是否禁用了上下文切换 当一个进程在一个关键进程内时,上下文切换会发生吗 部门 内核模式内的哪些情况值得禁用进一步的中断 为什么进程切换会发生在页面错误上,即进程从磁盘获取数据,但不会发生在其他中断期间。 您如何对可执行路径是否可以被中断/重新调度/抢占进行分类 当进程处于内核模式或处理ISR例程时,还需要记住哪些事情?简言之:没有上下文切换,永远都不 这意味着: 不先发制人 互斥锁上没有锁(请改用自旋

内核模式和ISR例程中的一些重要注意事项和不注意事项是什么? 比如说-

  • 运行中断处理程序时是否禁用了上下文切换
  • 当一个进程在一个关键进程内时,上下文切换会发生吗
    部门
  • 内核模式内的哪些情况值得禁用进一步的中断
为什么进程切换会发生在页面错误上,即进程从磁盘获取数据,但不会发生在其他中断期间。 您如何对可执行路径是否可以被中断/重新调度/抢占进行分类


当进程处于内核模式或处理ISR例程时,还需要记住哪些事情?

简言之:没有上下文切换,永远都不

这意味着:

  • 不先发制人
  • 互斥锁上没有锁(请改用自旋锁,并确保非ISR对等方通过自旋锁irqsave获取它们以禁用IRQ)
  • 不调用任何可以休眠的内核函数(查看函数的文档,有些函数还有_cansleep变体)
进程切换可能发生在页面错误上,但它发生在处理相应的ISR之后。基本上,如果路径不是ISR且未锁定自旋锁,则可以对其进行调度。如果您持有旋转锁,则必须在释放前避免睡觉

由于ISR受到非常严格的限制,因此IRQ的处理通常分为上半部分(在ISR上下文中运行并执行关键任务)和下半部分(稍后作为内核线程运行并执行任何可能延迟的操作),下半部分可以休眠。有关更多信息,请参阅本页: