中断期间在操作 system/hardware 级别采取了哪些步骤(例如键盘快捷键)?

What steps are taken at the operating system/hardware level during interrupt (e.g. keyboard shortcut)?

我目前正在学习操作系统的工作原理,想验证我对中断期间采取的步骤的了解是否正确。尝试联系一些非常熟悉的东西,这是我认为当我按 Alt+Tab 切换程序时会发生的事情:

是否有我遗漏或没有正确描述的步骤?

这里有很多因素需要您考虑。例如:

 - Is the keyboard on the ISA bus and is of an PC/AT style keyboard?  
 - If so, is the PIC (programmable Interrupt Controller) involved?  
 - Is the keyboard a USB keyboard device?
 - Is the interrupt an older style PIC, newer style APIC, or a latest style MSI interrupt?

有很多事情要考虑。然而,为了解释可能发生的情况,我假设你有一个 AT 风格的键盘连接到键盘控制器端口(可能是 PS2 风格),你有一个老式的 PIC,以及一个简化的单或多任务系统。

当用户按下 Alt 键然后按下 Tab 键时会发生什么:

 - The CPU is interrupted (hence the name) by the PIC
 - The CPU "jumps" to the interrupt request routine (IVT, exception, whatever)
 - The routine reads from the keyboard.  A single byte is read which happens 
   to be (part of) the make code for the alt key.
 - the routine then places this make code in some sort of input buffer the
   operating system has set up for it, whether it be part of the OS or part
   of the keyboard driver.
 - the interrupt is acknowledged via the PIC (this step can and usually is
   before the previous step)
 - the routine gives up the CPU (iret instruction)

再重复3次以上的过程(假设make code和break code是单字节码,也可以是多字节码)。在 make 和 break 键上创建中断。 make key 是按下一个键的时候。中断键是释放键的时间。即:

- make (Alt Down)
- make (Tab Down)
- break (Tab Up)
- break (Alt Up)

你看,发生了四次中断(再次假设单字节代码),四次调用中断例程,四次 CPU 被中断以处理按键(es ) 和发布 (es)。

至于任务切换,通过 ALT-TAB 组合键,通常不会在中断处理程序中完成。 OS 将看到 Tab 的 Make(或 Break)键,它将检查 shift 状态的状态(应包括 Alt 键)并从那里开始。

如果键盘是 USB 式键盘,那么事件的过程就完全不同了。如上所示,USB 键盘不会中断 CPU。键盘有一个中断管道,它会定期检查是否存在按键接通或断开序列。 OS 将给 USB 驱动程序一个时间片,刚好足够检查这个中断管道的时间。但是,请注意中断(PIC、MSI 或其他)对于 USB 键盘 不会 触发,除非 USB 驱动程序指定中断应在帧结束时发生。请注意,虽然此中断不会因按键(或释放)而触发,但会因 USB 帧结束而触发。

很多事情都是因为简单的按键和释放而发生的。我会研究你想为哪种类型的键盘编程,哪种类型的中断控制器,CPU,等等,然后从那里开始。

如果您愿意,我 wrote a series of books 关于这个主题,我会解释 ISA 式键盘和 USB 式键盘的情况。这是一个非常愉快的爱好,我希望你能从中找到同样的快乐。