BIOS是否具有其他程序无法执行的任何特殊功能?


6

我只是想问一下,当我在搜索关于BIOS的信息时,我发现了大部分过时的文章,所以我只是有一些关于它如何工作的简单问题。

如果我是正确的,主要的BIOS目的是将信息从HDD加载到CPU(主要是某些操作系统)。后来,他们添加了一些小程序,你可以使用int指令来调用它在PC中简单地完成一些任务,比如访问硬盘或访问VGA等等。

但如果我仍然正确,所有这些工作都可以由具有ring 0模式的其他每个程序手动完成。我的意思是,BIOS没有其他程序所没有的特殊功能,对不对?

我知道在DOS的日子里,BIOS程序很常用。但是现在,他们呢?我的意思是,OS现在甚至使用BIOS例程吗?当有驱动程序的一切?

但是BIOS仍然会得到很多更新,并且有许多错误修复,所以我想知道现在BIOS究竟是什么角色。

例如,我正在考虑改变FSB频率。你可以通过BIOS做到这一点,但你必须有其他方法来做对吗?由于BIOS只是程序。

我认为你可能需要BIOS的只是OS和特定硬件之间的兼容层,比如芯片组,但是,如果你知道到达hdd的确切方法(哪些端口和哪些数据要发送给它们),你可以BIOS是不是?谢谢。

Answers:


11

'BIOS'的'BIOS'位确实是硬件和OS之间的兼容层。是的,您可以直接驱动硬件但是您需要为每种主板设计编写驱动程序代码,以便您的应用程序可以在每台机器上运行。在Lotus 123是一个DOS应用程序的非常暗淡和遥远的过去,最初的几个版本直接驱动并行打印机端口以加快打印性能,如果你有一台真正的IBM PC或一个非常好的克隆,这一切都很好但是在某些PC上,123不会打印,因为并行端口的电子设备与IBM的设计略有不同。

BIOS硬件例程和中断机制还有助于在尝试使用相同硬件或同时读取相同寄存器的多个应用之间进行仲裁,因此BIOS可防止无政府状态 - 即竞争访问低级硬件的应用之间的崩溃。

“BIOS”的另外两部分是电源自检(POST)例程和计算机的“CMOS设置程序”。

一段时间以来一直在取代BIOS设计 - 尤其是因为它作为硬件兼容层的功能以性价格出现。现在越来越多的计算机正在构建一种称为可扩展固件接口的替代方式(EFI - 现在已转变为统一EFI或UEFI) - Apple已经使用EFI一段时间了,所以有一些高端桌面和服务器机器。如果您想了解更多信息,请查看此Wikipedia文章。这是最近的新闻报道


谢谢,但是,如果BIOS为OS提供一些标准化接口,为什么不设计硬件以具有相同级别的接口?例如Intel和AMD都有不同的芯片组,两者都可以在HW级别上提供相同的功能。你知道,提供相同的界面。而且,当我说BIOS无法做任何操作系统时,我是对的吗?你知道,BIOS只是一个从外部存储加载到RAM的SW吗?
user32569 2010年

“..为什么不设计硬件以具有相同级别的接口?” 这将是一个理想的情况,但它不会发生这样的情况 - 芯片制造商总是生产具有不同信号和时序要求的不同设计,或者将多个I / O功能集成到单个硅片中,需要哄骗才能使用几乎没有额外的调用和扭曲,系统板设计人员和BIOS开发人员始终确保INT Y的功能X始终提供预期的功能。(续)
Linker3000 2010年

...对于一家软件公司来说,发现Acer的新笔记本电脑使用了不同品牌的USB芯片组而且您的应用程序不知道如何驱动它,因此您的数据记录软件将无法运行该平台,因为您的直接USB调用以某种方式锁定硬件。我很欣赏你从原来的问题来到哪里,但IBM设置了应用程序的标准和操作系统使用s / w驱动程序和BIOS调用与硬件接口,整个'IBM PC'规范的一部分已经与我们相处自从。
Linker3000 2010年

...最后一个问题是方便之一:假设一家软件公司不得不坐下来处理每一块硬件,以确保他们的应用程序拥有支持它的所有驱动程序,然后编写一些代码,当Intel01加载时,它会显示...(USB_CHIPSET) DRV_Intel01当Intel02在SIS01加载时加载DRV_Intel02 ...然后让下一个例程对所有其他IO设备执行相同操作 - 您的应用程序将花费大量时间启动!不可否认,这种事情确实发生了,但使用BIOS调用消除了很多需要这样做
Linker3000 2010年

3

你误解了一个非常重要的事情。BIOS不是软件,它是固件。它是标准化硬件级功能的部分。这是加载所有其他“程序”的东西。

允许OS直接驱动硬件的主要问题是改进。例如,已经证明传统的x86处理器很久以前就是死路一条。现代“x86”处理器内部不是x86。相反,他们也有固件(在这种情况下称为微码),因此它们看起来像是x86处理器。使用固件是一种封装级别。现代x86处理器也需要支持8086和268系统中存在的怪癖所需的指令,即使它们今天使用不多。

基本上,操作系统本身并不关心硬件是如何工作的。它可以看到BIOS显示的内容,它在硬件级别上可能正确也可能不正确。这使得从事计算机制造和设计的人员之间的责任分离,并允许每个组织关注最接近它的部件。大多数程序员不知道处理器或主板如何在低级别工作,他们不需要知道,因为他们编程到指定的接口。另一方面,芯片组设计师确实知道主板如何工作,因此他们也将BIOS编程到指定的接口。主板制造商本身并不是从头开始制作主板。他们采用完整的组件并将它们集成到一个系统中,并稍微修改主板的BIOS以使用所使用的组件。

您看到的BIOS更新通常不是某些核心功能的更新。相反,今天主板制造商需要尽快推出他们的产品,因此他们试图尽快进行BIOS修改,这往往会导致错误。有时BIOS更新可以修复某些其他设备的固件。例如,英特尔为其处理器的微码提供可用更新。如果在处理器中发现主要错误,英特尔会将这些更新发送给使用受影响处理器的主板制造商,这些处理器将进行BIOS更新,这将更新处理器微码(微码是只读的,因此需要在每次启动时完成) 。

至于改变FSB频率等,你总是通过BIOS来做。只是某些BIOS暴露给负责FSB的程序组件,以便它们可以被程序修改。不过,这些程序是专业的,因为他们需要知道他们正在使用什么。

另一点是硬件制造商。硬件本身需要知道在哪里寻找程序。在简单的微控制器系统上(它们就像30年前的计算机一样),你有程序的起点。微控制器总是读取单个存储器地址,其中存储程序开始的数据。BIOS为PC做到了这一点。想象一下,如果处理器直接在HDD上访问数据会有多复杂。它需要知道从芯片组,硬盘驱动器控制器和硬盘本身到工作的所有内容以及存储操作系统的HDD的位置。

在多次阅读您的问题之后,我认为您对BIOS及其位置的主要问题是操作系统与现代PC上的硬件连接的紧密程度。已经决定在PC上OS不会与硬件紧密相连。随着时间的推移,这个决定已经证明是好的。看一下coreboot维基百科文章)项目。他们正在计算机的BIOS芯片中实现整个GNU / Linux操作系统。正如您所看到的,它们存在许多与特定主板的可用信息相关的问题,但它们有其优点。他们的系统可以在几秒钟内启动。另一个有趣的电脑是橡果。他们的计算机有整个操作系统位置信息单个芯片。还有Apple。他们的操作系统与硬件并没有太大关系,而且可以制作hackintosh,但是它与PC的关系越来越紧密。

最后,我认为当今BIOS存在的主要原因是PC平台的开放性。为PC制作硬件非常容易,其中一个主要原因是没有一家公司能够控制PC规格。如果要消除BIOS(或其更新的替代品),你需要有人在那里确保操作系统开发人员和硬件设计人员同步,这将非常复杂。


2

很久以前,计算机没有bootstrap ROM。其中一个具有修改RAM的直接接口,可以暂停CPU,更改RAM,然后重新启动CPU。因此,当您重新启动系统时,您必须确保CPU已停止,输入您的引导代码,该代码将从纸带或诸如此类的东西加载第二阶段引导加载程序(2bl),然后“取消”您的CPU。

ROM显然在这里节省了一天。当您打开基于x86 CPU的系统时,它开始在地址FFFF:FFF0上执行。这是x86 CPU的硬连线功能。ROM必须驻留在该地址,实际上BIOS的上半部分(通常从E000:0000开始)。

术语BIOS是旧CP / M操作系统的延续。CP / M的结构是最低层的ROM BIOS,中间的BDOS(基本磁盘操作系统)和用户面前的CCP(控制台命令处理器)。BIOS具有执行低级功能的例程,例如读/写特定磁盘扇区,从键盘读取密钥,将字符写入屏幕等.BDOS将使用BIOS功能来实现文件系统,并且CCP将是使用BDOS和BIOS功能的命令shell。想法是BIOS将包含硬件特定接口,并且BDOS和CCP在任何CP / M系统上都可以是相同的。

BIOS还将保存处理器执行的初始代码,初始化所需的硬件,显示启动画面,从第一个磁盘驱动器的第一个扇区加载2bl并运行它。

MS-DOS 1.0,几乎是CP / M的x86实现,从版本2.0开始添加了类似Unix的类似功能,结构相同。当时的IBM PC BIOS还包括原始AT BIOS中的视频模式切换,图形功能和硬盘支持等增强功能。

但是,大多数DOS程序一旦启动就不使用BIOS功能; 他们出于性能原因直接访问硬件。在32位CPU变得司空见惯之后,这一点尤其重要; BIOS仅在较旧的16位模式下工作,因此从32位模式调用它会进一步降低性能。

在1990年左右,PC架构开始扩展,并开始包括APM,PnP和PCI等新产品。因此BIOS开始承担额外的功能并变得更大。PC也开始使用芯片组而不是分立元件。初始化芯片组需要使RAM和其他组件(如PCI总线)可用,因此必须由BIOS引导代码处理。由于某些原因,许多芯片组供应商不愿意记录他们的设置过程如何工作。

APM由BIOS功能处理; 即,为系统供电,操作系统必须调用APM功能。APM的继任者ACPI是BIOS现在所做的重大事情。ACPI BIOS负责在内存中创建一堆表,描述许多非即插即用硬件组件。启动操作系统使用它来确定有多少CPU,系统有多少RAM插槽,系统是台式机还是笔记本电脑,安装了多少电池等等。还必须调用ACPI BIOS来关闭电源。系统,或将其置于睡眠状态等。但是,操作系统代码无法处理ACPI调用。

大多数时候BIOS更新是为了修复ACPI错误,因为ACPI很复杂且很难,或者引入了增强型微码。所有现代CPU都允许微代码更新,如果发布新的微代码更新,则必须更新BIOS以安装新的微代码。正常程序可以更新CPU的微码。

SMI也由BIOS处理。我很确定PC中的大多数热量和电源相关硬件都会触发SMI,其例程会调整风扇/ CPU速度和/或其他内容。其他事情可以触发SMI; 查看有关系统管理模式的维基百科文章。但是,如果记录了硬件接口,也没有理由不能用操作系统代码替换此代码。

除电源事件外,现代操作系统根本不使用BIOS进行硬件访问。某些引导加载程序确实使用BIOS字符I / O来显示文本,并且磁盘I / O加载操作系统引导代码。

所以我希望这能够揭示BIOS的作用,而且大多数情况下你对它的工作原理是绝对正确的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.