stdlf
分类:
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-1的copy...
[Q]: what Shadow enabled/disable mean in chipset ?
[A]: 前面提过, CPU要 fetch的code由 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 COPY至DRAM之后CPU才有办法去执行"
Ans : 讲简单一点就是对CPU来说,他只负责提取指令,译码指令,执行指令。至于是读取到哪边的指令他就不管了(IA32 架构)。例如CPU要读取F0000h的指令来执行,那F0000h有可能是ROM也有能是DRAM。
[Q2] "那BIOS一开始的0E05BH是ROM的位置?还是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 说明。