【问题标题】:Do device drivers communicate with each other, or are they asynchronously called?设备驱动程序是相互通信,还是异步调用?
【发布时间】:2013-11-18 21:17:31
【问题描述】:
我将画一个非常清晰的细节示例。
假设我们在一个典型的用户级应用程序中,例如绘画软件或文本编辑,我们决定将鼠标悬停或单击一个组合框。仅从这个输入中,鼠标的轨迹球就需要从底层的设备驱动程序中获取,但视频驱动程序还需要在(看似)同时相应地更新屏幕上指针的位置,如下所示:
如图所示,不移动鼠标,而是调用驱动程序/更新屏幕不断工作。但是,如果我们选择同时单击菜单组合框/下拉列表并不断更新帧缓冲区提要怎么办?两个驱动程序是否几乎同时被调用,以及调用它们的原因(GUI 桌面、直接应用程序等)。因为鼠标可以在任何地方工作,无论是否在应用程序上......这让我怀疑鼠标输入是否无限期系统调用,但是,视频输出更多地取决于应用程序是什么(如下所示,texpad)。
【问题讨论】:
标签:
user-interface
process
operating-system
device-driver
multitasking
【解决方案1】:
鼠标驱动与视频驱动无关。您在内核空间和用户空间中发生的事情之间的区别是错误的。
内核不知道“鼠标指针”的概念。它只导出一个界面,上面写着“我有一个提供 X 和 Y 坐标的输入设备”。与视频驱动程序类似,它只导出一个界面,上面写着“我有一个可以输出图片的设备”——它不知道鼠标指针是什么。
GUI 都是在用户空间中处理的,这就是下拉框、鼠标指针等概念的地方...无论处理您的 GUI 的程序都需要内核接口并对其进行处理,例如关联输入设备使用鼠标指针并将视频输出到屏幕。
屏幕内容实际推送到硬件的方式取决于驱动程序,不涉及用户空间。 GUI 只是告诉内核,“我希望屏幕看起来像这样”,其余的由内核处理。
如果您有一个多核 CPU,这两个驱动程序当然可以并行运行,但除非您正在实现驱动程序或调度程序,否则您不需要了解详细信息。