Linux kernel 系统调用与中断上下文

Linux kernel 系统调用与中断上下文,linux-kernel,system-calls,Linux Kernel,System Calls,系统调用使用软件中断(中断向量128)实现。在roberts的情书《Linux内核开发》中,有人写道中断句柄发生在中断上下文中。它还写道,系统调用在进程上下文中运行,但系统调用句柄实际上是一个“中断句柄”,那么为什么它在不同的上下文中运行呢?您的平台实现与Linux内核的设计混淆了 当您谈论Linux内核时,中断上下文是代码“独立”运行的地方,没有附加任何进程-通常用于处理来自设备的中断。流程上下文是来自userland流程的系统调用的结果,其中运行的代码“附加”到流程 当您谈论平台实现时,中断

系统调用使用软件中断(中断向量128)实现。在roberts的情书《Linux内核开发》中,有人写道中断句柄发生在中断上下文中。它还写道,系统调用在进程上下文中运行,但系统调用句柄实际上是一个“中断句柄”,那么为什么它在不同的上下文中运行呢?

您的平台实现与Linux内核的设计混淆了

当您谈论Linux内核时,中断上下文是代码“独立”运行的地方,没有附加任何进程-通常用于处理来自设备的中断。流程上下文是来自userland流程的系统调用的结果,其中运行的代码“附加”到流程


当您谈论平台实现时,中断上下文可能仅仅意味着处理器处于某种中断处理程序模式。我对您的平台了解不够,无法提供任何具体信息。

比如说x86。中断处理程序和系统调用的实现方式相同。CPU开始执行IDT中与中断向量相关的段中的代码。系统调用处理程序在逻辑上绑定到用户land进程(我假设使用当前宏)。对于硬件中断,类似的方式只是另一个中断向量号,当前宏仍然指向中断进程。内核如何区分这两个实体,因为它们显然不同。我不清楚具体的实现,但我想内核会处理中断,找出导致中断的原因,并调用正确的处理程序。对于系统调用,它可能重新启用抢占并跳转到syscall处理程序,而对于设备中断,它可能跳转到中断处理程序(在这里使用当前宏是没有意义的)。