我目前正在学习操作系统理论模块,有一些概念无法理解——这是提问的正确地方吗?
我的主要问题是关于中断的。当 CPU 检测到中断时,我知道它必须找出中断的来源。我的理解如下,有人能告诉我这是否正确,并解释一下我知识中的一些空白吗?
CPU 可以通过查询所有对象来识别中断源,以检测中断的来源,但这些基于 I/O 的问题需要很长时间。相反,它使用中断周期,并期望数据总线上有中断标识符。如果是 8 位数据总线,则有 256 个中断级别(即 2^8)。(为什么是这样?)
因此,为每个可能的中断级别编写一个中断服务程序 (ISR),并将其存储在由处理器标准化的固定位置(中断向量)的表中。在我的笔记中,写着“在获取地址之前必须知道位置”(这是什么意思?)
作为中断周期的一部分接收的中断级别标识符被用作中断向量的索引(有人可以稍微解释一下吗?)我的理解是,一个值,中断级别标识符被传递给CPU并用于指向中断向量。
另外,当说中断被“服务”时,它是什么意思?
非常感谢,很抱歉写了这么长的段落,我只是对其中的很多方面感到有点困惑!
答案1
当说中断被“服务”时,这是什么意思?
当请求中断的事情得到处理时,它就被称为“服务”。这可能很简单,比如从键盘读取下一个字符,或者将下一个数据包发送到以太网卡。有些中断比其他中断更重要,因此可以对它们进行优先级排序。
可以找到一篇有用的文章这里。
作为中断周期的一部分接收的中断级别标识符被用作中断向量的索引
正如您所提到的,当发生中断时,CPU 基本上会问“是谁做的?”,中断设备会将其中断标识符放在数据总线上。然后 CPU 会获取此号码并在 ISR 表中查找,以将执行转移到处理程序。
中断是处理器暂停当前程序并将控制权转交给新程序(称为中断服务例程 (ISR))的请求。为实现最大速度而设计的特殊硬件机制会强制执行转移。ISR 会确定中断的原因,采取适当的措施,然后将控制权返回给最初暂停的进程。
答案2
相反,它使用中断周期,并期望数据总线上有中断标识符。如果它是 8 位数据总线,则有 256 个中断级别(即 2^8)。(为什么会这样?)
另一种方法是在 CPU 上为您想要支持的每种 IRQ 类型或级别设置一个引脚。68000 就是这样做的,它们有 3 个中断引脚,允许您表示 IRQ 级别 0 (NMI) 到 7。英特尔 CPU 只有 1 个 IRQ 引脚,并期望总线上的地址(由称为 PIC 的中间设备提供)提供其类型(我认为在英特尔上,这个“地址”,实际上是一个索引,直接进入寄存器。一些 PIC 实际上可以直接告诉 CPU 要转到哪个地址)。
我相信它们有一个单独的 NMI 引脚(并且还有其他具有自己引脚的中断,例如 SMI、IPI,并且重置是一种中断)。
因此,为每个可能的中断级别编写一个中断服务例程 (ISR),并将其存储在由处理器标准化的固定位置(中断向量)的表中。
您不需要编写 256 个 ISR,您可以创建一个简单“从中断返回”的“存根”,从而有效地忽略它。
我的笔记中写着“获取地址之前必须知道位置”(这是什么意思?)
这有点含糊 - 我不知道这是否意味着您需要知道向量表的基地址,或者只是说如果您不知道所涉及的 IRQ 号,您就无法知道 ISR 的地址。
作为中断周期的一部分接收的中断级别标识符被用作中断向量的索引(有人可以稍微分解一下吗?)。
PIC 从设备接收 IRQ。此设备设置为触发 IRQ #3。CPU 在从 PIC 接收到 IRQ 后,在总线上看到 3,并跳转到其本地 IRQ 向量表中的地址(索引 3)。
我的理解是,一个值,中断级别标识符被传递给CPU并用于指向中断向量。
正确的。
另外,当说中断被“服务”时,它是什么意思?
通常,您不希望 CPU 在处理中断时被中断。CPU 和 CPU + PIC 组合在收到 IRQ 后会采取各种措施来禁用中断。因此,您必须在处理完毕后“宣布”。在 Intel 上,您必须重新启用系统中断启用位,并告诉 PIC 您已完成 IRQ 服务。PIC 会“阻止”进一步的 IRQ,直到 CPU 告诉它已完成。
为了简化起见,我省略了上面的一些细节,也因为我已经很久没有研究过上面的内容了,但我希望这会有所帮助。