【问题标题】:Linux Process Context and SVC call in ARMARM 中的 Linux 进程上下文和 SVC 调用
【发布时间】:2014-05-01 10:46:48
【问题描述】:

根据一些 Linux 书籍

为用户应用程序发出的系统调用提供服务的内核代码 代表相应的应用程序进程运行,据说 在进程上下文中执行。中断处理程序在中断中运行 上下文。

现在 svc 和 irq 是两个例外。

因此,当 linux 处理 svc 时,它处于进程上下文中,而当它处理 irq 时,它处于中断上下文中。是这样映射的吗?

只需修改一次

书中还提到,tasklet/softirqs 在中断上下文中运行,而工作队列在进程上下文中运行。那么是不是意味着 tasklet 会在 CPSR.mode = IRQ 下运行?

【问题讨论】:

标签: linux linux-kernel arm


【解决方案1】:

如果我以正确的方式理解您的困惑:

由于 Linux 是一个功能强大、抢占式、复杂的操作系统,因此与裸机硬件相比,它在处理中断或服务软件陷阱等概念方面具有更精细的处理能力。

例如,当主管调用 (svc) 发生硬件切换到 SVC 模式时,Linux 处理这个就像准备一些数据结构以进一步处理它然后退出 SVC 模式一样简单,这样核心就可以继续在用户模式下服务,从而使其成为可能运行更多的异常模式而不是阻止它们。

IRQ 模式也一样,Linux 在 IRQ 模式下处理最少。它准备数据结构,例如发生了哪个 IRQ,应该调用哪个处理程序等,然后立即退出 IRQ 模式以允许在该核心上发生更多。稍后,其他一些内部内核线程可能会进一步处理该中断。由于硬件虽然相对简单,但运行速度非常快,因此中断处理与许多进程并行运行。

这种高级方法的缺点是它不能保证响应时间要求,或者它的开销在 MCU 等较慢的硬件上变得可见。

所以 ARM 的异常模式为 Linux 提供了两件事:消息类型和硬件支持支持的优先级。

  • 消息类型是异常模式的含义,如果它是 SVC、IRQ、FIQ、DATA ABORT、UNDEFINED INSTRUCTION 等。所以当硬件运行到异常模式时,Linux 隐含地知道它正在处理什么。
  • 优先级在于提供功能强大且响应迅速的硬件,例如,系统应该能够在处理一些不太重要的主管调用时确认中断。
  • 硬件支持是为了更容易和更快地处理以上两个。例如,一些寄存器被存储起来,或者有一个额外的系统模式可以更轻松地处理可重入 IRQ。

【讨论】:

  • 很好的描述。谢谢
  • 用类似的补充更新了问题。你能评论一下吗
  • @mSO 我不知道这到底意味着什么。但我想你可以这样想,任何可以安排的东西都不能在 ARM:IRQ 模式下运行,任何需要时间的东西都不应该在 ARM:IRQ 模式下运行。上下文可能意味着地址空间等,所以我不确定。书籍使用的术语也可能与 ARM 的术语发生冲突。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
相关资源
最近更新 更多