为什么BIOS的ROM芯片不使用CMOS技术制成?


9

阅读有关BIOS / CMOS的计算机硬件课程后,我仍然无法确定为什么不使用CMOS技术构建BIOS的ROM芯片的原因,以及为什么将其连接到名为“ CMOS”的单独芯片上以存储BIOS的原因。配置信息。

这来自讲义

程序存储在系统BIOS芯片上,而可变数据存储在CMOS芯片上

CMOS硬件组:通用,必要但可能会更改的硬件– RAM,硬盘驱动器,软盘驱动器,串行和并行端口

我知道BIOS存储在闪存中,并且与其他实现相比,CMOS MOSFET技术的功耗更低。

为什么只有像其他存储设备一样不使用CMOS的BIOS ROM才有优势?为什么不能将BIOS配置信息存储在其自己的ROM芯片中而不是“ CMOS芯片”中?


1
CMOS是否不需要电池来保存数据?电池耗尽后,丢失配置和时钟设置是一回事,但如果BIOS丢失,那将是一场灾难。您可以编辑最后一句话。我不明白你在问什么。
晶体管

1
BIOS是ROM,而设置是RAM
Tony Stewart Sunnyskyguy EE75 '18年

1
@Kais ROM的任何部分均不可写。这与该术语的含义相反。在技术之间- Eraseble可编程ROM年代就开始做你的建议可能,而现在,在电路编程简单,这其实经常做。但与此同时,将电池的低功耗角作为时钟保持在时钟中并保留某些设置也是可能的,因此这在某些系统中也是一种选择。
克里斯·斯特拉顿

2
“ ROM”表示“ 只读存储器”。根据定义,它是不可写的。通常,实际的ROM涉及定制金属化层甚至是实际的组成晶体管。相比之下,可以更改内容的种类很多的“常读”存储器(PROM,EPROM,EEPROM,闪存等),但与RAM相比,其速度和次数受到更多限制。通常今天,您只能在处理器内部找到一个真正的ROM(即使这样,也可能是您无法写入的内容),而外部设备将可以通过正确的连接进行写入。
克里斯·斯特拉顿

1
例如,在现代系统中,处理器内部可能有一个小ROM,它知道如何将串行NOR闪存的内容读入内存,然后开始执行它们。然后,NOR闪存中的BIOS将进行升级,而将其从闪存复制到RAM并跳入其中的小型引导程序在芯片制造时已永久固定。
克里斯·斯特拉顿

Answers:


33

您正在将实现技术与功能性的俗语混为一谈。

CMOS-互补金属氧化物半导体-是一种使用N沟道和P沟道场效应晶体管制造逻辑和相关电路的方法。其定义特征之一是极低的静态功耗-几乎仅在更改状态时才使用电源。结果,CMOS静态存储芯片可以将其内容物在电池上保留数年,并且是存储半永久信息的方便位置。

BIOS和相关的启动代码传统上已存储在PROM或EPROM设备中。IBM PC时代的EPROM通常是用NMOS之类的pre-CMOS技术制成的,但关键的区别是,安装在计算机中时,这些EPROM通常不可写,而只能在特殊的编程器中写。此外,尽管许多现代系统和克隆都使用EPROM,但IBM-PC的实际生产版本使用了更便宜的不可重新编程的PROM(引脚在使用中通常是兼容的)。

然后,PC-AT设计增加了一个由电池供电的CMOS存储器,用于存储可自定义的设置,以及(也许在同一设备中)永久的实时时钟。最终用户通常将其通称为CMOS,尽管这只是当时迅速普及的芯片技术所支持的特定用法。

当然,今天,我们不再为BIOS使用并行E / PROM,而是使用串行NOR闪存并将内容传输到更快的RAM中以供执行。实际上,现代的FLASH芯片由CMOS衍生的技术制成的。而且它们通常可以在电路中重新编程。如果他们要将半永久性的配置信息放入电池后备的RAM或可重新编程的闪存中,则实际上取决于系统设计者-最终用户或启动后的操作系统可能几乎看不到任何区别。

但是,即使使用闪光灯进行设置,通常仍会存在一个低功耗实时时钟,该时钟始终依靠电池供电。


1
当CPU首次启动时,甚至没有初始化RAM(DRAM初始化很复杂)。它所做的只是在特定位置执行代码(通常是基于SPI的BIOS芯片,但据推测,出于调试原因,您可以对后续引导程序进行编程,以通过旧式PCI或LPC查找BIOS)。放入RAM的唯一内容是IVT(中断向量表)和相关代码,这些代码仅在退出实模式之前有用。CPU引导时,实际的BIOS执行不会在内存中发生。有关更多详细信息,请参见wiki.osdev.org/System_Initialization_(x86)
森林

1
@forest-不太可能是真的,并且链接上的较宽泛的描述实际上不支持它。它可能最终会在某些用途不一的缓存ram之类的程序中执行,但是直接从SPI执行并不能很好地执行,并且极有可能避免这种情况。显然,一旦主系统RAM完了,BIOS就会执行完了-即使在并行EPROM BIOS的日子里,这种阴影仍然很常见。
克里斯·斯特拉顿

1
是的,一旦初始化了主存储器,IVT,BDA,EBDA等将被复制到那里。但是,在此之前,它是直接执行的。它不在缓存中执行(这将是CAR模式,即Cache-As-RAM,它需要BIOS进行显式初始化)。
森林

1
请参阅stackoverflow.com/questions/5300527/…,其中对此进行了详细说明。特别是,如何直接通过SPI执行BIOS启动块。通过将BIOS的该区域映射到内存,这是可能的(当然,在实际初始化内存之前,因此就像MMIO一样)。因此,这不仅可能是真实的,而且是真实的。
森林

克里斯·斯特拉顿(Chris Stratton),“而是使用串行NOR闪存并将内容传输到更快的RAM中以供执行” ,除了直接从SPI执行一些初始的“数据移动”代码之外,您如何精确地设想这种“内容传输”?
Ale..chenski '18年

12

早在PC首次发明时,其上的大多数逻辑都是耗电的NMOS和TTL芯片。CMOS非常新,并且PC中使用它的唯一电路与断电时需要用电池供电的东西有关,例如配置RAM和实时时钟。

如今,几乎所有的逻辑都是CMOS,包括耗电的CPU和保存BIOS的闪存EEPROM。因此,从某种意义上讲,您的问题基于一个无效的前提-快闪EEPROM CMOS。但是,无论出于何种原因,PC中的“ CMOS”一词仍仅指RAM和RTC功能。

如果您要问为什么BIOS不存储在易失性RAM中而不是存储在易失性闪存中,那是因为电池出现故障,而擦除BIOS会有效地“破坏”计算机,需要专门的硬件才能使其恢复正常运行。


1
“所以从某种意义上讲,您的问题是基于一个无效的前提—闪存EEPROM是CMOS”-短语“程序存储在系统BIOS芯片上,而可变数据存储在CMOS上”现在让我有些困惑我明白了
Kais

“如果您要问为什么BIOS不存储在易失性RAM中而不是非易失性闪存中,那是因为电池发生故障。”不,我的意思是相反的-为什么CMOS芯片上的信息不存储在BIOS闪存中。
Kais

3
@Kais,因为不能任意覆盖闪存,并且管理重写闪存的整个页面会使出错的方式变得复杂。同样,有些事件由某些BIOSen存储,例如,如果在错误的时间断电,则有可能使闪存耗尽和/或导致数据损坏。可以使用真正的EEPROM存储器-但是a)写入速度很慢,并且b)无论如何,您都有一块低功耗的电池供时钟使用。
rackandboneman '18

1
...也因为整个系统是在闪存普遍可用之前设计的,所以BIOS存储在PROM中(后者使用保险丝确定每个位是1还是0,并且只能从1更改为0,但不能更改)或掩盖的ROM(使用覆盖在芯片上的一层金属线对其进行编程,并且在制造后根本无法修改),因此必须使用单独的设备,从那时起,所有东西都必须保持向后兼容性。
Jules

8

我认为您混淆了“ CMOS”首字母缩写的两种用法。有些芯片完全由互补MOS晶体管技术制成。实际上,如今几乎所有芯片都是以这种方式构建的,其中包括Flash芯片上的许多数字控制电路。

自最早的日子以来,CMOS的其他用途一直存在于PC工业中,这是指存储一些设置和带有附加电池的实时时钟的芯片。那时(80年代初),PC中的大型芯片大部分是NMOS技术,其他逻辑芯片是双极晶体管逻辑(TTL,LSTTL等)。使用的唯一CMOS芯片是RTC芯片,因此被称为“ CMOS”。

如今,RTC不再是PC体系结构设备上的单独芯片。相反,它内置在主板芯片组中(附带地由互补MOS电路生产)。如今,很少有BIOS使用芯片组RTC部分中的旧电池支持的RAM来存储设置。相反,BIOS使用SPI闪存存储设备的几页以非易失性方式保存其设置。因此,当电池电量耗尽或断开连接时,PC中会丢失一些最小设置。电池断电所损失的最小设置是某些控制芯片组上电和复位行为的设置,实际上甚至不存储在电池供电的RAM单元中,而是存储在由硬币供电的特殊低功耗触发器锁存器中电池。


2

另请参阅/superuser/989499/what-does-a-cmos-chip-look-like:这为我们提供了指向原始MC146818数据表的便捷链接。

该芯片被内存映射,并提供了64个字节的位置。其中14个用于时钟,其余的用作通用RAM。当PC关闭时,整个芯片都由电池供电,以保持实时时钟的滴答声。

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.