Shadowing
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必定有问题 !!!
附加信息:
1.当 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 执行 ^_^
2.[补充][以提问的方式^_^]
[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即可.
阅读全文类别:我所知道的bios系列整理(转载小华的部落格) 查看评论