- 論壇徽章:
- 0
|
下面再摘錄一點(diǎn)東西。出處:http://www.programmer-club.com/p ... ssembly&id=6277
[Why shadow BIOS ?]
在此之前所提的BIOS tasks,都是循著 CPU->NB->SB->SIO->ROM的路徑來達(dá)成的;意即: CPU是去BIOS ROM里面抓code來執(zhí)行 ! 明顯的一件事是: ROM access time > DRAM access time ! 且RAM access width is 32bits,而 ROM access width 通常為 16 bits. 因此,便有了所謂" BIOS Shadowing"的觀念產(chǎn)生 ! <- "performance consideration" !!!
[What is shadowing]
意即: 將部分BIOS CODE(in ROM)拷貝至DRAM中 ! (此后, CPU將從DRAM中抓code來執(zhí)行...)這樣的動(dòng)作便稱做 "Shadowing" ! 而該處的DRAM即稱為 shadow memory.
Shadowing 在BIOS 中是極為復(fù)雜的 kernel code part ! 想深入了解的人最好有 source code可 trace.
[When to shadow BIOS]
=> 當(dāng)然是等內(nèi)存穩(wěn)定了,可以使用后,才做 ^_^
*因此,假如 DRAM sizing 有問題, BIOS shadowing必定有問題 !!!
以下是之前在其他文章中發(fā)表關(guān)于 shadow 的文章,再次節(jié)錄以供參考 !
[System Behavior before & after shadow]
說 的更白話一點(diǎn)就是 : 當(dāng) Power On后, 跑完 system power-on sequence后, CPU會(huì)被 reset ( reset 指的是 CPU 的 內(nèi)容會(huì)回到 "初始值" ); 而 CPU內(nèi)部的 EIP (32-bit )的初值是 FFFFFFF0h, 所以, CPU的 第一個(gè) code read 就是到 FFFFFFF0h fetch code...
這個(gè) memory cycle 從 CPU發(fā)出, 先會(huì)經(jīng)過 North bridge ; 此時(shí), north bridge會(huì)說 "這不是我的"...然后,往 south bridge 丟 ; south bridge 會(huì)說, "這是我的",收下后丟給 ROM ! 所以, FFFFFFF0h 會(huì)被 ROM 接走 !!! ( 所以 前人才說 "硬件初始值要把0xFFFFFFF0 和 0x000FFFF0 要mapping到同一個(gè)地方", 這個(gè)地方就是.....ROM !!! )
之后, CPU所發(fā)的 cycle 都會(huì)照上述的方式一路抵達(dá) ROM...由 CPU循著 fetch, decode, execute, store的順序作事情...
但 到某一個(gè)階段前, BIOS的 code 會(huì)指示 " 要將 BIOS data 從 ROM 搬到 DRAM" ! 而在此階段之后, BIOS會(huì)設(shè)定 north bridge 緩存器, 告訴 north bridge "之后 CPU所發(fā)的 cycle 不可以不收而傳到 south bridge"....
自此之后, CPU 所發(fā)的 cycle 全部轉(zhuǎn)到 DRAM 中,由 CPU循著 fetch, decode, execute, store的順序作事情...
<Summary> 總而言之, BIOS 一開始是CPU讀取 ROM content來執(zhí)行,之后是CPU 讀取 DRAM content 執(zhí)行 ^_^
-------------------------------------------------------------------------------------------------------------------------------------------------
[補(bǔ)充][以提問的方式^_^]
[Q]: shadow memory到底是那一塊 ?
[A]: 以現(xiàn)在的計(jì)算機(jī)系統(tǒng)而言, shadow memory 是在UMA(upper memory area;傳統(tǒng)內(nèi)存 640K以上至1M之間) "里面"(part of it) ;在此UMA內(nèi)可以分為 6 segments(64kB/each), total 384KB.
其中 C0000h~DFFFFh: for VGA BIOS and other devices' Option ROMs
E0000h~FFFFFh: BIOS ROM code
這兩個(gè) blocks 本質(zhì)是 memory;之后會(huì)被載以ROM content;因此,便稱為 shadow memory(好像: ROM在上面, memory在下面,是ROM的 "shadow"...)
[Q]: shadow memory 的內(nèi)容 完全 "=" ROM content ?
[A]: of course NOT ! 除了 UMA不大以外,BIOS ROM因?yàn)楸仨歴upport more and more functions/features,size已經(jīng)越長(zhǎng)越大;除此之外,BIOS ROM中也有部分module是經(jīng)過壓縮的.(UMA不夠放...)
當(dāng)BIOS shadow時(shí),只會(huì) copy necessary code(Ex. run-time要用的...etc)至 shadow memory ! 另外,已經(jīng)執(zhí)行過后的code也不會(huì)被加載. 因此,不是 1-1的copy...
[Q]: what Shadow enabled/disable mean in chipset ?
[A]: 前面提過, CPU要 fetch的code由 shadow memory 提供 or ROM提供,其根本關(guān)鍵在于 chipset's behavior ! 意即,NB必須做此決定 ! 所以,這機(jī)制一般是由NB來實(shí)現(xiàn)的.
NB內(nèi)有所謂的 shadow registers. 當(dāng) shadow register enable時(shí), memory cycle由 shadow memory 來回應(yīng);若 shadow disable,則由ROM回應(yīng).
意即:
000E0000h~000FFFFFh由 shadow memory replies if (shadow enabled)
000E0000h~000FFFFFh由 ROM chip replies if (shadow disabled)
若FFFE000h~FFFFFFFFh呢 ? 必定由ROM chip來回應(yīng)(不然一開機(jī)怎么辦?). 與 shadow disable/enable無關(guān) !!!
*若使用 ru.exe 并檢視 memory space,可發(fā)現(xiàn)上述的情況.
[Q]: shadow有何好處 ?
[A]: 因?yàn)?slower ROM v.s faster RAM,所以放在RAM可以增加 system performance.
*各位可以發(fā)現(xiàn),同樣的code放在 rom & dram中執(zhí)行速度將大不相同 !
[Q]: shadow memory的 issue ?
[A]: 被 shadowed 的 memory area都會(huì)被設(shè)成 write-protected ! 因此,這塊area是不能 write 的.所以,若有程序會(huì) "write"這塊,則會(huì)有問題 !!!
其實(shí), BIOS shadow這段code大家不太會(huì)碰觸到...了解基本information即可.
有錯(cuò)誤請(qǐng)指正 !!! |
|