我试图完成PC和操作系统如何相互作用的图片.我就是这样,在设备驱动程序方面,我几乎没有猜测.
请不要写太复杂的东西,或者在使用高编程语言和winapi函数时你不需要知道.我想知道,这是出于学习目的.
因此,操作系统和PC的基本结构(通过PC我的意思当然是HW)是我看到的除了直接CPU命令之外的其他所有CPU本身可以做的事情(算术运算,其寄存器访问和内存访问) )必须通过OS.主要是因为3级环,你不能使用进出其他硬件的入口.我知道有MMIO,但必须首先通过端口通信来设置.
它不是一直这样.即使我有点年轻还记得MSDOS,我知道你可以直接访问HW,因为没有限制,没有响铃模式.所以你可以写字符串到diplay使用DOS函数,或直接访问显卡内存并自己编写.
但随着操作系统的发展,不再存在这种可能性.但它很好,因为操作系统现在处理所有的硬件通信,坦率地说,它在多任务处理环境中更方便,更安全(我会说是唯一的选择).所以现在你不是使用int指令来使用BIOS映射函数或DOS函数,而是在内部调用dll,而不是处理你不需要知道的所有内容.
我理解这一点.我还可以理解,设备驱动程序是在0级环中运行的代码段,因此它可以执行所有HW交互.但我不明白的是操作系统和设备驱动程序之间的联系.我们举一个例子 - 我想让声卡发出声音.所以我将Windows API称为访问声卡,但会发生什么?Windows是否会调用设备驱动程序?
但是,如果它确实调用了设备驱动程序,是否意味着,所有可以通过winAPI函数调用的设备驱动程序,必须具有以某种特定方式命名的例程?我的意思是,当我有新的声卡时,它的驱动程序是否必须具有与旧声卡相同的功能?那么Windows实际上可以从它的角度调用相同的函数吗?但是,如果Windows具有由设备驱动程序处理的预定义功能集,则它不能使用在最新版操作系统出现之前存在的新驱动程序.
拜托,帮我理解这个烂摊子.我真的生气了.谢谢.
Windows设备驱动程序有点像DLL:除了动态链接/加载它的应用程序,它是动态链接/加载它的O/S.
注册表项告诉O/S存在哪些设备驱动程序(以便O/S知道动态链接/加载哪些设备驱动程序).
设备驱动程序在环0中运行.在零环中,它们(设备驱动程序)无权访问(无法链接或使用)Windows API:相反,它们可以访问各种NT内核API.
但是,如果它确实调用了设备驱动程序,是否意味着,所有可以通过winAPI函数调用的设备驱动程序,必须具有以某种特定方式命名的例程?我的意思是,当我有新的声卡时,它的驱动程序是否必须具有与旧声卡相同的功能?那么Windows实际上可以从它的角度调用相同的函数吗?
基本上是的.给定类型或类中的所有设备驱动程序(例如,所有视频驱动程序或所有磁盘驱动程序)都具有类似的API,由O/S调用(和/或由更高级别的驱动程序调用,例如磁盘驱动程序,文件系统驱动程序使用/调用的).
Windows设备驱动程序工具包定义了各种API,并包含各种类型设备的示例驱动程序.
但是,如果Windows具有由设备驱动程序处理的预定义功能集,则它不能使用在最新版操作系统出现之前存在的新驱动程序.
O/S是动态链接到设备驱动程序功能:因为设备驱动程序API是预定义的,所以设备驱动程序就O/S而言是可互换的; 只要新设备驱动程序支持(向后兼容)标准设备驱动程序API,就可以编写新设备驱动程序.
动态链接机制非常类似于COM对象或C++类实现任何预定义的纯抽象接口的方式:DDK中的头文件声明纯抽象接口(如虚函数),设备驱动程序实现这些功能,并且O/S加载驱动程序并调用这些函数.
| 归档时间: |
|
| 查看次数: |
1862 次 |
| 最近记录: |