什么是禁用中断?

tro*_*hit 10 interrupt-handling keyboardinterrupt

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

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

S.L*_*ott 6

通常,一个中断由硬件"排队".

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

如果用户仅在禁用中断的间隔期间点击"a"一次,则在重新启用时将注册为中断.

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


Hea*_*utt 6

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

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

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

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

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