LuR*_*RsT 1 language-agnostic generics operating-system input
如果有一种方法可以让操作系统不需要无限循环等待来自键盘(或其他输入设备)的输入以及是否有任何使用该操作系统的操作系统.我不敢相信我们确实需要浪费骑自行车只是为了等待输入,为什么一旦按下输入就不能做什么而不是让机器等待动作.
长话短说:
当前如何处理键盘输入 - 轮询还是中断?
所有基于Linux的操作系统上所有设备的所有设备输入都是中断驱动的.不使用繁忙的等待(主动轮询)数据.
Windows也可能都是中断驱动的.(Windows的DOS遗留物隐藏在其中 - 轮询可能仍然发生在那里.)
所有的Linux都以相同的方式工作.内核等待中断,将中断排队并检查调度程序以处理下一个最高优先级的中断.进程调度始终优先于中断调度.
键盘中断由缓冲信息的驱动程序处理.窗口管理器(例如Gnome)从缓冲区中提取东西以创建键盘中断流.
你可以购买很多关于OS设计的好书,它们涵盖了设备驱动程序和内核之间的关系.从http://lwn.net/Kernel/LDD3/开始
时钟中断BTW是进程调度的发生方式.如果没有任何设备活动,时钟将定期中断,强制内核查看调度,可能会更改正在执行的进程.使用大量CPU的进程优先级降低.大量I/O花费大量时间等待I/O完成的过程,因此优先级提高.
编辑
此外,有时 - DMA设备绕过内核中断处理以进行块传输字节.中断启动传输,但设备存在于总线上并访问存储器目录.视频显示,磁盘(以及以前的网络设备)可能是DMA.然而,键盘的体积非常小,因此DMA不是一种有用的优化.
通常它是这样的:
因此,在任何阶段都没有轮询(主动等待).
编辑:据我所知,Linux内核有时会切换到设备的轮询,否则会中断它们(想想快速网卡接收大量数据包).在这些条件下,它节省了CPU时间而不是浪费它 - 操作系统通过一次轮询获得大量数据,而不是许多具有许多中断的小块.当轮询不再获取任何数据时,操作系统将切换回等待闯入模式.