Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1024473
  • 博文数量: 238
  • 博客积分: 2842
  • 博客等级: 少校
  • 技术积分: 2765
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-16 00:20
个人简介

stdlf

文章分类

全部博文(238)

文章存档

2013年(6)

2012年(13)

2011年(82)

2010年(89)

2009年(48)

我的朋友

分类:

2011-07-04 22:39:41

[Why shadow BIOS ?]
在此之前所提的BIOS tasks,都是循着 CPU->NB->SB->SIO->ROM的路径来达成的;意即: CPU是去BIOS ROM里面抓code来执行 ! 明显的一件事是: ROM access time > DRAM access time ! RAM access width is 32bits, ROM access width 通常为 16 bits. 因此,便有了所谓" BIOS Shadowing"的观念产生 ! <- "performance consideration" !!!

[What is shadowing]
意即: 将部分BIOS CODE(in ROM)拷贝至DRAM ! (此后, CPU将从DRAM中抓code来执行...)这样的动作便称做 "Shadowing" ! 而该处的DRAM即称为 shadow memory.

Shadowing
BIOS 中是极为复杂的 kernel code part ! 想深入了解的人最好有 source code trace.

[When to shadow BIOS]
=>
当然是等内存稳定了,可以使用后,才做 ^_^

*
因此,假如 DRAM sizing 有问题, BIOS shadowing必定有问题 !!!


以下是之前在其它文章中发表关于 shadow 的文章,再次节录以供参考 !

[System Behavior before & after shadow]
说的更白话一点就是 : Power On, 跑完 system power-on sequence, CPU会被 reset ( reset 指的是 CPU 内容会回到 "初始值" ); CPU内部的 EIP (32-bit )的初值是 FFFFFFF0h, 所以, CPU 第一个 code read 就是到 FFFFFFF0h fetch code...

这个 memory cycle CPU发出, 先会经过 North bridge ; 此时, north bridge会说 "这不是我的"...然后, south bridge ; south bridge 会说, "这是我的",收下后丢给 ROM ! 所以, FFFFFFF0h 会被 ROM 接走 !!! ( 所以 前人才说 "硬件初始值要把0xFFFFFFF0 0x000FFFF0 mapping到同一个地方", 这个地方就是.....ROM !!! )

之后, CPU所发的 cycle 都会照上述的方式一路抵达 ROM... CPU循着 fetch, decode, execute, store的顺序作事情...

但到某一个阶段前, BIOS code 会指示 " 要将 BIOS data ROM 搬到 DRAM" ! 而在此阶段之后, BIOS会设定 north bridge 缓存器, 告诉 north bridge "之后 CPU所发的 cycle 不可以不收而传到 south bridge"....

自此之后, CPU 所发的 cycle 全部转到 DRAM , CPU循着 fetch, decode, execute, store的顺序作事情...

[Summary]
总而言之, BIOS 一开始是CPU读取 ROM content来执行,之后是CPU 读取 DRAM content 执行 ^_^

[
补充][以提问的方式^_^]

[Q]: shadow memory
到底是那一块 ?
[A]:
以现在的计算机系统而言, shadow memory 是在UMA(upper memory area;传统内存 640K以上至1M之间) "里面"(part of it) ;在此UMA内可以分为 6 segments(64kB/each), total 384KB.

其中 C0000h~DFFFFh: for VGA BIOS and other devices' Option ROMs
E0000h~FFFFFh: BIOS ROM code

这两个 blocks 本质是 memory;之后会被载以ROM content;因此,便称为 shadow memory(好像: ROM在上面, memory在下面,ROM "shadow"...)

[Q]: shadow memory
的内容 完全 "=" ROM content ?
[A]: of course NOT !
除了 UMA不大以外,BIOS ROM因为必须support more and more functions/features,size已经越长越大;除此之外,BIOS ROM中也有部分module是经过压缩的.(UMA不够放...)

BIOS shadow,只会 copy necessary code(Ex. run-time要用的...etc) shadow memory ! 另外,已经执行过后的code也不会被加载. 因此,不是 1-1copy...

[Q]: what Shadow enabled/disable mean in chipset ?
[A]:
前面提过, CPU fetchcode shadow memory 提供 or ROM提供,其根本关键在于 chipset's behavior ! 意即,NB必须做此决定 ! 所以,这机制一般是由NB来实现的.

NB
内有所谓的 shadow registers. shadow register enable, memory cycle shadow memory 来回应; shadow disable,则由ROM回应.

意即:
000E0000h~000FFFFFh
shadow memory replies if (shadow enabled)
000E0000h~000FFFFFh
ROM chip replies if (shadow disabled)

FFFE000h~FFFFFFFFh ? 必定由ROM chip来回应(不然一开机怎么办?). shadow disable/enable无关 !!!

*
若使用 ru.exe 并检视 memory space,可发现上述的情况.

[Q]: shadow
有何好处 ?
[A]:
因为 slower ROM v.s faster RAM,所以放在RAM可以增加 system performance.

*
各位可以发现,同样的code放在 rom & dram中执行速度将大不相同 !

[Q]: shadow memory
issue ?
[A]:
shadowed memory area都会被设成 write-protected ! 因此,这块area是不能 write .所以,若有程序会 "write"这块,则会有问题 !!!

其实, BIOS shadow这段code大家不太会碰触到...了解基本information即可.

有错误请指正 !!!

[附注]
[Q1] "BIOS的所有动作都必须先从ROM COPYDRAM之后CPU才有办法去执行"
Ans :
讲简单一点就是对CPU来说,他只负责提取指令,译码指令,执行指令。至于是读取到哪边的指令他就不管了(IA32 架构)。例如CPU要读取F0000h的指令来执行,那F0000h有可能是ROM也有能是DRAM

[Q2] "BIOS一开始的0E05BHROM的位置?还是DRAM的位置呢?"
==>0~4G
是指地址线的地址(因为Address bus = 32 bits=2^32),至于地址线上面是分配给DRAM还是ROM使用还是Others...就要看实际的硬件架构,例如IA32 架构就有其分配的方式。

==>
所以某个地址线的地址可以被分配给ROM使用也可以分配给DRAM使用,还可以重迭一起使用,例如 F segment (000F_0000h)就是重迭使用,所谓的重迭就是就像是CPU F0000h存取的时候,他是存取到DRAM的数据还是ROM的数据 ? 答案就是看北桥....如果北桥在此时把这个地址是映对到ROM,那么CPU读取到的F0000h数据是ROM里面的,如果北桥是映对到DRAM那么CPU一样是读取F0000h但是会读取到DRAM内的数据。

==>
所以0E05Bh 是地址线的地址。
==>
另外BIOS一开始的地址是在FFFF_FFF0 不是在0E05Bh...
==> BIOS
的程序代码会去改变北桥设定,让在不同阶段的执行期间去存取到DRAM/ROM的数据,我们称为shadow....例如从F0000h ROM读数据,写到F0000h DRAM
==>
这边说的都是IA32,其它架构要看Spec 说明。

 

阅读(2067) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~