关于ROM BIOS的启动问题

2020-07-06 00:00:00 程序 模式 的是 内存 提到

问题:


近看了一本书,提到ROM中的系统BIOS程序在系统启动时的处理过程,看过以后不是很明白,希望大侠能够指点一二。

1,文中提到,为使PC/AT计算机向上兼容,系统会产生一个影子区域,即BIOS代码会被复制到这个区域,而另一方面原来系统ROM中的基本输入输出程序BIOS一直处于CPU能寻址的内存高端位置处。
不太明白的是,保证ROM中BIOS程序一直处于CPU能寻址的内存的高端位置处是在什么时候完成的?

2,文中提到,PC/AT微机的BIOS有可能大于64KB。而我们在内存中留出的影子区域(shadow)也就是ROM BIOS的映射区只有64KB。
那么我们是怎么选择复制哪些BIOS程序呢?

3,文中提到,BIOS程序会使用一种称作32位大模式的技术把数据寄存器的访问范围设置为4G(原来是64KB)。而BIOS在执行一些列硬件检测和初始化操作后,就会把于原来PC机兼容的64KB BIOS代码和数据复制到内存低端1MB末端的64KB处,然后跳转到这个地方应且让CPU进入真正的实地址模式工作。
请问上面这个过程具体是怎么实现的?什么叫做真正的实地址模式呢?


解答:

1. BIOS代码的copy很常见。即在启动过程中,BIOS的代码会被拷贝到一个指定的虚拟地址,其主要用途多用于OS在运行过程中实时的调用BIOS提供的接口。是否拷贝到虚拟地址的高端部分应该是操作系统决定的,例如windows就是如此,估计LZ看的书是以windows为例。 

2,Cpu执行这条指令后,将导致CS隐藏寄存器中基地址从0xFFFF0000变成000F0000。所以物理地址将落在0x000FE05B,也就是在1M以下那个Bios。

3.这里说的是IA32架构的big real mode。有人认为这是cpu的一个bug。其过程是进入保护模式后,将各个段寄存器设置恰当后再退回到实模式,就可以在实模式下访问和保护模式下一样的4G地址空间。LZ可以google其详细流程。 


文章来源CU社区:关于ROM BIOS的启动问题

相关文章