【发布时间】:2014-05-01 10:46:48
【问题描述】:
根据一些 Linux 书籍
为用户应用程序发出的系统调用提供服务的内核代码 代表相应的应用程序进程运行,据说 在进程上下文中执行。中断处理程序在中断中运行 上下文。
现在 svc 和 irq 是两个例外。
因此,当 linux 处理 svc 时,它处于进程上下文中,而当它处理 irq 时,它处于中断上下文中。是这样映射的吗?
只需修改一次
书中还提到,tasklet/softirqs 在中断上下文中运行,而工作队列在进程上下文中运行。那么是不是意味着 tasklet 会在 CPSR.mode = IRQ 下运行?
【问题讨论】:
-
是的,这是正确的。 IRQ 主要由设备生成,而 svc 总是由用户应用程序生成。
-
进程上下文是指在svc模式下?
-
它没有回答你的问题,但这个链接可能会有所帮助。我正在做一些简单的 SVC 和 IRQ 处理:ellcc.org/blog/?p=3028,这里有一个代码链接:ellcc.org/viewvc/svn/ellcc/trunk/baremetal/arm
-
如果说裸机,SVC 处理程序以特权模式和处理程序模式运行。它不在线程模式下运行。因此,如果我了解裸机中断或异常,它们都在处理程序模式下运行。所以,它是一种 IRQ 处理程序。查看裸机中的向量表以交叉验证这一点。
标签: linux linux-kernel arm