我在一个测验中遇到了一个问题,无法回答。有人可以告诉我:
既然BIOS已经有与硬件通信的代码,为什么还需要设备驱动程序?
我在一个测验中遇到了一个问题,无法回答。有人可以告诉我:
既然BIOS已经有与硬件通信的代码,为什么还需要设备驱动程序?
假设您在谈论传统的x86 BIOS,有几个大问题:
BIOS只有与启动系统所需的有限设备通信的代码(存储控制器、以太网、USB键盘/鼠标、USB大容量存储)。 BIOS没有您的USB打印机或网络摄像头的驱动程序。这也是不实际的事情。有成千上万的设备需要驱动程序。 BIOS无法包含它们所有。这也意味着每个新硬件设备都需要一个BIOS更新。
BIOS INT调用对于现代硬件来说是慢而且不可行的。它们设置为读/写小块数据(从磁盘读取几个字节,在屏幕上显示字符)。它们没有通过DMA从磁盘读取几兆字节到缓冲区的机制。请记住,原始的BIOS INT调用是针对软盘驱动器和文本模式显示开发的。
BIOS INT层位于实模式下。任何现代操作系统都是保护模式。要在现代操作系统中进行BIOS调用,必须降到实模式,执行工作,然后返回保护模式。这是一个非常昂贵的操作。
但UEFI呢?新PC(几乎所有为Windows 7 x64及更高版本设计的设备)使用UEFI固件,而不是传统的x86汇编语言BIOS。虽然UEFI固件通常仍被称为“BIOS”。
当UEFI首次出现时,人们希望它将导致与操作系统无关的驱动程序。 UEFI提供了一个现代化基于C的API,较易于使用。它具有可安装驱动程序的概念。有一些机制供现代操作系统调用UEFI服务。但是,这并没有得到很多推广。UEFI“驱动程序”基本上只用于预启动。一旦操作系统接管,它就自己处理。
在操作系统中使用UEFI驱动程序仍会产生性能开销。此外,将“不透明”的UEFI驱动程序集成到现有的操作系统中也很困难。每个操作系统都有磁盘/文件系统驱动程序、网络堆栈、USB等多层驱动程序,它们的实现方式略有不同,因此很难让UEFI驱动程序适配各种操作系统。(请在大约十年后再询问。) 请注意,现代笔记本电脑还有一种与操作系统无关的“驱动程序”层,即ACPI。许多平台在其ASL/AML代码中拥有“驱动程序”,可向操作系统提供简单的事件通知。最常见的示例是笔记本电脑键盘上方的“特殊”按钮,用于启动应用程序或控制音量。这些按钮通常会触发操作系统响应的事件处理器。尽管如此,它仍是一个相当简单的通知系统。BIOS 提供基本的输入/输出功能,而硬件具有远远超出基本功能的特点。没有驱动程序,使用这些特性是不可能的。
此外,一些硬件根本就不是基本的,除非安装驱动程序否则无法使用它们的功能。