【问题标题】:Non-Hardware Device Drivers非硬件设备驱动程序
【发布时间】:2021-07-30 13:46:54
【问题描述】:

在 Windows 内部第 7 版中 - 在 Windows 内核体系结构下提到本书以下文本
设备驱动程序 - 这包括两个硬件设备驱动程序,它们转换用户 I/O 功能 调用特定的硬件设备 I/O 请求和非硬件设备驱动程序,例如文件 系统和网络驱动程序。

谁能详细说明硬件设备驱动和非硬件设备驱动?

【问题讨论】:

    标签: linux windows operating-system kernel


    【解决方案1】:

    假设您有多个层 - 例如当进程发出文件 IO 请求时,它会转到虚拟文件系统层,虚拟文件​​系统层可能会向文件系统层发送请求,文件系统层可能会向软件 RAID 层发送请求,而软件 RAID 层可能会向 USB 大容量存储设备发送请求驱动程序,它可能会向 USB 控制器驱动程序发送请求。

    您可以将这些层分为 2 个主要类别:

    a) “设备驱动程序”,其中有一个实际设备。对于这些,设备驱动程序之间的关系往往反映硬件设备之间的层次关系(例如,“插入控制器的 PCI 总线,插入这些控制器的各种设备,插入这些设备的各种外围设备”可能成为“父级”的树设备驱动程序与一个或多个子设备驱动程序通信...")。

    b) “不驱动设备的东西,因此在技术上不是设备驱动程序”。对于上面的文件 IO 示例,这是 VFS、文件系统和软件 RAID 层。对于网络,它将是处理 TCP/IP 堆栈的代码(并找出路由等 - 哪个网卡应该根据目标 IP 地址发送数据包)。对于用户输入(键盘等),它可能是输入法编辑器之类的东西。对于声音,它可以是基于 2D 位置确定声音在哪个扬声器(在哪个声卡上)的响度的代码。

    对于大多数操作系统;设备驱动程序需要被视为“特殊”,因为它们需要使用普通软件/进程无法使用的接口(可能还有直接硬件访问)。例如,对于单体内核,它们可能被视为内核扩展并(动态)直接链接到内核中。

    但是; “不驱动设备的东西,因此在技术上不是设备驱动程序”最终需要类似的特殊支持(例如,能够使用普通软件/进程无法使用但设备驱动程序可以使用的相同或相似接口的能力,能够链接到一个整体内核等)。对于操作系统设计人员来说,设备驱动程序和“技术上不是设备驱动程序但需要相同访问权限的东西”之间的差异相对微不足道(与没有/需要特殊访问权限的普通软件/进程相比);所以很容易用同一个词来描述两者 - 例如。称它们为“内核模块”(不管它们是否是设备驱动程序);或称它们为“设备驱动程序”(无论它们在技术上是否是设备驱动程序)。

    请注意,有一些事情会更加混淆:

    a) 实际上还有第三类——“虚拟设备”。在某些情况下,软件会尝试模拟真实设备(例如,使用软件/RAM 模拟硬盘驱动器的 RAM 磁盘;使用 PDF 文件格式转换器“打印”到文件的打印机等)。对于这些情况,模拟/虚拟化需要作为设备驱动程序实现(但从技术上讲,没有设备被驱动)。

    b) 使术语看起来更加一致;一些操作系统倾向于将接口定义为“虚拟设备”。如果你足够努力,你可以假装任何东西都是某种抽象的虚拟设备(“它不是压缩/解压缩库,它是虚拟压缩/解压缩设备”,“它不是数据库管理引擎,它是虚拟关系数据存储设备", ...)。

    c) 一些操作系统还试图假装一切都是文件(例如 Unix - https://en.wikipedia.org/wiki/Everything_is_a_file )。在这种情况下,您可能有一个“伪装成文件的设备驱动程序”的目录(例如/dev)并最终得到“不是设备驱动程序的东西,它们伪装成伪装成文件的设备驱动程序”。同一个目录。

    【讨论】:

    • 嘿,很好的回应,我想我理解了这个概念......非常感谢
    【解决方案2】:

    您的问题不清楚。如果您询问非硬件设备驱动程序的示例,那么示例将是随机数生成器设备。例如,在 Linux 上,“/dev/random”设备提供了随机数生成器的软件实现,因此没有必要硬件的系统仍然可以拥有此功能

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-29
      • 2021-10-14
      • 2023-04-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多