禁用中断是什么意思?

16

进入中断处理程序时,我们首先在该CPU上“禁用中断”(例如,在x86上使用cli指令)。在中断被禁用的时间内,假设用户按下了键盘上的字母‘a’,通常会引起中断。但由于中断被禁用,这意味着:

  1. 在关键部分禁用中断后,'a'的中断处理程序将永远不会被调用?
  2. 中断将由操作系统处理,但会被延迟,直到再次启用中断。具体而言,如果用户第一次按下'a'是在中断被禁用时,那么他是否需要再次按下'a'?
5个回答

10
通常情况下,硬件会将一个中断“排队”。[中断通常只是一个可以保持的逻辑门; 一旦打开,它会保持一段时间。] 如果用户在禁用中断期间仅按下'a'键一次,则在重新启用中断时,它将被注册为中断。如果用户在禁用中断期间成功按下'a'键两次,则在重新启用中断时,其中一个会被注册为中断。是第一个还是第二个取决于确切的逻辑门配置。

1
这意味着如果我能够比CPU处理中断的时间更快地输入两个键盘字母,那么其中一个将会丢失吗?很抱歉再次提及这个话题。 - chesscov77
1
@Juan 这取决于键盘。现代键盘具有小缓冲区,可以在计算机处理它们时保存键盘事件。大多数键盘将为字符按键分配一个位置(X + Y)以节省带宽和成本,但会牺牲一些按键组合在极端情况下无法正确注册的代价,例如 CPU 无法跟上的情况,但某些键盘也会单独发送特定的按键。大多数键盘将分别发送修改键事件,例如,某些游戏键盘也会对 WASD 和箭头键执行相同操作。 - yyny

7
答案取决于你是否已经处理了键盘中断。大多数中断服务例程(ISR)在终止时都有代码通知硬件已被“服务”。在键盘控制器的情况下,命令被写入以确认接收到的字节。在确认时,键盘控制器硬件停止使用电信号来表示中断条件。如果你正在处理非键盘中断,比如火警中断,那么电气触发中断的键盘硬件将在按下键时触发。直到CPU重新启用中断之前,电气信号会被忽略。在处理完火警中断后,火警ISR确认任何数据并在CPU上重新启用中断。立即,CPU进入中断,因为键盘控制器仍在电气信号中表示中断条件。如果你正在处理键盘中断,并且用户在执行键盘ISR期间快速输入第二个按键,则有可能会错过第二个按键的数据,或者根本无法接收它。特别是,如果ISR通过确认重置键盘控制器,但ISR实际上没有收到键盘控制器中的所有可用字节,则这是一个问题。通常,ISR将首先处理触发其激活的中断,然后在确认中断后轮询设备,以查看自第一个中断以来是否接收到更多数据。如果是,则生成软件中断以重新进入ISR并服务设备。

2
简单来说,中断会自动禁用进一步的中断。只有在最短的时间内才应该禁用中断。原始 AT BIOS 键盘 ISR 中的第一条指令是 STI 以启用中断。
愉快的是,PIC 会对硬件中断进行优先级排序,即使启用了中断,也只有计时器中断 IRQ0 可以打断键盘 ISR。当然,NMI 可能无论如何都会发生,但幸运的是,在当前的 PC 上永远不会发生。

为什么要将它变成黄色的除数? - Kindred

0

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

在PC上——这是回到我使用PCXT的日子——键盘子系统可以为CPU保留大约13个按键。


-5

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接