【问题标题】:Could someone please help me with some Operating System concepts I cannot grasp - re Interrupts有人可以帮我解决一些我无法掌握的操作系统概念 - 重新中断
【发布时间】:2010-12-04 00:39:32
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: operating-system interrupt interrupt-handling


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-11
        • 1970-01-01
        • 2021-09-18
        • 2012-03-02
        • 1970-01-01
        • 2021-05-30
        • 2011-12-11
        相关资源
        最近更新 更多