ARM中的Linux进程上下文和SVC调用

时间:2014-05-01 10:46:48

标签: linux linux-kernel arm

根据一些Linux书籍

  

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

现在svc和irq是两个例外。

因此,当linux正在处理svc时,它处于进程上下文中,而在处理irq时它处于中断上下文中。它是如何映射的?

只需编辑一次

书中还提到,tasklets / softirqs在中断上下文中运行,而工作队列在Process上下文中运行。那么它是否意味着tasklet将在CPSR.mode = IRQ中运行?

1 个答案:

答案 0 :(得分:0)

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

由于Linux是一种功能强大,抢占式,复杂的操作系统,因此与裸机硬件相比,它可以更好地处理中断或处理软件陷阱等概念。

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

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

这种先进方法的缺点是它不能保证响应时间要求,或者在像MCU这样较慢的硬件上可以看到它的开销。

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

  • 消息类型是什么异常模式,如果它是SVC,IRQ,FIQ,DATA ABORT,UNDEFINED INSTRUCTION等等。因此当硬件进入异常模式时,Linux会隐含地知道它正在处理什么。
  • 优先考虑的是提供功能强大且响应迅速的硬件,例如系统应该能够在处理一些不太重要的主管呼叫时确认中断。
  • 硬件支持可以更轻松,更快速地处理上述两种情况。例如,一些寄存器被存储,或者有一个额外的系统模式可以更容易地处理重入IRQ。