我正在尝试完成 PC 和操作系统如何交互的画面。而且我正处于这一点,当涉及到设备驱动程序时,我几乎没有猜到。
请不要写太复杂的东西,或者你不需要知道什么时候使用高编程语言和winapi函数。我想知道,这是为了学习。
因此,操作系统和 PC(我指的是 PC,当然是硬件)的基本结构是我所看到的,除了直接 CPU 命令之外,CPU 可以自行执行所有命令(算术运算、其寄存器访问和内存访问) ) 必须通过操作系统。主要是因为从第 3 级环开始,您不能使用用于对其他硬件进行访问的输入和输出指令。我知道有MMIO,但必须先通过端口通信设置。
并非一直都是这样。即使我还记得MSDOS,我还很年轻,我知道您可以直接访问HW,因为没有限制,没有响铃模式。所以你可以使用其他DOS函数写字符串来显示,或者直接访问显卡内存并自己写。
但是随着操作系统的发展,已经没有这种可能了。但这很好,因为操作系统现在处理所有硬件通信,坦率地说,它在多任务环境中更方便和更安全(我会说唯一的选择)。因此,现在您不再使用 int 指令来使用 BIOS 映射函数或 DOS 函数,而是调用 dll 在内部而不是处理您不需要知道的所有内容。
我明白这一点。我还理解设备驱动程序是在环级别 0 中运行的一段代码,因此它可以完成所有硬件交互。但我不明白的是操作系统和设备驱动程序之间的连接。举个例子——我想让声卡发出声音。所以我调用windows API来访问声卡,但是会发生什么呢?Windows会调用设备驱动程序吗?
但是如果它确实调用了设备驱动程序,是否意味着所有可以被winAPI函数调用的设备驱动程序都必须具有以某种特定方式命名的例程?我的意思是,当我有新的声卡时,它的驱动程序必须具有与旧声卡相同的功能吗?那么Windows实际上可以从它的角度调用相同的函数吗?但是,如果 Windows 已经预定义了设备驱动程序所需的功能集,那么它就不能使用在最新版本的操作系统出现之前不存在的新驱动程序。
请帮我理解这个烂摊子。我真的要生气了。谢谢。