2

抱歉,我不确定这是不是一个合适的地方问这个问题,但我希望它是可以接受的,如果不是很抱歉!:)

我目前正在做一个操作系统理论的模块,但我有一些我无法掌握的概念——这是提问的正确地方吗?

我的主要问题是关于中断。当 CPU 检测到有中断发生时,我明白它必须找出这个中断的来源。我的理解如下,谁能告诉我这是否正确,并解释我的知识空白?

为了让 CPU 检测中断的来源,它可以查询所有对象以识别源,但这些基于 I/O 的问题需要很长时间。相反,它使用中断周期,并期望数据总线上有一个中断标识符。如果是8位数据总线,则有256个中断级(即2^8)。(为什么是这样?)

因此,为每个可能的中断级别编写中断服务程序 (ISR),并将其存储在由处理器标准化的固定位置(中断向量)的表中。在我的笔记中说“在获取地址之前必须知道位置”(这是什么意思?)

作为中断周期的一部分接收到的中断级别标识符用作中断向量的索引(有人可以分解一下吗?)。我的理解是一个值,中断级别标识符被传递给CPU并用于指向中断向量。

另外,当一个中断被称为“服务”时是什么意思?

非常感谢您,对于长篇大论感到抱歉,我对此的许多方面感到有些困惑!

4

2 回答 2

3

中断工作的很大一部分是允许 CPU 被其他设备(例如收到数据包的网卡)中断。我发现首先理解这个用例更容易。

当网卡需要告诉 CPU 收到了一些数据时,它会向 CPU 上的“中断引脚”发送一个数字。通常这将是一个 8 位数字。该数字称为“中断级别”。

CPU 的构建方式允许它跳转到一些代码来处理中断,然后返回它正在做的事情。这是内置硬件,所以它必须很简单:有一个表将每个中断级别与要调用的函数的地址相匹配。该功能称为“中断服务程序”。正如您所说,该表的位置是标准化的,因为它是在表中查找的硬件(因此它的地址在芯片中被硬编码)。

服务中断只是意味着运行与中断相关的代码:对于网卡,这意味着从网卡读取数据包并将其复制到内存(大概是网络上的内存)卡本身是有限的)。您询问“作为中断周期的一部分接收的中断级别标识符被用作中断向量的索引”。这只是我们刚刚所做的另一种说法:来自卡的信号(中断级别)被 CPU 用作表中的索引(“中断向量”)。在那里,它找到要运行的代码的地址;该代码由您的网卡的设备驱动程序(或者可能由操作系统)放置在那里。

当 ISR 函数返回时,CPU 将寄存器恢复为收到中断时的状态,因此可以继续执行,就好像什么都没发生一样。一种思考方式是,中断是一种允许 CPU 一次运行多个程序(您的程序和网卡驱动程序)的机制。

中断的相同概念也可用于“软件中断”,其中信号不是来自 CPU 外部,而是来自内部。

于 2010-12-04T00:53:47.073 回答
0

嗯,你的问题肯定有很多问题。让我谈谈其中之一。

据说中断是服务,哦,等一下,我必须让狗出去。,当中断完成的“工作”时被冰冻。

在我愚蠢的示例案例中,我被狗在门口抓挠打断了。我停止了我正在做的事情(在输入服务一词的中间),让狗出去,然后继续打字。

我“服务”了狗的中断请求。

于 2010-12-04T00:57:38.390 回答