免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: daidongly
打印 上一主题 下一主题

关于ROM BIOS的启动问题 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2008-03-07 20:25 |只看该作者
CPU出的地址线是特定的,但是过了南桥芯片就会发生变化,从芯片的角度取理解就容易了。

论坛徽章:
0
32 [报告]
发表于 2008-03-12 23:59 |只看该作者

回复 #1 daidongly 的帖子

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

X86 CPU的地址空间在实模式下是00000H-FFFFFH,保护模式下是00000000H-FFFFFFFFH
实模式和保护模式是CPU的一个寄存器决定,查看一下Intel 64  and IA-32 Architectures Software Developer's Manual
无论是在实模式还是保护模式下,有一段地址空间即可以寻址到ROM也可以寻址以RAM,比如E0000-F0000可以访问ROM也可以访问RAM,访问RAM的也就是所谓的影子区域,个体访问哪个区域由北桥或南桥决定,不同的芯片组处理的不一样,如VIA,Sis,Intel,nVidia。BIOS执行过程中由BIOS决定存取什么地方。


2,文中提到,PC/AT微机的BIOS有可能大于64KB。而我们在内存中留出的影子区域(shadow)也就是ROM BIOS的映射区只有64KB。
那么我们是怎么选择复制哪些BIOS程序呢?
现在的BIOS,至少也有512KB,一般是1MB到2MB,EFI的话至少也会是2MB吧,
开机时执行ROM,然后把整个程序解压复制到RAM中,shadow一般是中断服务程序、ACPI、DMI的一些入口数据。

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

论坛徽章:
0
33 [报告]
发表于 2008-03-18 10:24 |只看该作者
不知对不对,我记得在实模式下对段寄存器赋值,是不能改变其隐藏部分的。
如果在实行第一句跳转后,cs从FFFF0000到F0000 应该不能算是正真的实模式吧,

问题是 如果是这样Cs被flush,那其他的段寄存器又是如何?
4.25
今天回来再看,终于明白了。
另外,自己上面的描述有错误,现在做一下更正,在实模式下并非不能改变其隐藏部分,
而是有些属性位不可改变。
最后,其实这个问题在上面的十五、十六楼已经把答案说的差不多了,而自己没有明白有几点原因,现在写下来:
1 上面关于隐藏部分记错了,以为在实模式下不能改变
2 将alias与shadow混淆了,以为是一回事

[ 本帖最后由 JJSTU 于 2008-4-25 14:31 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP