Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 非硬件设备驱动程序_Linux_Windows_Operating System_Kernel - Fatal编程技术网

Linux 非硬件设备驱动程序

Linux 非硬件设备驱动程序,linux,windows,operating-system,kernel,Linux,Windows,Operating System,Kernel,在Windows Internal第7版-Windows内核体系结构下提到了以下内容 设备驱动程序-这包括两个硬件设备驱动程序,它们转换用户I/O功能 调用特定的硬件设备I/O请求和非硬件设备驱动程序,如文件 系统和网络驱动程序 有人能详细介绍一下硬件设备驱动程序和非硬件设备驱动程序吗?您的问题不清楚。如果您需要一个非硬件设备驱动程序的示例,那么随机数生成器设备就是一个示例。例如,在Linux上,“/dev/random”设备提供了随机数生成器的软件实现,因此没有必要硬件的系统仍然可以使用此功能

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


有人能详细介绍一下硬件设备驱动程序和非硬件设备驱动程序吗?

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

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

可以将这些图层分为两个主要类别:

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

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

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

然而,“不驱动设备的东西,因此在技术上不是设备驱动程序”最终需要类似的特殊支持(例如,使用普通软件/进程不能使用但设备驱动程序可以使用的相同或类似接口的能力,链接到单片内核的能力,等等)。对于操作系统设计师来说,设备驱动程序和“技术上不是设备驱动程序,但需要相同访问权限的东西”之间的区别相对较小(与没有/需要特殊访问权限的普通软件/进程相比);因此,很容易用同一个词来描述两者-例如,将它们全部称为“内核模块”(不管它们是否是设备驱动程序);或者称它们为“设备驱动程序”(不管它们在技术上是否是设备驱动程序)

请注意,有几件事更让人困惑:

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

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


c) 一些操作系统还试图假装所有东西都是文件(例如Unix-)。在这种情况下,您可能会有一个目录“假装是文件的设备驱动程序”(例如
/dev
),并以“不是假装是文件的设备驱动程序的东西”结束“打到了同一个目录中。

嘿,反应很好,我想我理解了这个概念……非常感谢