为简单起见,我们假设它是在单核架构上。
OS的主要职责是为不同的进程分配CPU时间。
什么时候检查信号?
我的赌注是它在切换上下文时检查它(挂起执行A并等待B),但我没有任何证据..
答案 0 :(得分:2)
如果这就是你的意思,它就不会对他们进行民意调查。当有人要求内核发送信号时,它会中断程序来处理它。
Segfaults由硬件中断触发。中断处理程序要求内核传递消息。超时类似。
这都是事件驱动的。虽然有些事件可以快速而简单地留下信息,以便以后再收集 - 鼠标移动等。接下来发生的事情与系统有关,但它不再是信号。
答案 1 :(得分:2)
遗憾的是,答案取决于操作系统。在大多数情况下,如果不是全部,OS信号是事件驱动的实体。例如,在硬件中断的情况下,硬件将信号发送到中断处理程序,中断处理程序然后执行其操作,通常是在上下文切换时(如您所建议的那样)。
它完全取决于操作系统,但是对于从特定程序发送的信号,通常在上下文切换要执行的进程时发生。然后检查信号。在kill
的情况下,kill命令与进程“绑定”,OS的中断处理程序负责处理它。
操作系统有中断处理程序来处理这类事情。他们定期检查,但它真的取决于操作系统。在kill PID
的特定情况下(我使用此示例是因为您在上面的注释中使用了它),它将检查下次PID被安排继续执行。
简短但不满意的答案:这取决于信号和操作系统。
希望这有帮助! N.S。
资料来源:我之前编写过操作系统,并且我已经采用了多个并发类。