ARM 中的 Linux Process Context 和 SVC 调用

标签 linux linux-kernel arm

根据一些 Linux 书籍

kernel code that services system calls issued by user applications runs on behalf of the corresponding application process and is said to be executing in process context. Interrupt Handlers run in interrupt context.

现在svc和irq是两个异常(exception)。

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

只需对此进行一次编辑

书中还提到,tasklets/softirqs 在中断上下文中运行,而 workqueues 在进程上下文中运行。那么这是否意味着 tasklet 将以 CPSR.mode = IRQ 运行?

最佳答案

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

由于 Linux 是一个强大的、先发制人的、复杂的操作系统,与裸机硬件相比,它可以更好地处理概念,例如处理中断或服务软件陷阱。

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

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

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

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

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

关于ARM 中的 Linux Process Context 和 SVC 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23406171/

相关文章:

linux - 使用 AD 的 Samba 共享问题

python - 使用套接字AF_PACKET/SOCK_RAW,但告诉内核不要发送RST

ios - 是否有同时支持armv7和arm64的GoogleAnalyticsServicesIOS sdk?

c - ARM板什么时候安装操作系统?调用端口地址会映射到真实地址还是虚拟地址?

linux - 如何在驱动程序代码内将 Linux 中的内核空间 VA 转换为 PA?

android - ABIs : armeabi-v7a in the android version detail mean? 是什么,请提供如何使用它的内部细节?

linux - 在两个地方查找文件的位置 bash linux

c - SIGSEGV 处理程序无法退出

linux - 我无法从 'script2.sh' 运行 'script1.sh'(它们在同一文件夹中并具有 755 权限)

linux - fork() & 内存分配行为