x86 Linux信号如何中断指令流

x86 Linux信号如何中断指令流,linux,x86,operating-system,signals,Linux,X86,Operating System,Signals,Linux信号如何导致X86处理器的指令流中断?那么使用什么CPU设备呢 您有同步和异步中断 同步中断用于处理页面错误、异常等问题。这些问题是由CPU上执行的指令引起的 异步中断来自LAPIC的IPI、定时器中断或I/O-APIC拾取的中断,并路由到右侧LAPIC,然后LAPIC中断处理器。所以这些都是外部事件 但是信号使用哪种X86机制来中断指令流并开始处理信号处理程序呢 它不是异步中断AFAIK,因为中断在内核中处理,信号在用户空间中处理。但是它的行为与异步中断非常相似。内核必须向用户空间发

Linux信号如何导致X86处理器的指令流中断?那么使用什么CPU设备呢

您有同步和异步中断

同步中断用于处理页面错误、异常等问题。这些问题是由CPU上执行的指令引起的

异步中断来自LAPIC的IPI、定时器中断或I/O-APIC拾取的中断,并路由到右侧LAPIC,然后LAPIC中断处理器。所以这些都是外部事件

但是信号使用哪种X86机制来中断指令流并开始处理信号处理程序呢


它不是异步中断AFAIK,因为中断在内核中处理,信号在用户空间中处理。但是它的行为与异步中断非常相似。

内核必须向用户空间发送信号。你是对的,这不仅仅发生在硬件中。这就是为什么信号处理可以尊重用户空间红色区域、
sigaltstack
,以及在没有注册处理程序的情况下的默认操作

一旦内核拥有控制权,它就可以将信号发送到用户空间(或者执行默认操作,忽略它或终止进程)

如果信号是由运行在另一个内核上的进程发送到运行在这个内核上的进程,那么它可能是从IPI处理程序发送到用户空间的,或者是在下一个计时器中断或系统调用时,内核有机会检查挂起的信号

当IPI中断处理程序准备返回用户空间时,它会注意到它将要返回的进程有一个挂起的中断。(对于一种类型的IPI,可以使用特殊情况,也可以运行调度程序,因为我们仍然在内核中)内核可以
iret
到用户空间信号处理程序的地址,而不是使用
iret
返回到硬件为异步中断推送的中断帧。

使用IPI(如果Linux也这么做的话)的全部目的是更快地将控制权转移到内核,而不是等待它在下次调用
schedule()
时注意到挂起的信号



如果信号发送到的进程当前没有在任何内核上运行,那么它要么在有空闲CPU的情况下唤醒该进程,要么该信号就在那里等待该任务,直到某个内核上的调度程序决定在该内核上运行它。在这一点上,它会注意到并发送挂起的信号。

内核必须向用户空间发送信号。你是对的,这不仅仅发生在硬件中。这就是为什么信号处理可以尊重用户空间红色区域、
sigaltstack
,以及在没有注册处理程序的情况下的默认操作

一旦内核拥有控制权,它就可以将信号发送到用户空间(或者执行默认操作,忽略它或终止进程)

如果信号是由运行在另一个内核上的进程发送到运行在这个内核上的进程,那么它可能是从IPI处理程序发送到用户空间的,或者是在下一个计时器中断或系统调用时,内核有机会检查挂起的信号

当IPI中断处理程序准备返回用户空间时,它会注意到它将要返回的进程有一个挂起的中断。(对于一种类型的IPI,可以使用特殊情况,也可以运行调度程序,因为我们仍然在内核中)内核可以
iret
到用户空间信号处理程序的地址,而不是使用
iret
返回到硬件为异步中断推送的中断帧。

使用IPI(如果Linux也这么做的话)的全部目的是更快地将控制权转移到内核,而不是等待它在下次调用
schedule()
时注意到挂起的信号



如果信号发送到的进程当前没有在任何内核上运行,那么它要么在有空闲CPU的情况下唤醒该进程,要么该信号就在那里等待该任务,直到某个内核上的调度程序决定在该内核上运行它。此时,它将注意到并发送挂起信号。

让流程意识到发生了事件不是问题。我的问题是什么触发指令流被中断,从而使信号处理程序代码可以执行。@pveentjer:您已经在问题中描述了IPIs。当内核在CPL=3中执行时到达的IPI将在其IPI处理程序入口点将控制转移到内核,就像任何其他中断一样。一旦内核拥有控制权,显然它可以做任何它想做的事情,包括在用户空间信号处理器地址处对用户空间执行
iret
。但是中断总是在内核空间中处理。用户空间中的信号。有些东西无法计算(可能是我的理解)。@pveentjer:我已经编辑了我最后的评论,请看最后一句。好的。这就是诀窍。它从内核空间的中断开始,然后切换到用户空间来处理信号处理程序。我以为这是用信号阻止的。这就是我无法放置它的原因。让流程知道发生了事件不是问题。我的问题是什么触发指令流被中断,从而使信号处理程序代码可以执行。@pveentjer:您已经在问题中描述了IPIs。当内核在CPL=3中执行时到达的IPI将在其IPI处理程序入口点将控制转移到内核,就像任何其他中断一样。一旦内核拥有了控制权,显然它可以做任何它想做的事情,包括在用户空间信号处理器地址对用户空间执行
iret