有一个程序可以进行各种系统调用,其中一些是IO,另一些则不是;我们来举几个例子:
当一个进程在执行系统调用时被杀死(SIGKILL)时,操作系统内核(Linux 2 + / FreeBSD7 + / OSX)会发生什么?特别是:当进程终止即将来临时,每个系统调用都知道如何清理自己吗?
答案 0 :(得分:1)
当操作系统内核(Linux 2 + / FreeBSD7 + / OSX)发生时会发生什么 一个进程在执行系统时被杀死(SIGKILL) 调用
进程在内核模式的上下文中执行系统调用。此时,如果内核收到任何中断(信号来自软件中断),它将检查该特定中断的优先级。软件中断在所有类型的中断中具有最低优先级,因此它将继续执行直到完成关键路径执行。此时内核将存储其上下文并确定中断的原因和优先级并为中断服务(在这种情况下是终止/终止程序)。
然而,这些概念有点复杂,可能因系统而异。您可能希望参考由Maurice J Bach撰写的伟大的书“ UNIX操作系统的设计”,其中详细描述了这些概念和实现。
特别是:每个系统调用都知道如何清理 当流程终止即将到来时?
是的,因为系统调用是代表进程在内核模式的上下文中执行的。 因此,当进程开始中止/终止时,它们总是具有清理逻辑。如果用户模式程序由于意外原因而终止,则内核会确保它清理该特定进程的所有资源。这是关于内核的好事。