6. 输入设备和中断是如何工作的?

你的键盘是一个非常简单的输入设备;之所以简单是因为它产生的数据量很小,速度也很慢(以计算机的标准来看)。当你按下或释放一个键时,该事件会通过键盘电缆发出信号,从而引发一个硬件中断

操作系统的任务是监视此类中断。对于每种可能的中断类型,都会有一个中断处理程序,它是操作系统的一部分,负责存储与中断相关的任何数据(例如你的按键/释放键值),直到可以对其进行处理。

键盘的中断处理程序实际上所做的是将键值发布到内存底部附近的系统区域中。在那里,当操作系统将控制权传递给当前应该从键盘读取的程序时,该键值将可供检查。

更复杂的输入设备(如磁盘或网卡)的工作方式类似。之前,我提到磁盘控制器使用总线来发出磁盘请求已完成的信号。实际上发生的是磁盘引发一个中断。然后,磁盘中断处理程序将检索到的数据复制到内存中,供发出请求的程序稍后使用。

每种中断都有一个相关的优先级。较低优先级的中断(如键盘事件)必须等待较高优先级的中断(如时钟滴答或磁盘事件)。Unix 的设计旨在优先处理需要快速处理的事件类型,以保持机器响应的流畅性。

在操作系统的启动时消息中,你可能会看到对 IRQ 编号的引用。你可能知道,配置错误的硬件的常见方式之一是让两个不同的设备尝试使用相同的 IRQ,而不理解确切的原因。

答案就在这里。IRQ 是 "Interrupt Request"(中断请求)的缩写。操作系统需要在启动时知道每个硬件设备将使用哪些编号的中断,以便它可以将适当的处理程序与每个中断关联起来。如果两个不同的设备尝试使用相同的 IRQ,中断有时会被分派到错误的处理程序。这通常至少会锁定设备,有时会严重混淆操作系统,以至于操作系统会变得不稳定或崩溃。