Operating system 从头开始中断处理程序

Operating system 从头开始中断处理程序,operating-system,interrupt-handling,Operating System,Interrupt Handling,我想从零开始理解AMD64体系结构的操作系统开发,并且达到了一定的目的。但是,我需要学习如何附加中断处理程序。我还没有找到任何好的教程,用例子一步一步地描述这个过程。我读了处理器手册。但是,我需要一个C代码示例 有人能推荐一个好的来源或者举个简单的例子吗 谢谢。你的问题不够具体,无法给出一个很好的答案。你说的是一般的中断处理程序还是特定操作系统的中断处理程序?而且,它非常依赖于架构。某些处理器产生多个中断级别(具有优先级),而其他处理器只有一个中断级别。然后是NMI中断,通常由硬件生成 另外,您

我想从零开始理解AMD64体系结构的操作系统开发,并且达到了一定的目的。但是,我需要学习如何附加中断处理程序。我还没有找到任何好的教程,用例子一步一步地描述这个过程。我读了处理器手册。但是,我需要一个C代码示例

有人能推荐一个好的来源或者举个简单的例子吗


谢谢。

你的问题不够具体,无法给出一个很好的答案。你说的是一般的中断处理程序还是特定操作系统的中断处理程序?而且,它非常依赖于架构。某些处理器产生多个中断级别(具有优先级),而其他处理器只有一个中断级别。然后是NMI中断,通常由硬件生成

另外,您需要知道中断是如何发生的?我希望这不是在讨好。。。但我想到一个男人写信时的打断。电话铃响了,他停止了写信,接了电话,打完电话后,他又回到原来的地方继续写信。(呼叫是中断,而对中断的处理是他应答呼叫)

让我们以一个简单的中断为例,比如一个由计时器生成的中断。为了方便起见,我将提到Amiga中断,因为它们本质上非常原始,而在某些体系结构中,在应用程序处理中断之前,会有一些操作系统干预

首先要了解硬件。为了让你从计时器中得到中断,你必须启用它。通常有一个硬件寄存器来完成这项工作。此寄存器将屏蔽启用的中断和未启用的中断。现在,如果您启用了此中断,当它发生时,处理器将停止它正在执行的操作,执行堆栈交换(到主管堆栈),并在特定地址调用中断处理例程或向量。要自己处理这个中断,需要编写一个处理程序,并将其地址写入处理程序地址或向量。然后你的例行程序就会被调用

您的例程需要了解这样一个事实,即您必须处理中断的时间可能有时间限制,并且您可能会被更高优先级的中断中断中断,您必须为中断提供服务,或者将中断传递给您之前的处理程序

在中断处理例程中,您应该。。。检查中断来自何处,因为可能有许多源,然后您可以决定是否要处理中断。您可能需要查询硬件设备以确定中断源。如果它是您想要处理的,那么在执行您想要执行的任何操作时,您必须确认中断并告诉硬件您已经为中断提供了服务。通常会有一个特定的寄存器来执行此操作。然后,您可以退出中断处理程序,但前提是您已经处理了中断

当您使用rte或rti等指令退出中断处理程序时,堆栈将再次从管理器堆栈交换回用户堆栈

您需要知道,某些体系结构构建了某些堆栈框架,它们几乎都彼此不同。然而,通常情况下,您总是会在堆栈上找到状态寄存器和程序计数器,但您可能会在堆栈(管理器堆栈)上找到更多

程序计数器将是从处理程序退出时跳转到的返回地址。

连接中断处理程序的一般方法是通过处理器的调度表。此结构有多种名称,包括中断调度表

操作系统需要获取中断处理程序例程的地址,并将其加载到调度表中相应的插槽中。表格条目的格式取决于所使用的系统

下面是一个经历该过程的人的示例:


应该在处理器手册中详细说明,但我们不知道您使用的是什么处理器,因此很难找到教程。太宽泛了。硬件、中断处理程序和操作系统之间的相互作用对于一个问题来说太复杂了,需要一本书作为答案。驱动程序通常必须符合某种模式,尤其是在可加载的情况下,而且整个驱动程序都依赖于体系结构、硬件和操作系统。仅仅描述driverOS缓冲和信号是值得一读的书。你知道书的名字吗。根据我的一本书,中断处理是操作系统开发的一部分。如果这是正确的,为什么中断处理取决于操作系统。我想我不能充分理解这个话题。谢谢你的回复。然而,我需要一个代码示例来理解这个主题。我已经更新了我的问题。然后你必须看处理器的手册。其中将解释用于启用/禁用中断的硬件寄存器、如何确认中断以及最重要的是构建的堆栈帧。此外,大多数中断处理程序都是用汇编语言编写的,而不是用C语言编写的,除非您有一个编译器,其中包含类似于这样的内部函数。这是因为在C语言中,虽然可以访问硬件,但由于中断处理的时间限制,您实际上没有访问硬件的语义(因此)。此外,我上面的回答实际上解释了一步一步的过程,这就是它在AMD64上的发生方式,您只需要细节,但过程是一样的。我想我理解你的解释。非常感谢。但我想看一些代码。我也找不到assambly代码。你能为我提供一个assambly代码示例的源代码吗。。谷歌搜索“AMD64中断驱动程序”给出:“大约3330