据说
当PIC发送中断时,PIC将不会从同一源发送另一个中断,直到通过I/O端口确认中断为止。这是因为中断处理程序通常操作关键的数据结构,并且经不起新的自身调用的干扰(即它们不是重入的)。
我不明白。同一来源和不同来源的中断之间有什么不同吗?
发布于 2012-06-20 13:15:44
您可以从不同的来源获得中断:计时器、硬盘、网络等。每一个中断都将由不同的中断处理程序处理。
因此,如果来自源的中断(S1)到达,而来自源的另一个中断(S2)正在处理,则没有问题。两个中断都由不同的中断处理程序处理。
另一方面,如果来自源(S)的中断到达,而该源的处理程序正在处理另一个中断,则处理程序将无法处理第二个中断,因为它不是以重入方式设计的(也就是说,它不能被中断,处理新的中断,然后返回处理原始中断)。
您可以查看理解Linux内核,了解在Linux内核中中断工作的详细信息。
发布于 2012-06-20 13:40:47
来自同一源的中断必须与当前活动的中断在相同的数据结构上操作。来自不同来源的中断将在不同的数据结构上运行。因此,除非两个中断足够聪明地协调它们的活动,否则不能同时从同一个源中激活两个中断,而且当前的设计阻止了它们的活动,这样程序员就不必担心这种复杂性了。
以现实世界中的一个(人为的)例子为例,想象一张桌子,人们去取某样东西的票,那里有不同的职员,根据姓氏的不同范围的字母表。两个姓以A结尾的人不能同时取票,否则负责他们的办事员可能会弄错。但是,姓以A结尾的人可以同时取到以Z结尾的人的票,因为他们各自的办事员使用的是不同的名字和成堆的票,所以其中一个不会对另一个产生负面影响。
在本例中,客户姓的字母是源,客户是中断。办事员是中断处理程序,名称列表和票堆是核心数据结构。
发布于 2012-06-20 15:55:05
其他的答案都很棒,但要记住的另一件事是水平触发的中断。如果中断控制器没有禁用它正在触发的中断,那么一个级别触发的中断会在ISR有机会告诉硬件停止中断之前立即重新触发自己。通常情况下,ISR不仅需要重置PIC,还需要告诉harward它正在与其通话以闭嘴。如果硬件继续中断,那么堆栈就会溢出,操作系统就会崩溃。
https://stackoverflow.com/questions/11120115
复制相似问题