在软件中断期间cpu是否切换到中断上下文?

时间:2013-12-15 11:44:13

标签: linux linux-kernel linux-device-driver device-driver

我知道当发生系统调用时会产生软件中断。该软件中断使cpu模式从用户模式切换到内核模式。根据我的理解,在硬件中断期间,上下文切换从用户(进程)上下文发生到中断上下文。但在软件中断期间是否也会发生同样的事情? 我也尝试了很多文档,但我无法推断出满意的答案。

2 个答案:

答案 0 :(得分:1)

系统调用中断处理程序在中断上下文中运行,就像任何其他中断处理程序一样,但它只是切换到内核代码然后立即离开中断上下文。

请注意,大多数现代CPU都没有使用软件中断实现系统调用,但使用SYSCALL之类的内容。

答案 1 :(得分:0)

对于ARM处理器和Linux内核,

在软件中断控制期间,跳转到http://lxr.free-electrons.com/source/arch/arm/kernel/entry-common.S中定义的vector_swi例程。

346 / * ============================================ ================================= 347 * SWI处理程序
348 * ------------------------------------------------ -----------------------------
349 * /
350个
351 .align 5
352 ENTRY(vector_swi)
353 #ifdef CONFIG_CPU_V7M
354 v7m_exception_entry
355 #else
356 sub sp,sp,#S_FRAME_SIZE



461 sub lr,lr,#4
462 str lr,[sp,#S_PC]
463 b ret_fast_syscall
464 #endif
465 ENDPROC(vector_swi)

当前执行上下文存储在执行swi指令的同一进程的堆栈中。并且系统开始执行上面定义的例程。