use*_*987 1 operating-system bios device-driver
我在一些测验中有一个问题,我无法回答.谁能告诉我:
鉴于BIOS已经具有与硬件通信的代码,为什么设备驱动程序是必需的?
假设您正在谈论传统的x86 BIOS,那么有一些重大问题:
BIOS仅具有与启动系统所需的有限设备子集(存储控制器,以太网,USB键盘/鼠标,USB大容量存储器)通信的代码.BIOS没有USB打印机或网络摄像头的驱动程序.它也不实用.有成千上万的设备需要驱动程序.BIOS不能包含所有内容.这也意味着每个新的硬件设备都需要BIOS更新.
BIOS INT调用是懒惰的,对于现代硬件来说是不切实际的.它们被设置为读/写小块数据(从磁盘读取几个字节,在屏幕上打印一个字符).它们没有使用DMA将数据从磁盘读入数兆字节的机制.请记住,原始BIOS INT调用是为软盘驱动器和文本模式显示而开发的.
BIOS INT层以实模式存在.任何现代OS都是保护模式.要在现代操作系统中进行BIOS调用,您必须进入实模式,完成工作,然后返回保护模式.这是一项非常昂贵的操作.
但UEFI怎么样? 新PC(几乎任何为Windows 7 x64及更高版本设计的)都使用UEFI固件,而不是传统的x86汇编语言BIOS.虽然UEFI固件通常仍被称为"BIOS".
当UEFI首次出现时,有希望它会导致独立于操作系统的驱动程序.UEFI提供了一个现代的基于C的API,使用起来更容易一些.它有可安装驱动程序的概念.现代操作系统有一些机制可以调用UEFI服务.然而,这并未获得太多牵引力.UEFI"驱动程序"几乎适用于预启动内容.一旦操作系统接管,它就会发挥作用.
在OS中使用UEFI驱动程序仍会产生性能开销.另外,将"不透明"UEFI驱动程序集成到现有操作系统中会很困难.每个操作系统都有多层磁盘/文件系统驱动程序,网络堆栈,USB等.它们都有点不同,并且很难让UEFI驱动程序适合. (大约10年后再问一次.)
请注意,在现代笔记本电脑中有另外一个与操作系统无关的"驱动程序"图层:ACPI.许多平台的ASL/AML代码中都有"驱动程序",可以为您的操作系统提供简单的事件通知.最常见的例子是键盘上方的笔记本电脑上的"特殊"按钮,用于启动应用程序或控制音量.这些按钮通常会触发操作系统响应的事件处理程序.不过,这是一个非常简单的通知系统.