gpt4 book ai didi

linux - 在 linux 中调用中断处理程序的下半部分的函数

转载 作者:太空狗 更新时间:2023-10-29 11:18:37 24 4
gpt4 key购买 nike

在 Linux 中,中断处理程序的处理分为两部分:上半部分和下半部分。

据我所知,中断处理程序的下半部分可以通过多种方式处理:softirq、tasklet、工作队列和计时器列表。

我想知道 Linux 内核中的哪些函数处理这些 bottom-halves 的调度函数。

编辑:我查看了 softirq 和 tasklet 的处理,似乎它们都是通过 __do_softirq ( http://lxr.linux.no/linux+v2.6.32.58/kernel/softirq.c#L207 ) 函数处理的。但是,我仍然看到处理程序执行中的许多路径通过 Linux 内核的 schedule() 函数,然后出现分歧。我无法正确解释这些路径。

指导您实现此功能的一些直觉:
挂起任务的调度(下半部分)应该由某个事件触发。内核事件可以是系统调用,也可以是中断。我认为触发下半部分的事件是中断而不是系统调用。

据我所知,这是中断到达时遵循的步骤:
1.中断到达核心
2.中断处理程序的上半部分运行
3. 查看pending队列,看是否有需要关注的任务。
4.如果有pending任务,则执行

我正在查看所有操作系统处理程序的函数列表,并观察到许多处理程序的执行是通过 Linux 内核的 schedule() 函数进行的。由于这个函数经常被许多中断处理程序调用,我认为中断处理程序的下半部分应该只从这个函数中调用。

schedule() 函数最后会调用 post_schedule() 函数。我跟踪了这​​两个函数调用之间的所有函数。它们之间有许多不同的函数列表,让人怀疑下半部分函数一定位于从 schedule() 到 post_schedule() 的路径上。然而,内核中不同 MACROS 和函数的绝对数量使得确定调度器跳转到到下半部分的函数变得非常困难。

最佳答案

设备驱动程序的中断处理程序的上半部分必须返回 IRQ_HANDLED、IRQ_WAKE_THREAD 或 IRQ_NONE 以指示中断子系统是否处理了 irq。如果返回 IRQ_WAKE_THREAD,则中断处理程序的线程化下半部分将被安排执行。通常 bottom halves 比其他正常的内核任务具有更高的优先级。参见 https://lwn.net/Articles/302043/了解更多详情

关于linux - 在 linux 中调用中断处理程序的下半部分的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30223491/

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