这是另一种情况psusi
,尽管在1991年前后,尽管已有大量技术参考资料解释了这一问题,但人们普遍接受的关于这一问题的民间智慧就被卡在了1991年左右,这是不幸的是,答案确实是问题的一部分。除此以外。
在1980年代后期,机器固件确实是在ISA总线上的ROM芯片中;机器固件是IBM PC兼容世界中称为“ BIOS”的两件事之一。而且CPU确实确实开始在物理地址000FFFF0
(通过实模式指针访问的“常规内存”中的位置)处执行代码F000:FFF0
。
(您所指的WWW页面的作者S. Ebrahim Shubbar尽管生活在2002年,但仍错误地生活在这个世界中,这个世界甚至更旧。自8086以来,CPU并没有从这种CS:IP
组合FFFF:0000
开始。80286将其更改为F000:FFF0
但是80286世界本身就是1980年代后期仍然过时的世界,民间智慧仍在传播。)
您的“ BIOS芯片” 是 RAM;并且您的CPU不是16位。
在现代PC中,机器固件保存在非易失性RAM中。NVRAM芯片连接到LPC总线(或专用的“固件集线器”接口),并且“芯片组”中的LPC / FWH桥通常禁用对其的写周期。“刷新”固件包括设置芯片组寄存器,该寄存器允许先写入NVRAM,然后再写入NVRAM。(例如,在Intel ICH10中,允许进行写循环的芯片组寄存器位称为BIOSWE
“ BIOS Write Enable”。这里将跳过一些其他详细信息,但这就是要点。)
000FFFF0
自80286年以来,x86处理器就没有开始在本地执行。32位CPU以俗称的虚幻模式启动。即使CS
复位后寄存器的初始值为,F000
与该寄存器关联的段描述符最初仍保留FFFF0000
为其基地址。因此,实际上对应于16:16 CS:IP地址的物理地址F000:FFF0
实际上是自80386以来的FFFFFFF0
。
这就是将机器固件主要映射到32位和64位x86机器上的物理地址空间的地方。在“常规内存”区域中的固件下方有一个128KiB的窗口,但是在现代PC上,保存机器固件的NVRAM最多可达到16MiB(尽管因芯片组而异),并且主要立即映射到物理地址空间的16MiB中。在4GiB线下-即物理地址FF000000
来FFFFFFFF
。(再次以ICH10为例:该地址空间映射到NVRAM的多少由芯片组寄存器FWH_DEC_EN
“ Firmware Hub Decode Enable”(固件集线器解码使能)寄存器控制。对固件进行编码以重新编程。FWH_DEC_EN
根据主板上安装的实际NVRAM芯片的大小进行注册。但NVRAM的顶部512KiB被始终映射到物理地址FFF80000
到FFFFFFF
,并且不能被禁用。)的码复位生活的这个16MiB地址范围顶端64KiB后立即由处理器最初执行。
至于BIOS ROM阴影(这就是所谓的-就是为什么barlop
认为CPU被阴影是个谜):是的,对LPC总线上的NVRAM或固件集线器的访问仍然不及对主系统的访问速度(易失性)RAM。但是,随着OS / 2和Windows NT等操作系统的出现,阴影变得很重要的原因大大减少了-在1980年代末和1990年代初也是如此。实模式操作系统(例如MS-DOS,PC-DOS,DR-DOS等)位于计算机固件提供的I / O功能的顶层。因此,固件的代码和只读数据最终在运行时被大量访问。 保护模式操作系统(例如OS / 2和Windows NT)的依赖程度要低得多在运行时基于固件提供的服务。因此,从NVRAM之外执行的代码和其中的只读数据进入处理器的速度比将其隐藏到系统RAM中的速度要慢得多。
而且,它们所依赖的固件代码和数据不一定存在于映射到物理地址空间部分的NVRAM部分中,即前述的128KiB“常规存储器”窗口,该窗口首先甚至必须是可影子的。保护模式固件服务不需要像真实模式固件服务那样全部位于物理地址空间中的1MiB线以下,而有些则不需要。(当然,如果系统RAM至少为4GiB,则只能对它们所驻留的物理地址空间区域做同样的技巧。)
具有讽刺意味的是,比起S. Ebrahim Shubbar在2002年撰写的书,更准确的信息来源是Phil Croucher的书《 BIOS Companion》(2001年之前的一年)。M。Croucher观察到Unices,Linux,Windows NT和“大概(95 / 98)“”从阴影中获取任何好处“。不一定完全没有好处,但相对于1989年在16位80286机器上以实模式运行MS-DOS,PC-DOS和DR-DOS的人们而言,它却相对很少。