据我了解,任何程序都会被编译成一系列针对其运行架构的汇编指令。我不明白的是操作系统如何与显卡等外围设备交互。驱动程序本身不就是CPU的一系列汇编指令吗?
我能想到的唯一一件事是它使用内存区域,然后由外围设备监视,或者它使用 BUS 来通信操作并接收结果。这个过程有没有简单的解释。
抱歉,如果这个问题太笼统,这一直困扰着我。
据我了解,任何程序都会被编译成一系列针对其运行架构的汇编指令。我不明白的是操作系统如何与显卡等外围设备交互。驱动程序本身不就是CPU的一系列汇编指令吗?
我能想到的唯一一件事是它使用内存区域,然后由外围设备监视,或者它使用 BUS 来通信操作并接收结果。这个过程有没有简单的解释。
抱歉,如果这个问题太笼统,这一直困扰着我。
有简单的解释,也有真实的解释 - 选择一个!
我会尝试一个简单的:根据汇编指令,有一些专门用于与外围设备通信。硬件不是通过例如在寄存器中添加值或将某些内容写入 RAM 来解释它们,而是通过将一些数据从寄存器或 RAM 中的区域移动到外围设备(或相反)。
在操作系统内部,例如声音驱动程序负责将一些声音数据和一些命令数据组装到RAM中,然后操作系统调用总线驱动程序发出这些特殊指令以将命令和数据移动到声卡。声卡硬件将(希望)理解命令并将数据解释为它应该播放的声音。
你的猜测基本上是对的。根据 CPU 架构,外设可能会响应“内存映射 I/O”(它们监视对特定内存地址的读取和写入)或其他特定 I/O 指令(例如 x86 IN 和 OUT 指令) .
设备驱动程序是特定于操作系统的软件,并提供操作系统和硬件之间的接口。
特定的物理设备要么拥有知道如何响应来自它所监视的 CPU 的任何信号的硬件,要么拥有自己的 CPU 和通常称为固件的软件。设备的固件不特定于任何操作系统,并且通常存储在设备上的持久内存中,即使在设备关闭后也是如此。但是,某些外围设备可能具有在操作系统启动时由设备驱动程序加载的固件。