Linux 操作系统什么时候检查信号?

Linux 操作系统什么时候检查信号?,linux,signals,Linux,Signals,为了简单起见,让我们假设它位于单核心体系结构上 操作系统的主要职责是为不同的进程分配CPU时间 什么时候检查信号 我打赌它会在切换上下文时检查它(挂起进程A和等待B),但我没有任何证据。如果这是你的意思,它不会为他们投票。当有人要求内核发送信号时,它会中断程序来处理它 SEG故障由硬件中断触发。中断处理程序要求内核传递消息。超时情况也类似 这都是事件驱动的。虽然有些事件很快就发生了,只是留下消息供以后收集——鼠标移动等等。接下来发生的事情非常依赖于系统,但它不再是一个信号。遗憾的是,答案取决于操

为了简单起见,让我们假设它位于单核心体系结构上

操作系统的主要职责是为不同的进程分配CPU时间

什么时候检查信号


我打赌它会在切换上下文时检查它(挂起进程A和等待B),但我没有任何证据。

如果这是你的意思,它不会为他们投票。当有人要求内核发送信号时,它会中断程序来处理它

SEG故障由硬件中断触发。中断处理程序要求内核传递消息。超时情况也类似


这都是事件驱动的。虽然有些事件很快就发生了,只是留下消息供以后收集——鼠标移动等等。接下来发生的事情非常依赖于系统,但它不再是一个信号。

遗憾的是,答案取决于操作系统。在大多数(如果不是全部的话)操作系统信号都是事件驱动实体。例如,在硬件中断的情况下,硬件将信号发送给中断处理程序,然后中断处理程序通常通过上下文切换(如您所建议的)来完成其工作

这完全取决于操作系统,但在从特定程序发送信号的情况下,通常在上下文切换要执行的进程时发生。然后检查信号。在
kill
的情况下,kill命令被“绑定”到进程,操作系统的中断处理程序负责处理它

操作系统有处理这类事情的中断处理程序。他们会定期检查,但这实际上取决于操作系统。在
kill PID
的特定情况下(我使用这个示例是因为您在上面的注释中使用了它),它将在下次计划继续执行PID时进行检查

简短但不令人满意的回答:这取决于信号和操作系统

希望这有帮助! N.S


资料来源:我以前对操作系统进行过编程,并且参加过多个并发类。

在这种情况下,你说的“信号”是什么意思?中断?类似于
kill PID
生成的东西。上下文切换首先是如何完成的?在单核情况下,操作系统在将CPU转移到进程时不应该对CPU有任何控制,对吗?在单核情况下,操作系统仍然控制上下文切换,尽管方式不同。它很可能使用循环队列来知道何时切换进程(简单的解决方案)。单核并不意味着单进程:)我不知道有哪个程序集可以在一段时间后将控制权传输回操作系统,是吗?(我打赌操作系统一定使用过这种程序集,但我们很少知道…)如果你不编写操作系统,就不要在程序集中编写它。它是特定于硬件的。您可以查看特定体系结构的
sched_yield
实现,尽管它可能是在SCI中定义的。@Je Rog:OS设置平台硬件以生成一个常规中断,称为定时器滴答中断。这允许操作系统定期重新控制CPU,即使用户进程不执行系统调用。