为什么计算机必须具有BIOS?


35

BIOS软件被内置到PC,并在(“启动固件”)开机时是由PC第一代码运行。当PC启动时,BIOS的第一项工作是开机自检,它会初始化并识别系统设备,例如CPU,RAM,视频显示卡,键盘和鼠标,硬盘驱动器,光盘驱动器和其他硬件。然后,BIOS找到位于外围设备(称为“引导设备”)(例如硬盘或CD / DVD)上的引导加载程序软件,并加载并执行该软件,以控制PC。[2] 此过程称为启动或启动,是自举的缩写。

哪些条件确定计算机系统必须安装BIOS?

为什么操作系统实际上不能使所有BIOS正常工作?


40
为什么汽车发动机需要启动器?引擎不应该强大到可以自行启动吗?
Der Hochstapler

4
@OliverSalzburg在不久的将来,没有启动器的燃气发动机将有可能实现。通过直接注射和计算机,它非常容易。
摩押

2
他们已经有自动启动的引擎,但大多数都是12缸以上或旋转式引擎。大多数发动机不能简单地自动启动,因为它们无法通过一次动力冲程产生足够的动力来克服其惯性矩。直接喷射和更好的正时可能会有所帮助,但实际上,您需要更轻的发动机来增加大功率产生的能量与飞轮,曲轴,齿轮等所产生的惯性矩之间的比率。
Lèsemajesté2012年

5
实际上,不需要PC上的BIOS。IBM System / 360和/ 370计算机(可能还有更新的版本)以一条硬连线的指令启动,该指令从控制台上的拨盘选择的设备中读取一条记录。该记录包含一个引导程序(它必须容纳80个字节-一张打孔卡),该程序加载了一个更复杂的引导程序,该程序从磁盘加载了OS。我猜“ BIOS”是当您按下右按钮(称为IPL或初始程序加载)时硬连线执行的单个指令。
Ex Umbris'3

2
您在问题中混淆了“计算机”和“ PC”。这就是为什么答案令人困惑,有时甚至是矛盾的原因。
rds 2012年

Answers:


41

BIOS是存储在主板本身上的硬件相关代码。每个不同的主板都需要为其编写一个定制的BIOS,因此不可能有一个通用的 BIOS / OS一体机(尽管从技术上讲,BIOS仅是存储代码,因此理论上您可以为一个特定的主板编写一个OS)。 。如您所述,BIOS的用途是执行以下操作:

当PC启动时,BIOS的第一项工作是开机自检,它会初始化并识别系统设备,例如CPU,RAM,视频显示卡,键盘和鼠标,硬盘驱动器,光盘驱动器和其他硬件。

请注意,您仍然可以在没有任何外部存储的情况下启动计算机-这就是为什么BIOS是计算机的要求。换句话说,BIOS提供了一个通用的软件接口,以允许存储的计算机程序与连接到主板的各种硬件设备进行通信。

例如,如果我有两个带有两个不同SATA控制器的不同主板,BIOS允许我编写一段可以同时使用这两个代码的代码,而无需了解主板实际上是如何向SATA设备发送命令的。我只需要告诉计算机“从该SATA设备读取扇区X”,BIOS便负责将这些命令实际发送到硬件。

它实际从中获取“读取扇区X”信息的地方是BIOS中包含的存储程序,该程序通常指示计算机从存储在公共位置的引导加载程序开始读取。这些公共位置是由各种软件和硬件开发人员同意的,并且通常提供给公众以允许系统之间的更大兼容性。

一旦建立了基本的接口级别(再次通过软件进行逻辑接口),操作系统本身就会与各种硬件设备建立一个通用接口(通常通过使用“设备驱动程序”),然后操作系统就可以控制硬件。


最后,应该注意,BIOS还用于修改计算机硬件配置,并将其存储在板载EEPROM中(以便您的计算机在下次启动时记住更改)。但是,正如我之前所说,一旦加载了操作系统,它将完全控制计算机。

这允许主板制造商开发软件,使您可以从操作系统内部进行这些更改,而不必重新启动进入BIOS。同样,这是非常依赖于硬件和软件的,但是它表明所有计算机接口都是相对的。BIOS正是其名称所隐含的含义-一个基本的输入/输出系统,它允许用于更高级程序(“操作系统”)的通用软件接口来控制计算机。


2
启动计算机时,BIOS在处理器上作为机器代码运行。您可以这样想,但从某种意义上说它并没有真正“关闭”-它只是切换到运行操作系统。当您启动计算机时,BIOS会告诉计算机开始执行存储在位置X的机器代码。换句话说,BIOS只是初始化您的硬件,然后将计算机定向到继续运行代码的位置。
突破

13
BIOS / OS多合一并非并非不可能。我不知道为什么这里的每个人都这么说。将每个部分都放在单独的设备/存储上并不意味着它们不属于同一逻辑实体。IBM PC之前的所有计算机都是一体的,也就是说,BIOS是由开发OS内核的同一计算机制造和开发的。实际上,操作系统更新有时包括BIOS更新。
m0skit0 2012年

3
@Oliver实际上,对于ACPI,在操作系统启动后通常会使用BIOS功能。
derobert

1
BIOS允许OS(软件层)与硬件交互。BIOS和OS具有不同的用途。它们是整体的两个部分。一个不会取代另一个。
本·理查兹

1
@突破:取决于谁制造硬件;)对于IBM PC,由于硬件类型的多样性,逻辑演变是独立的BIOS和OS制造商。这在过去没有发生过。这就是为什么PC是一场革命(幸运的是,除了无缘无故地拥有M $),它改变了整个计算机市场。
m0skit0 2012年

7

您的操作系统位于硬盘上,如果您打开计算机,它就不会神奇地开始从该硬盘读取数据。是BIOS从硬盘加载引导加载程序,并进行一些测试,并允许您配置BIOS的某些设置。

您的操作系统无法执行此操作,因为它位于硬盘上,而不位于ROM中。

因此,您需要BIOS或类似(但不同)的技术,例如EFI ...

制造商可以将部分OS放在ROM中(负责加载OS的引导加载程序);但是,这并不广泛适用,并且仍然存在BIOS或EFI。


1
您正在混合两个不同的概念。BIOS与操作系统无关,也就是说,BIOS可以是操作系统的一部分。例如,如果它是由同一制造商制造的,并且只能与该操作系统一起使用,例如游戏机的引导程序。
m0skit0 2012年

5
“ BIOS独立于操作系统,也就是说,BIOS可能是操作系统的一部分。” ??矛盾非常矛盾,大声笑。
突破

2
游戏机是计算机,Atari,Amiga和旧Mac也是如此,因此这绝对是相关的。@突破:这并不矛盾。这意味着BIOS与OS无关,因此可以(或不可以)成为BIOS的一部分。
m0skit0 2012年

@TomWijsman您是这里唯一的巨魔。游戏机是计算机的子集。如果某些控制台可以执行此操作,则某些计算机也可以执行此操作。另外,不要那样使用粗体。这是不合适的。
luiscubal 2012年

1
@TomWijsman他说了一点,如果游戏机可以做到,那么电脑也可以。而且,只要不是问题或答案,我都不会认为它是题外话。毕竟评论是评论。仅此而已。(对于大胆的问题,他并没有发表评论,尽管这涉及到术语,但每个人都对此发表评论。)
突破

6

没有真正的逻辑原因。这更多的是遗产和历史问题。

  1. 不必一定要安装BIOS。它是IBM PC的遗产。尽管这被证明是一个好主意

  2. 操作系统这样做并不会真正改变任何东西,因为它仍然会像BIOS一样进行操作。当然,操作系统将需要位于ROM中,而不是在I / O设备中。当操作系统构建者决定使他的操作系统BIOS与其他操作系统不兼容时,可能会出现垄断问题。使BIOS制造商与操作系统分离可以提高软件运行自由度。


1
为什么它不能用作BIOS?解释原因。您只需要将引导程序放在ROM上就可以了。我并不是说要完全将其存储在ROM中,即使ROM足够大,它也可以工作(当然要运行它,您需要将部件加载到RAM中,但这也由当前的BIOS完成)。
m0skit0 2012年

3
他说的是“计算机”,而不是PC。是的,它是适用的。实际上,IBM PC(Atari,Amiga,BIOS是操作系统的一部分)之前就是这种方式。
m0skit0 2012年

2
愚蠢的我,我曾经为没有BIOS或OS的嵌入式计算机编写软件,而只有应用程序代码。还是我们不谈论大多数人想到的所有计算机?
jwernerny 2012年

2
不适用于大规模吗?查看PC之前有多少Ataris,Amigas和Macs。
m0skit0 2012年

2
iPhone是一台计算机,我不认为它具有BIOS。甚至在数字时代之前...计算机是一种可编程机器,可以执行操作并针对给定的输入输出相同的结果,对吗?提花织机是一台计算机,它当然没有BIOS(甚至没有OS)。
rds 2012年

5

启动操作系统需要某些操作。如果该操作系统可以装入某些非易失性内存中,则可以直接启动它,但是对于功能齐全的OS(例如Windows,OSX或Linux),则不可能。

需要的是一个小型的轻量级“ OS”,可以在加电时加载它,执行诸如内存和磁盘访问之类的基本操作,然后加载操作系统。尽管这可能是操作系统本身的一部分,而不是一个单独的实体,但是还有其他原因可能导致您希望另一个进程首先启动:

  1. 更新-如果操作系统是这样固定的,那么如果需要任何安全补丁,将很难更新它。可以做到-固件更新始终在设备上进行,例如路由器等,但是这些设备安装了相对简单的操作系统。
  2. 灵活性-计算机是一台通用机器,同一硬件可以运行多个不同的操作系统。拥有可从磁盘加载操作系统的BIOS意味着您可以选择运行哪个BIOS-您甚至可以并行安装多个BIOS。

该过程称为自举


1
那么answear是因为我们有很多不同的OS?我的意思是,如果我们只有一种用于特定硬件的OS模型,那么我们将不需要BIOS吗?
Diogo

1
我不明白为什么Microsoft不可能制作BIOS ...
m0skit0 2012年

1
您不需要整个操作系统都可以放入非易失性存储器中(它可以顺便说一句,您只需要足够的ROM:P)。您只需要引导程序就可以了。
m0skit0 2012年

1
@ m0skit0 Microsoft无法创建BIOS,因为它必须为其要在其上运行软件的每个主板创建一个不同的BIOS。:)
突破

1
同样,@ ChrisF,将操作系统放置在ROM上,首先破坏了操作系统的整体意义。使用ROM直接在处理器上执行一些存储的程序可能会很有意义(这将产生更好的性能),但是操作系统的重点是明确禁止这种类型的操作,并提供通用的软件接口来这样做。
突破

4

PC PC的概念源自CP / M,CP / M是在IBM PC接管之前在基于8位Z-80“ S-100”总线的计算机上流行的操作系统。

CP / M期望与硬件相关的功能位于ROM(BIOS)中。引导加载程序从磁盘加载的另一部分是支持CP / M文件系统(BDOS),然后支持命令处理器或“外壳”(CCP)的软件。期望CP / M支持的硬件不是很多:磁盘驱动器,显示器,一个或两个串行端口(COM或AUX端口),可以连接打印机或调制解调器。

PC BIOS执行类似于CP / M的基本引导功能,而DOS则按预期使用BIOS功能执行基本输入和输出。程序员由于速度太慢而最终绕过了这些功能。这导致PC克隆制造商在80年代中期重新创建了整个平台(就像IBM很好地记录了原始PC的内外一样容易),而不仅仅是提供具有兼容接口的BIOS,尽管他们也必须这样做。

在这一点上,我们可以说,对于现代操作系统,除了启动系统之外,BIOS确实不是必需的。但是...

从90年代初开始,电源管理的概念就流行起来,BIOS为此承担了责任。APM与单任务操作系统(例如DOS)搭配使用时效果很好,但不适用于真正的多任务操作系统(例如Windows或Linux)。大约在386全面投入使用时,支持真正多任务处理的Intel CPU。DOS和BIOS并未针对此CPU的新功能进行更新,这主要是因为所有Intel CPU仍将以原始PC-BIOS设计的传统16位兼容模式运行。因此,除了可能在早期引导阶段外,现代OS几乎会忽略/绕过BIOS的所有类似于CP / M的输入/输出功能。

最终,开发了ACPI,它大部分是BIOS的一部分,它支持电源管理和(通常是笔记本电脑)平台特定内容的配置。ACPI还可以处理休眠,睡眠或关机的最终电源开关状态。

因此,如今是ACPI及其后继产品EFI使BIOS之类的东西成为PC的必要。总体概念是ACPI成为特定平台或主板与操作系统之间的接口,因此不需要单独构建操作系统必须为每种不同类型的主板制造。

装有运行Linux的ARM CPU(以及手机硬件)的开发板存在此问题。通常,它们将配备仅引导加载程序的固件(例如U-boot),但是操作系统几乎必须将每个板作为独立的平台来支持。


3

从某种意义上说,你是对的。BIOS和OS部分执行相同的操作。BIOS和OS的分离仅出于灵活性。

BIOS通常是由硬件制造商创建的。硬件必须确保存在基本功能,例如可以读取磁盘驱动器并显示诊断和错误的基本显示。因此名称为“基本输入输出系统”。

可以在某种程度上完成此操作,而无需进一步了解特定系统上实际存在的实际组件,因为它们都必须支持某种小型BIOS标准。这使供应商可以自定义构建完整的系统。BIOS只需要做足以启动OS的工作即可。关于此起点的约定有一些,因此它只是一个接一个地尝试。这样还可以在同一硬件上使用不同的操作系统。(再次有灵活性)

一旦由BIOS找到并启动了操作系统(或至少是引导加载程序),BIOS本身就会过时了。加载后,现代OS在功能上几乎没有使用BIOS。

如果要使OS能够完成所有工作,则必须将OS放置在可以由硬件访问而无需软件(ROM)的初步帮助的地方。对于某些不关心灵活性的封闭系统,这可能是可能的。如果您考虑将硬件支持构建到其他硬件中,则基本上是在构建一种BIOS ...

另一个问题是内存大小和成本。功能齐全的OS很大,除了修补和更新它的后续问题外,尝试将数GB的OS放入ROM的成本很高。

因此,没有,没有技术原因,但是有许多实际原因,尤其是对于灵活的PC平台。


3

为了在现代PC上运行程序,首先必须已经运行了一个程序,该程序知道如何操作硬件并将程序加载到内存中。通过将基本程序植入硬件本身,可以解决此“鸡与蛋”问题。

这个基本的输入/输出系统(BIOS)很小,范围很有限,但是提供了足够的基础,可以加载和运行第二级引导加载程序,例如GRUBNTLDR。这些第二阶段加载程序比BIOS程序复杂,这使它们能够为适合于加载和承担控制权的操作系统提供更坚固的基础。


很好的非技术性解释。
机械蜗牛

1

如果CPU能够直接寻址硬盘驱动器,而无需依赖BIOS,EFI或ROM(或NVRAM或您拥有的东西)中的其他代码,那么从理论上讲,这样的CPU可以将操作系统从磁盘加载到RAM中并开始执行它。

实际上,从理论上讲,这样的CPU甚至可以在将指令加载到RAM的情况下执行指令。从理论上讲,计算机无法将硬盘驱动器用作主要存储。但这将非常非常缓慢。

这将意味着在CPU中具有额外的代码来访问磁盘,并将有关磁盘的某些概念(例如分区表和文件系统)硬性地连接到CPU中。这些天的CPU足够大,可以做到这一点,但这并不是设计CPU的非常灵活或有效的方法。


过去,计算机直接从磁盘/鼓中运行,而没有大量的RAM。
Daniel R Hicks

-1

不需要它!

通常被称为BIOS的是由三部分组成的集合。

  • 引导加载程序
  • 一个配置工具:现在,大多数东西已经过时了,除了启动顺序和时钟。其余大多数应该是自动的或由制造商设置。
  • BIOS:输入输出例程的库,可帮助操作系统与硬件进行通信。不幸的是,BIOS是16位的,已经过时,不能被现代操作系统使用,因此在很大程度上被忽略了。

引导加载程序是BIOS的一部分。
Daniel R Hicks

@Daniel我已经改写得更清楚了,谢谢。
ctrl-alt-delor 2014年
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.