13

进入中断处理程序时,我们首先在该 cpu 上“禁用中断”(使用类似于 x86 上的 cli 指令的东西)。在中断被禁用期间,假设用户按下键盘上的字母“a”,这通常会导致中断。但是由于中断被禁用,这是否意味着:

  1. 永远不会调用“a”的中断处理程序,因为在临界区中禁用了中断或
  2. 中断将由操作系统处理但延迟,直到再次启用中断。具体来说,如果用户第一次按下“a”是在中断被禁用的时候,用户是否需要再次按下“a”?
4

5 回答 5

8

通常,一个中断由硬件“排队”。

[中断通常只是一个可以坚持的逻辑门;一旦打开,它会保持一段时间。]

如果用户仅在中断被禁用的时间间隔内点击“a”一次,则在重新启用中断时它将注册为中断。

如果用户在中断被禁用的时间间隔内以某种方式设法击中了两次“a”,则在启用中断时将注册为中断。是第一个还是第二个取决于确切的逻辑门配置。

于 2010-08-06T20:35:03.213 回答
6

答案是这取决于您是否已经在处理键盘中断。

大多数中断服务例程 (ISR) 在它们的终止处都有代码,通知硬件它已被“服务”。在键盘控制器的情况下,向其写入命令以确认接收到的字节。在确认时,键盘控制器硬件停止使用电力来发出中断条件信号。

如果您正在处理非键盘中断,比如说火警中断,那么电断言中断的键盘硬件将在按键被按下时触发。电信号被忽略,直到 CPU 再次启用中断。在火警中断服务结束时,火警 ISR 确认任何数据并重新启用 CPU 上的中断。CPU 立即进入中断,因为键盘控制器仍在电信号中发出中断条件。

如果您正在处理键盘中断,并且用户在执行键盘 ISR 期间快速键入第二次击键,则可能会丢失第二次击键中的数据,或者稍后接收数据(如果有的话)。特别是,如果 ISR 通过确认重置键盘控制器,但 ISR 实际上并未从键盘控制器接收到所有可用字节,那么这是一个问题。

通常,ISR 将首先处理触发其激活的中断,然后在确认中断后,轮询设备以查看自第一次中断以来它是否接收到更多数据。如果是,则生成软件中断以重新进入 ISR 并为设备提供服务。

于 2010-08-06T20:53:22.750 回答
2

简单的答案是中断会自动禁用进一步的中断。中断应该并且只在最短的时间内被禁用。原始 AT BIOS 键盘 ISR 中的第一条指令是STI启用中断。

令人高兴的答案是PIC优先考虑硬件中断,即使启用了中断,也只有定时器中断 IRQ0 可以中断键盘 ISR。当然 NMI 可以以任何一种方式发生,但很高兴这不会发生在当前的 PC 上。

于 2010-08-30T22:58:18.303 回答
0

在正常的中断处理过程中,用户在物理上不可能按两次“a”。即使他一次按下两个键也不太可能,但硬件应该至少保留一个键,直到 CPU 准备好获取它。

在 PC 上——这可以追溯到我的 PCXT 时代——键盘子系统可能会为 CPU 提供 13 次按键。

于 2010-08-06T20:59:28.463 回答
-5

禁用中断有不同的证明。1. 硬件故障 2.exceptions { 例如:除以零} 等等。

  1. 当发生硬件故障时,操作系统必须运行blend。
  2. 当异常发生时,操作系统必须管理系统并切换另一个进程来处理中断。

或者例如:对于 I/O 设备。如果没有中断,计算机就没有效率!

于 2013-03-05T14:07:35.813 回答