当我们已经拥有BIOS服务时,为什么需要设备驱动程序

时间:2014-02-23 06:08:14

标签: operating-system device-driver bios

我在一些测验中有一个问题我无法回答。谁能告诉我:

为什么设备驱动程序是必需的,因为BIOS已经有与硬件通信的代码?

2 个答案:

答案 0 :(得分:6)

假设您正在谈论传统的x86 BIOS,那么存在一些重大问题:

  1. BIOS仅具有与启动系统所需的有限设备子集(存储控制器,以太网,USB键盘/鼠标,USB大容量存储器)进行通信的代码。 BIOS没有USB打印机或网络摄像头的驱动程序。它也不实用。有成千上万的设备需要驱动程序。 BIOS不能包含所有内容。这也意味着每个新的硬件设备都需要BIOS更新。

  2. BIOS INT调用对于现代硬件而言是懒散且不切实际的。它们被设置为读/写小块数据(从磁盘读取几个字节,在屏幕上打印一个字符)。它们没有使用DMA将数据从磁盘读入数兆字节的机制。请记住,最初的BIOS INT调用是为软盘驱动器和文本模式显示而开发的。

  3. BIOS INT层以实模式存在。任何现代OS都是保护模式。要在现代操作系统中进行BIOS调用,您必须进入实模式,完成工作,然后返回保护模式。这是一项非常昂贵的操作。

  4. 但是UEFI呢?新PC(几乎所有为Windows 7 x64及更高版本设计的)都使用UEFI固件,而不是传统的x86汇编语言BIOS。虽然UEFI固件通常仍被称为“BIOS”。

    当UEFI首次出现时,希望它会导致独立于操作系统的驱动程序。 UEFI提供了一个现代的基于C的API,使用起来更容易一些。它有可安装驱动程序的概念。有mechanisms for a modern OS to call UEFI services。然而,这并未获得太多牵引力。 UEFI“驱动程序”几乎适用于预启动内容。一旦操作系统接管,它就会发挥作用。

    在操作系统中使用UEFI驱动程序仍会产生性能开销。另外,将“不透明”UEFI驱动程序集成到现有操作系统中会很困难。每个操作系统都有多层磁盘/文件系统驱动程序,网络堆栈,USB等。它们都有点不同,并且很难让UEFI驱动程序适合。 (大约10年再问一次。)

    请注意,在现代笔记本电脑中还有另外一个与操作系统无关的“驱动程序”图层: ACPI 。许多平台在ASL/AML code中都有“驱动程序”,可以为您的操作系统提供简单的事件通知。最常见的例子是键盘上方的笔记本电脑上的“特殊”按钮,用于启动应用程序或控制音量。这些按钮通常会触发操作系统响应的event handler。不过,这是一个非常简单的通知系统。

答案 1 :(得分:0)

BIOS为您提供基本输入/输出,而硬件具有远远超出基本功能。如果没有驱动程序,则无法使用这些功能。

此外,某些硬件根本不是基本硬件,在安装驱动程序之前无法使用它们的功能。