【发布时间】:2013-12-15 11:44:12
【问题描述】:
我知道当系统调用发生时会产生软件中断。该软件中断使 cpu 模式从用户模式切换到内核模式。据我了解,在硬件中断上下文切换期间,发生从用户(进程)上下文到中断上下文。但是在软件中断期间也会发生同样的事情吗? 我也尝试了很多文档,但我无法推断出满意的答案。
【问题讨论】:
标签: linux linux-kernel linux-device-driver device-driver
我知道当系统调用发生时会产生软件中断。该软件中断使 cpu 模式从用户模式切换到内核模式。据我了解,在硬件中断上下文切换期间,发生从用户(进程)上下文到中断上下文。但是在软件中断期间也会发生同样的事情吗? 我也尝试了很多文档,但我无法推断出满意的答案。
【问题讨论】:
标签: linux linux-kernel linux-device-driver device-driver
系统调用中断处理程序在中断上下文中运行,就像任何其他中断处理程序一样,但它只是切换到内核代码,然后立即离开中断上下文。
请注意,大多数现代 CPU 不会使用软件中断实现系统调用,而是使用 SYSCALL 之类的东西。
【讨论】:
如果是 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章
第353章 #ifdef CONFIG_CPU_V7M
354 v7m_exception_entry
第355章
第356章
.
.
.
461 子 lr,lr,#4
462 str lr,[sp,#S_PC]
463 b ret_fast_syscall
第464章
第465章
当前执行上下文存储在执行 swi 指令的同一进程的堆栈中。然后系统开始执行上面定义的例程。
【讨论】: