我正在努力完善PC和操作系统之间的交互方式。在设备驱动程序方面,我有些疑惑。请不要说这太复杂或者在使用高级编程语言和WinAPI函数时不需要了解这些内容。我想要学习,因此希望了解这些内容。
基本上,我认为操作系统和PC(指硬件)之间的关系结构是:除了CPU可以自己执行的直接CPU命令(算术运算、寄存器访问和内存访问)外,所有其他命令都必须通过操作系统。主要是因为从第三个环级别开始,您无法使用用于访问其他硬件的in和out指令。我知道有MMIO,但必须先通过端口通信设置它。
并非一直如此。即使我有点年轻,不记得MSDOS,我也知道你可以直接访问硬件,因为没有限制,没有环模式。因此,您可以使用天气DOS功能将字符串写入显示器,或者直接访问视频卡内存并自己编写它。
但随着操作系统的发展,就不再存在这种可能性。但这没关系,因为现在操作系统处理所有硬件通信,并且在多任务环境中更方便、更安全(我会说是唯一的选择)。因此,现在您不需要使用int指令来使用BIOS映射功能或DOS功能,而是调用dll,其内部处理了您不需要了解的所有内容。
我理解这一点。我也理解设备驱动程序是在第0个环级别运行的代码片段,因此它可以执行所有硬件交互。但我不理解操作系统和设备驱动程序之间的连接。让我们举个例子——我想让声卡发出声音。因此,我调用Windows API来访问声卡,但接下来会发生什么呢?Windows会调用设备驱动程序来完成吗?
但如果它确实调用设备驱动程序,那么是否意味着所有可以通过WinAPI函数调用的设备驱动程序都必须具有以某种特定方式命名的例程?我的意思是,当我有新的声卡时,它的驱动程序必须与旧的驱动程序具有相同的函数名称吗?因此,从Windows的角度来看,Windows可以调用相同的函数吗?但是,如果Windows预定义了设备驱动程序所需的一组函数,那么它不能使用以前版本中不存在的新驱动程序。
请帮助我理解这个混乱。我真的很疯狂。谢谢。
基本上,我认为操作系统和PC(指硬件)之间的关系结构是:除了CPU可以自己执行的直接CPU命令(算术运算、寄存器访问和内存访问)外,所有其他命令都必须通过操作系统。主要是因为从第三个环级别开始,您无法使用用于访问其他硬件的in和out指令。我知道有MMIO,但必须先通过端口通信设置它。
并非一直如此。即使我有点年轻,不记得MSDOS,我也知道你可以直接访问硬件,因为没有限制,没有环模式。因此,您可以使用天气DOS功能将字符串写入显示器,或者直接访问视频卡内存并自己编写它。
但随着操作系统的发展,就不再存在这种可能性。但这没关系,因为现在操作系统处理所有硬件通信,并且在多任务环境中更方便、更安全(我会说是唯一的选择)。因此,现在您不需要使用int指令来使用BIOS映射功能或DOS功能,而是调用dll,其内部处理了您不需要了解的所有内容。
我理解这一点。我也理解设备驱动程序是在第0个环级别运行的代码片段,因此它可以执行所有硬件交互。但我不理解操作系统和设备驱动程序之间的连接。让我们举个例子——我想让声卡发出声音。因此,我调用Windows API来访问声卡,但接下来会发生什么呢?Windows会调用设备驱动程序来完成吗?
但如果它确实调用设备驱动程序,那么是否意味着所有可以通过WinAPI函数调用的设备驱动程序都必须具有以某种特定方式命名的例程?我的意思是,当我有新的声卡时,它的驱动程序必须与旧的驱动程序具有相同的函数名称吗?因此,从Windows的角度来看,Windows可以调用相同的函数吗?但是,如果Windows预定义了设备驱动程序所需的一组函数,那么它不能使用以前版本中不存在的新驱动程序。
请帮助我理解这个混乱。我真的很疯狂。谢谢。