在 Maurice 的 The Design of the Unix Operating System 一书中提到,中断是在正在运行的进程的上下文中得到服务的,因为它不会产生新的进程来服务中断。
因此,在 Unix 中,处理器正在做以下两件事之一: 1. 在用户空间,在一个进程中执行用户代码 2. 在内核空间中,在进程上下文中,代表特定进程执行。
但是,在包括 Linux 在内的许多操作系统中,中断处理程序并不在进程上下文中运行。相反,它们在不与任何进程关联的特殊中断上下文中运行。这种特殊上下文的存在只是为了让中断处理程序快速响应中断,然后退出。
因此,在 Linux 中,处理器正在做以下三件事之一: 1. 在用户空间,在一个进程中执行用户代码 2. 在内核空间中,在进程上下文中,代表特定进程执行。 3. 在内核空间中,在中断上下文中,与进程无关,处理中断。
我想了解为什么会发生这种设计变化?如果我们在运行进程的上下文中服务中断,会不会更快?
最佳答案
听起来您对术语感到困惑。我怀疑你所说的“特殊中断上下文”(当然 Linux 文档使用该术语)实际上只是硬件制造的中断堆栈的转变。我怀疑 Linux 的“中断上下文”只是为了禁用不应在中断中完成的特定于进程的事件。
如果任何操作系统在中断期间执行实际的进程上下文切换(因此被中断的进程正在为中断服务),我会感到震惊。
关于linux - 为什么 linux 和 unix 的中断服务方式存在设计差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36916548/