关于同一来源的中断的事情

时间:2012-06-20 12:57:56

标签: linux linux-kernel kernel interrupt

据说

  

当PIC发送中断时,PIC不会发送另一个中断   从同一个源中断,直到通过一个来确认   I / O端口。这是因为中断处理程序通常会操作   关键数据结构,不会被中断   新的自我调用(即它们不是可重入的)。

我不明白。同一来源和不同来源的中断之间有什么不同吗?

3 个答案:

答案 0 :(得分:7)

您可以从不同的来源获得中断:计时器,硬盘,网络等。其中每个中断都将由不同的中断处理程序处理。

因此,如果来自源(S1)的中断到来,而来自源(S2)的另一个中断正在处理,则没有问题。两个中断都由不同的中断处理程序处理。

另一方面,如果来自源(S)的中断到达而该源的处理程序正在处理另一个中断,则处理程序将无法处理第二个中断,因为它不是在{{3}中设计的方式(即,它不能被中断,处理新的中断,然后返回处理原始中断)。

您可以查看reentrant,了解有关中断在Linux内核中工作方式的详细信息。

答案 1 :(得分:3)

来自同一源的中断必须在与当前活动中断相同的数据结构上运行。来自不同来源的中断将在不同的数据结构上运行。因此,除非它们足够聪明以协调其活动,否则不能同时激活来自同一源的两个中断,并且当前设计会阻止它们处于活动状态,这样程序员就不必担心这种复杂性。

从现实世界中拿一个(人为设想的)例子,想象一张桌子,人们去拿一些东西的门票,根据姓氏,不同的字母范围有不同的职员。两个姓氏以A结尾的人不能同时拿票,因为否则负责他们的职员可能会感到困惑并犯错误。但是,姓氏以A结尾的人可以在姓氏以Z结尾的同时领取门票,因为他们各自的职员在不同的名单和成堆票上操作,所以不会对另一个产生负面影响。

在此示例中,客户姓氏的字母是来源,客户是中断。职员是中断处理程序,名称和一堆票据列表是内核数据结构。

答案 2 :(得分:1)

其他答案很棒,但要记住的另一件事是电平触发中断。如果中断控制器没有禁用它正在触发的中断,那么在ISR有机会告诉硬件停止中断之前,电平触发的中断会立即重新触发。通常情况下,ISR不仅需要重置PIC,还需要告诉它正在与之交谈。如果硬件要继续中断,那么堆栈就会溢出,操作系统就会干脆。