![为什么 BIOS 使用电池供电的内存而不是将设置存储在 EEPROM 中?](https://linux22.com/image/1566799/%E4%B8%BA%E4%BB%80%E4%B9%88%20BIOS%20%E4%BD%BF%E7%94%A8%E7%94%B5%E6%B1%A0%E4%BE%9B%E7%94%B5%E7%9A%84%E5%86%85%E5%AD%98%E8%80%8C%E4%B8%8D%E6%98%AF%E5%B0%86%E8%AE%BE%E7%BD%AE%E5%AD%98%E5%82%A8%E5%9C%A8%20EEPROM%20%E4%B8%AD%EF%BC%9F.png)
当您取出主板电池时,PC 会忘记其 BIOS 设置。同时,BIOS 存储在 EEPROM 上,可以轻松升级,无需额外工具。为什么 BIOS 不使用这个内存来存储设置而不使用电池?
答案1
虽然它可以存储设置在EEPROM中它应该如何处理时间?
计时仍然需要长期备份解决方案,你不能只是说“好吧,你可以从互联网上获取时间”,因为在很多情况下你做不到。有些机器需要隔离,无法连接到互联网,但它们仍然需要相当准确的计时,否则一切该机器上发生的事情将于 1970 年 1 月 1 日发生。
与地球上最常见的电池相比,超级电容器和锂聚合物电池价格昂贵,但我们已经有了一个很好的解决方案,可以让时钟不受干扰地运行数年。
所以。我们必须保持时钟运行,而且它还需要少量内存。出现了一个问题:
假设我们已经有了系统运行所必需的电池供电存储器,那么引入完后还有存储设备只是为了存储已经“安全”的基本设置,只要您足够快地更换电池?
我很确定现在很多 UEFI 系统可能都会将设置存储在 EEPROM 中。
正如其他人提到的那样,还存在这样的问题:存储在该区域中的许多设置很可能会使系统完全无法使用。
举例来说,它存储在系统启动时应用的强制内存时序、CPU 超频、CPU 电压和其他低级设置等设置。
如果没有一种快速简单的方法来清除这些设置(最好是在关闭系统时清除以减少损坏的可能性),那么我们很容易陷入系统完全无法使用的状态,并且仅仅通过打开电源就可能对自身造成更多损坏。
通过取出电池或短路电池跳线,可以轻松重置设置,让您快速且最重要的是安全的将系统恢复为其故障安全默认值的方法。
EEPROM 意味着必须有一些额外的硬件和代码来检测启动时按下的开关并恢复一些“已知良好”的设置。它还有很多听起来不多的东西,在系统启动的早期阶段执行此操作意味着硬件和软件中有很多额外的逻辑来处理它。擦除 EEPROM 实际上并不是那这很容易,但要做到这一点,BIOS 还有很多工作要做。
更简单的是,当取出电池时,它会清除所有设置。
答案2
这是因为在早期,BIOS 存储在 ROM 中,而不是 EEPROM 中。这些芯片中的数据无法重写(固件更新意味着更换芯片),因此设置必须存储在可重写的单独芯片中。正如其他人所说,我们可以通过简单地重复使用已经用于跟踪系统时间的电池供电的非易失性 BIOS 内存(又名 CMOS)来最大限度地降低硬件成本和复杂性。
随后业界转向使用 EPROM,这种芯片在暴露于紫外线后可擦除并重写。显然,这种芯片仍然不适合存储设置。
业界最终选择了 EEPROM,它可以用编程方式重写,并且当然可以将设置存储在 EEPROM 中。但是,正如 Mokubai 所说,将设置存储在 CMOS 中允许用户在弄乱设置时轻松重置设置。此外,用于从 CMOS 读取/写入设置的 BIOS 代码已经使用多年,并且经过了充分测试。因此,OEM 没有太多动力去修改实现以切换到 EEPROM。
尽管如此,现代 UEFI 固件确实将某些设置/配置存储在 EEPROM(又称闪存,又称 NVRAM)中。例如启动项、启动顺序和安全启动密钥。这些不存储在 CMOS 中,因为:
- 与内存时序等设置不同,如果您弄乱了它们,您仍然可以启动到固件设置菜单。然后您可以使用菜单恢复设置。
- 为了安全起见,安全启动会维护一个阻止执行的恶意/易受攻击的启动组件的哈希/证书列表,以及一个允许执行的正常组件的类似列表。第一个列表称为 dbx,第二个列表称为 db。两者都属于安全启动密钥类别。如果将它们存储在 CMOS 中,当电池耗尽且用户重新启动计算机时,密钥就会丢失。
- CMOS 的容量有限。增加容量很容易,但存储单元越多,维护数据所需的电池消耗也就越大。