在Windows内部第7版中,以下文本在Windows内核架构下提到
设备驱动程序 -This包括硬件设备驱动程序(将用户I/O功能调用转换为特定硬件设备I/O请求)和非硬件设备驱动程序(如文件系统和网络驱动程序)。
有人能详细介绍一下硬件设备驱动程序和非硬件设备驱动程序吗?
发布于 2021-05-09 18:38:49
假设您有多个层--例如,当进程发出文件IO请求时,它进入虚拟文件系统层,虚拟文件系统层可以向文件系统层发送请求,后者可以将请求/s发送到软件RAID层,后者可以向USB海量存储设备驱动程序发送请求,后者可以向USB控制器驱动程序发送请求。
您可以将这些层划分为两个主要类别:
a)“设备驱动程序”,其中有一个实际的设备。对于这些,设备驱动程序之间的关系倾向于反映硬件设备之间的层次关系。“插入控制器的PCI总线、插入控制器的各种设备、插入这些设备的各种外围设备”可能成为“与任何或多个子设备驱动程序通信的父设备驱动程序.”的树。
( b)“不驱动设备的东西,因此在技术上不是设备驱动程序”。对于上面的文件IO示例,这是VFS、文件系统和软件RAID层。对于网络,它将是处理TCP/IP堆栈的代码(并确定路由等--网卡应该根据目标IP地址发送数据包)。对于用户输入(键盘等),可以是类似于输入法编辑器之类的东西。对于声音,它可以是代码来确定声音应该有多大,哪个扬声器(哪一个声卡/s)是基于2D位置的。
对于大多数操作系统,设备驱动程序需要被视为“特殊”,因为它们需要使用常规软件/进程无法使用的接口(可能是直接的硬件访问)。例如,对于单块内核,它们可能被视为内核扩展,并(动态)直接链接到内核。
但是,“不驱动设备的东西,因此在技术上不是设备驱动程序”最终需要类似的特殊支持(例如,使用普通软件/进程不能使用但设备驱动程序可以使用的相同或类似接口的能力,连接到单块内核的能力等等)。对于OS设计人员来说,设备驱动程序和“技术上不是设备驱动程序但需要相同访问的东西”之间的区别相对微不足道(与没有/不需要特殊访问权限的普通软件/流程相比);因此,使用相同的词来描述这两者是很有诱惑力的--例如,将它们称为“内核模块”(不管它们是否是设备驱动程序);或者称它们为“设备驱动程序”(无论它们在技术上是否是设备驱动程序)。
请注意,有一些事情更让人困惑:
( a)实际上还有第三类--“虚拟设备”。在某些情况下,软件试图模拟真实的设备(例如,使用软件/ RAM模拟硬盘的RAM磁盘;使用PDF文件格式转换器“打印”到文件的打印机等等)。对于这些情况,仿真/虚拟化需要实现为设备驱动程序(但技术上没有驱动设备)。
( b)使术语看起来更加一致;有些操作系统倾向于将接口定义为“虚拟设备”。如果您足够努力,可以假装任何事情都是某种抽象的虚拟设备(“它不是压缩/解压库,它是虚拟压缩/解压缩设备”,“它不是数据库管理引擎,它是虚拟关系数据存储设备”,……)。
c)一些操作系统也试图假装一切都是文件(例如Unix - https://en.wikipedia.org/wiki/Everything_is_a_file )。在这种情况下,您可能会有一个目录“设备驱动程序假装是文件”(例如/dev),并以“那些不是设备驱动程序而假装是文件的设备驱动程序”被输入到同一个目录中。
发布于 2021-05-09 15:00:40
你的问题不清楚。如果您要求一个非硬件设备驱动程序的示例,则一个示例将是随机数生成器设备。例如,在Linux上,“/dev/随机”设备提供了一个随机数生成器的软件实现,因此没有必要硬件的系统仍然可以具有此功能。
https://stackoverflow.com/questions/67448707
复制相似问题