操作系统 设备驱动程序
操作系统通过设备驱动程序来处理所有输入/输出设备。驱动程序是一种计算机程序,用于操作或控制连接到计算机或自动机的特定设备。驱动程序提供了与硬件设备的软件接口,使操作系统和其他计算机程序可以访问硬件功能,而不需要了解具体的硬件细节。
设备驱动程序 对于计算机系统的正常运行很重要。如果没有设备驱动程序,特定的硬件将无法正常工作,这意味着它无法完成其被创建用于的特定动作。
驱动程序依赖于硬件并且与操作系统特定。它们通常提供所需的中断处理,以处理任何必要的异步时序硬件接口。
驱动程序通过计算机总线或连接到硬件的通信子系统与设备进行通信。一旦设备向驱动程序发送数据,驱动程序可能会在原始调用程序中调用例程。当调用程序调用驱动程序的例程时,驱动程序向设备发出命令。
设备驱动程序封装设备相关代码,并实现一个标准接口来包含设备特定的寄存器读取或写入。设备驱动程序通常由设备的制造商编写,并随设备一起交付在CD-ROM上。设备驱动程序执行以下工作,如:
- 向上方的设备无关软件接受请求。
- 确保请求执行成功。
- 与设备控制器交互,进行输入/输出并执行所需的错误处理。
设备驱动程序如何处理请求
操作系统中设备驱动程序处理请求的方式如下:
假设有一个读取块N的请求。如果驱动程序在请求到达时空闲,它会立即开始执行该请求。否则,如果驱动程序已经忙于某个其他请求,它会将新请求放置在待处理请求队列中。
设备驱动程序的目的
设备驱动程序的主要目的是通过充当硬件设备与使用它的应用程序或操作系统之间的转换器来提供抽象化。编程人员可以独立于最终用户使用的具体硬件编写更高级的应用代码。
例如,与串口交互的高级应用程序可能具有“发送数据”和“接收数据”功能。实现这些功能的设备驱动程序将与安装在用户计算机的较低级别的特定串口控制器通信。
控制16550 UART所需的命令与控制FTDI串行端口转换器所需的命令不同。然而,每个硬件特定的设备驱动程序将这些细节抽象成相同或类似的软件接口。
设备驱动程序如何工作
当您获得外设设备(如打印机、扫描仪、键盘或调制解调器)时,该设备将随附一个需要在设备开始工作之前安装的驱动程序光盘。一旦我们将驱动程序软件安装到计算机中,它会检测和识别外设设备,我们就能够对其进行控制。
设备驱动程序是一段允许计算机操作系统与其编写的硬件设备进行通信的软件。通常,驱动程序通过 计算机总线 与设备进行通信,该总线将设备与计算机连接起来。设备驱动程序依赖于操作系统的指令来访问设备并执行任何特定的操作。在操作之后,它们还通过将来自硬件设备的输出或消息提供给操作系统来显示它们的反应。
设备驱动程序工作在操作系统的内核层中。内核是操作系统直接与系统物理结构进行交互的部分。操作系统不直接访问设备,而是加载设备驱动程序,并调用驱动程序中的特定函数来执行设备上的特定任务。每个驱动程序包含执行设备上操作所需的设备特定代码。
读卡器、控制器、调制解调器、网络卡、声卡、打印机、显卡、USB设备、内存、扬声器等都需要设备驱动程序才能运行。例如,打印机驱动程序告诉打印机在从操作系统获取指令后打印哪种格式。同样,有声卡驱动程序是为了将MP3文件的二进制数据转换为音频信号,以便你享受音乐。
设备驱动程序的类型
对于与计算机系统相关的几乎每个设备,都有适用于特定硬件的设备驱动程序存在。但是,可以广义地将其分为以下两种类型:
1. 内核模式设备驱动程序
这个内核模式设备驱动程序包含一些通用硬件,作为操作系统的一部分与操作系统一起加载。这些硬件包括 BIOS、主板、处理器 等一些作为内核软件的一部分的硬件。这些包括每个操作系统的最低系统要求的设备驱动程序。
- BIOS: BIOS(基本输入/输出系统)是目前存在的最基本的计算机驱动程序。它被设计成在PC开机时启动的第一个程序。BIOS存储在集成到主板上的存储器中,旨在引导连接到PC的硬件,包括硬盘驱动器、视频显示输出、键盘和鼠标。
- 主板驱动程序: 主板驱动程序是由Windows或Linux读取的小型程序,允许在操作系统内部进行基本的计算机功能。这些驱动程序通常包括允许宽带端口、USB端口和鼠标键盘的I/O端口的程序。根据主板的制造商不同,这些驱动程序可能还包括视频和音频支持的基本驱动程序。
2. 用户模式设备驱动程序
除了内核提供的用于系统工作的设备外,用户还会在使用系统过程中使用一些设备,这些设备需要设备驱动程序来进行功能操作,这些驱动程序属于用户模式设备驱动程序。例如,用户需要任何的即插即用功能都属于这种情况。
设备驱动程序的应用
由于现代硬件和操作系统的多样性,驱动程序在许多不同的环境中运行。设备驱动程序可以与打印机、视频适配器、网络卡、声卡、各种类型的本地总线、图像扫描仪、数码相机、数字地面电视调谐器、红外适配器和实现对不同文件系统的支持等进行接口。它还与以下进行接口:
- 各种低带宽I/O总线,用于指向设备(如鼠标,键盘等)。
- 计算机存储设备,例如硬盘,CD-ROM和软盘驱动器(ATA,SATA,SCSI,SAS等)。
- 无线通信收发器适配器,用于家庭自动化中的短距离和低速无线通信,如蓝牙低能耗(BLE),Thread,ZigBee和Z-Wave。
选择和安装正确的设备驱动程序对于给定的硬件通常是计算机系统配置的主要组成部分。设备驱动程序的常见抽象级别包括:
1. 对于硬件:
- 直接进行接口。
- 写入或读取设备控制寄存器。
- 使用一些更高级别的接口(例如视频BIOS)。
- 使用另一个更低级别的设备驱动程序(例如使用磁盘驱动程序的文件系统驱动程序)。
- 在执行完全不同的工作时,模拟与硬件的工作。
2. 对于软件:
- 允许操作系统直接访问硬件资源。
- 只实现原语。
- 为非驱动程序软件实现接口(例如,TWAIN)。
- 实现一种语言,有时相当高级别的(例如,PostScript)。
虚拟设备驱动程序是什么
虚拟设备驱动程序是设备驱动程序的一种特殊变体。它们用于在虚拟化环境中模拟硬件设备,例如在Microsoft Windows计算机上运行DOS程序时,或在Xen主机上运行客户操作系统时。虚拟设备驱动程序不是用于使客户操作系统与硬件进行对话,而是模拟一块硬件。在虚拟机中运行的客户操作系统及其驱动程序可以具有访问真实硬件的幻觉。
客户操作系统尝试访问硬件的操作会被重定向到主机操作系统中的虚拟设备驱动程序作为函数调用。虚拟设备驱动程序还可以将模拟的处理器级事件(如中断)发送到虚拟机中。
虚拟设备也可以在非虚拟化环境中运作。例如,虚拟网络适配器可用于虚拟专用网络,而虚拟磁盘设备可用于iSCSI。虚拟设备驱动程序有几种变体,例如VxD、VLM和VDD。虚拟设备驱动程序的一个很好的例子是Daemon Tools。