linux - 为什么 linux 和 unix 的中断服务方式存在设计差异?

标签 linux unix linux-kernel operating-system

在 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/

相关文章:

php - 用 php 启动一个守护进程

linux -/proc/<pid> 什么时候被删除?

python - 后台运行python,需要先获取用户输入

linux - 分别处理 stdout 和 stderr 添加时间戳 : Wrong order

linux - 没有文件描述符的进程

linux - 发现之间的区别。 –name *.txt 并找到 . –名称 "*.txt"

shell - 仅当它们匹配模式时才删除重复的行

linux - 通过等待队列从计时器处理程序发出轮询/选择事件

multithreading - 有没有办法从进程的 task_struct 中找出哪个用户拥有进程?

c++ - Linux 共享库被加载两次