gpt4 book ai didi

linux - 关于linux内核中的中断上下文、原子上下文和进程上下文

转载 作者:太空狗 更新时间:2023-10-29 12:03:55 28 4
gpt4 key购买 nike

据我所知,我们可以通过在 linux 内核中调用 in_interrupt() 来验证我们是否处于中断上下文中。而in_interrupt()函数的执行是在进入或退出hardirq或softirq时通过thread_info->preempt_count进行计数。因此,当 in_interrupt() 返回非零时,表明我们正在处理 hardirq 或 softirq。

但是,我的问题是当我们涉及local_bh_disable()函数时,它确实增加了thread_info->preempt_count,所以in_interrupt() 函数返回非零。因此,我们如何确定我们现在是否处于中断上下文中。在我看来,原子上下文是禁用本地中断

这里有一个情况,我现在是内核态,想访问用户态地址空间,但是不知道是运行在进程上下文还是中断上下文,因为在中断中访问用户态地址空间context无效,所以想通过in_interrupt()函数来判断是否在进程上下文中。然后我得到大于零的返回值,因此,我会认为我现在处于中断上下文中并且不会访问用户空间。但是,也许有一些函数暗示涉及 local_bh_disable 来增加 thread_info->preempt_count 来禁用 sortirq,但实际上,我们在进程上下文中,只是禁用 softirq,因此,我们可以安全地访问用户态地址空间,但我们犯了一个错误。

最佳答案

preempt_mask.h中有几个有趣的函数:

  • in_irq():硬件中断
  • in_softirq():我们是否处于软中断上下文中?
  • in_interrupt():中断上下文?
  • in_nmi():我们是否处于 NMI 环境中?
  • in_atomic():我们是在原子上下文中运行吗?警告:这个宏不能总是检测原子上下文

请注意,在正常情况下,驱动程序不需要使用任何这些函数。

关于linux - 关于linux内核中的中断上下文、原子上下文和进程上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22317043/

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