English 中文(简体)
中断屏蔽:为什么?
原标题:Interrupt masking: why?

我正在读关于中断的文章。可以通过一个特殊的中断掩码来暂停非关键中断。这被称为中断屏蔽。我不知道什么时候/为什么你可能想要或需要暂时暂停中断?可能是信号量,还是在多处理器环境中编程?

最佳回答

操作系统在准备运行自己的“让我们编排世界”代码时会这样做。

例如,在某个时刻,操作系统线程调度程序具有控制权。它在让线程运行之前准备好处理器寄存器和所有其他需要做的事情,以便为该进程和线程设置环境。然后,在让该线程运行之前,它设置一个计时器中断,以便在它打算让线程在CPU上运行的时间过去后引发。

在该时间段(量子)过去之后,中断被引发,OS调度器再次获得控制。它必须弄清楚下一步需要做什么。要做到这一点,它需要保存CPU寄存器的状态,以便知道如何撤消执行代码的副作用。如果在保存状态时由于任何原因引发了另一个中断(例如,某些异步I/O完成),这将使操作系统处于其世界而不是处于有效状态的情况下(实际上,保存状态需要是一个原子操作)。

为了避免陷入这种情况,操作系统内核因此在执行任何需要原子化的操作时禁用中断。在它完成了任何需要做的事情并且系统再次处于已知状态之后,它重新启用中断。

问题回答

我曾经在ARM板上编程,该板可能会发生大约10次中断。我写的每一个特定的程序从来没有对其中的4个以上感兴趣。例如,板上有2个定时器,但我的程序只使用了1个。我会屏蔽第二个定时器的中断。如果我没有屏蔽计时器,它可能已经被启用并继续进行中断,这会减慢我的代码速度。

另一个例子是,我将使用UART接收REGISTER完全中断,因此永远不需要发生UART接收BUFFER完全中断。

我希望这能让您了解为什么要禁用中断。

除了已经给出的答案之外,还有一个优先级因素。有些中断你需要或希望能够尽快做出响应,还有一些中断你想知道,但只有在你不太忙的时候。最明显的例子可能是重新填充DVD刻录机上的写入缓冲区(如果你不及时这样做,一些硬件只会错误地写入DVD),而不是处理来自网络的新数据包。在接收到前者的中断后,您可以禁用后者的中断,并在填充缓冲区期间保持禁用状态。

在实践中,相当多的CPU具有直接内置在硬件中的中断优先级。当中断发生时,为较小的中断设置禁用标志,并且通常在读取中断向量和跳转到相关地址的同时设置该中断。在中断处理程序结束之前,断言接收到中断也会隐式地屏蔽该中断,这会产生很好的副作用,即放松对中断硬件的限制。例如,您可以简单地说,信号高触发中断,并让外部硬件决定要将线路保持高电平多长时间,而不用担心无意中触发多个中断。

在许多过时的系统(包括z80和6502)中,中断往往只有两个级别——可屏蔽和不可屏蔽,我认为这就是启用或禁用中断的语言的来源。但是,即使早在最初的68000,你也有八个级别的中断和CPU中的当前优先级,这决定了哪些级别的传入中断将被允许生效。

想象一下,您的CPU现在处于“int3”处理程序中,此时发生“int2”,而新发生的“int 2”与“int 3”相比优先级更低。我们将如何处理这种情况?

一种方法是在处理“int3”时,我们屏蔽掉其他优先级较低的中断器。也就是说,我们看到“int2”正在向CPU发出信号,但CPU不会被它中断。在我们完成对“int3”的处理后,我们从“int 3”返回,并揭开优先级较低的中断器的面纱。

我们返回的地方可以是:

  1. Another process(in a preemptive system)
  2. The process that was interrupted by "int3"(in a non-preemptive system or preemptive system)
  3. An int handler that is interrupted by "int3", say int1 s handler.

在情况1和2中,因为我们取消了低优先级中断器的掩码,并且“int2”仍在向CPU发出信号:“嗨,有一件事需要您立即处理”,那么CPU在执行进程中的指令时,将再次中断以处理“int2

在情况3中,如果“int2”的优先级高于“int1”,则CPU在执行来自“int1的处理程序的指令时,将再次中断,以处理“int 2”。

否则,“int1”的处理程序将在不中断的情况下执行(因为我们还屏蔽了优先级低于“int1“的中断程序),CPU将在处理“int1(int1)”并取消屏蔽后返回进程。那时将处理“int2”。





相关问题
What resources are shared between threads?

Recently, I have been asked a question in an interview what s the difference between a process and a thread. Really, I did not know the answer. I thought for a minute and gave a very weird answer. ...

Random access of multiple files and file caching

This relates to some software I ve been given to "fix". The easiest and quickest solution would make it open and read 10 random files out of hundreds and extract some very short strings for processing ...

What form is DLL & what makes it processor dependent

I know DLL contains one or more exported functions that are compiled, linked, and stored separately.. My question is about not about how to create it.. but it is all about in what form it is stored.. ...

Thread behavior on multicore machines

Does the threads of a single process run in parallel on a multi-core machine on windows XP? Is the behavior same on different windows versions (windows server editions) I have heard that only threads ...

How to check which Operating System?

How can I check OS version in a batch file or through a vbs in an Windows 2k/2k3 environment ? You know ... Something like ... : "If winver Win2k then ... or if winver Win2k3 then ....

热门标签