根据一些Linux书籍
由用户应用程序发出的服务系统调用的内核代码代表相应的应用程序进程运行,据说是在进程上下文中执行的。中断处理程序在中断上下文中运行。
现在svc和irq是两个例外。
因此,当linux处理svc时,它在进程上下文中,在处理irq时,它处于中断上下文中。是这样映射的吗?
只需对此编辑一次
书中还提到tasklet/ softirqs在中断上下文中运行,而工作队列在进程上下文中运行。那么,这是否意味着tasklet将在CPSR.mode = IRQ中运行?
发布于 2014-05-02 08:28:01
如果我能正确理解你的困惑:
由于Linux是一个功能强大、先发制人、复杂的操作系统,与普通硬件相比,它对诸如处理中断或提供软件陷阱等概念的处理要精细得多。
例如,当出现监控程序调用( SVC )时,硬件切换到SVC模式,那么Linux只需简单地准备一些数据结构来处理它,然后退出SVC模式,这样核心就可以继续在用户模式下服务,从而有可能遇到更多的异常模式而不是阻止它们。
对于IRQ模式也是如此,Linux在IRQ模式下处理最小值。它准备数据结构,比如发生了IRQ,应该调用哪个处理程序等等,然后立即退出IRQ模式,允许在该核心上发生更多的事件。稍后,其他一些内部内核线程可能会进一步处理该中断。由于硬件虽然相对简单,但运行速度非常快,因此中断的处理与许多进程并行运行。
这种高级方法的缺点是它不能保证响应时间要求,或者它的开销在较慢的硬件(如MCU)上变得可见。
因此ARM的异常模式为Linux提供了两样东西:消息类型和支持硬件支持的优先级。
https://stackoverflow.com/questions/23406171
复制相似问题