Questo è un altro caso in cui la saggezza popolare ricevuta sull'argomento, come purtroppo esemplificata dalla psusi
risposta e in effetti parte della domanda, è bloccata nel mondo com'era intorno al 1991, nonostante la ricchezza di riferimenti tecnici disponibili che spiegano come è ora altrimenti.
Nel mondo della fine degli anni '80, il firmware della macchina - una delle due cose chiamate "BIOS" nel mondo compatibile con PC IBM - si trovava effettivamente in un chip ROM sul bus ISA; e le CPU hanno effettivamente iniziato a eseguire il codice all'indirizzo fisico 000FFFF0
, una posizione nella "memoria convenzionale" a cui si accede tramite il puntatore della modalità reale F000:FFF0
Questo mondo è scomparso da tempo.
(Il mondo in cui l'autore della pagina WWW che hai indicato, S. Ebrahim Shubbar, vive erroneamente, nonostante abbia scritto nel 2002, è ancora più vecchio. Le CPU non hanno iniziato con la CS:IP
combinazione FFFF:0000
dall'8086. L'80286 ha cambiato questo F000:FFF0
Ma il mondo 80286 stesso è il mondo molto obsoleto della fine degli anni '80 che la saggezza popolare circola ancora.)
Il tuo "chip BIOS" è RAM; e la tua CPU non è a 16 bit.
Nei PC moderni, il firmware della macchina è conservato nella RAM non volatile . Il chip NVRAM è collegato al bus LPC (o all'interfaccia "hub firmware" dedicata) e il bridge LPC / FWH nel "chipset" normalmente disabilita i cicli di scrittura su di esso. Il "flashing" del firmware comporta l'impostazione di registri del chipset che abilitano le scritture sulla NVRAM e quindi la scrittura sulla NVRAM. (Nell'Intel ICH10, ad esempio, il bit di registrazione del chipset che consente i cicli di scrittura è denominato BIOSWE
"Abilitazione scrittura BIOS". Ci sono alcuni dettagli aggiuntivi che salterò qui, ma questo è l'essenza.)
I processori x86 non hanno iniziato l'esecuzione sul posto 000FFFF0
dai tempi dell'80286. Le CPU a 32 bit si avviano in quella che è colloquialmente nota come modalità irreale . Anche se il valore iniziale del CS
registro dopo il ripristino è F000
, il descrittore di segmento associato a quel registro inizialmente ha FFFF0000
come indirizzo base. Così l'indirizzo fisico che corrisponde inizialmente al CS l'16:16: L'indirizzo IP F000:FFF0
è infatti, ed è stato sin dai tempi di 80386, FFFFFFF0
.
Ed è qui che il firmware della macchina è principalmente mappato nello spazio di indirizzi fisico su macchine x86 a 32 e 64 bit. C'è una finestra di 128 KiB sul firmware in basso nell'area "memoria convenzionale", ma la NVRAM che tiene il firmware della macchina può arrivare a 16 MiB (anche se questo varia in base al chipset) sui PC moderni ed è principalmente mappata nel 16 MiB di spazio di indirizzi fisici immediatamente sotto la linea 4GiB - ovvero gli indirizzi fisici FF000000
a FFFFFFFF
. (Per utilizzare di nuovo ICH10 come esempio: quanto di questo spazio di indirizzi è mappato sulla NVRAM è controllato da un registro del chipset noto come FWH_DEC_EN
"Firmware Hub Decode Enable", il registro. Il firmware è codificato per riprogrammare ilFWH_DEC_EN
registrarsi in base alle dimensioni del chip NVRAM effettivo installato sulla scheda madre. Ma la parte superiore 512KiB della NVRAM è sempre mappato, ad indirizzi fisici FFF80000
a FFFFFFF
, e non può essere disabilitata.) Il codice inizialmente eseguito dal processore subito dopo la vita di reset nella parte superiore 64KiB di questo intervallo di indirizzi 16MiB.
Per quanto riguarda l'ombreggiamento della ROM del BIOS (che è ciò che viene chiamato - abbastanza perché barlop
pensa che la CPU venga oscurata è un mistero): Sì, l'accesso alla NVRAM sul bus LPC o all'hub del firmware non è ancora veloce come l'accesso al sistema principale (volatile) RAM. Ma i motivi per cui l'ombreggiatura è importante sono notevolmente diminuiti con l'avvento di sistemi operativi come OS / 2 e Windows NT, sempre alla fine degli anni '80 e all'inizio degli anni '90. I sistemi operativi in modalità reale come MS-DOS, PC-DOS, DR-DOS e così via erano sovrapposti alla funzionalità I / O fornita dal firmware della macchina. Quindi il codice del firmware e i dati di sola lettura sono stati raggiunti molto durante l'esecuzione. I sistemi operativi in modalità protetta come OS / 2 e Windows NT fanno molto meno affidamentosui servizi forniti dal firmware in fase di esecuzione. Quindi, il fatto che il codice in esecuzione dalla NVRAM e i dati di sola lettura nello stesso, arrivino al processore più lentamente rispetto a quando sono ombreggiati nella RAM di sistema è meno un problema di prima.
Inoltre, il codice firmware e i dati su cui si basano non risiedono necessariamente nella parte di NVRAM mappata alla porzione di spazio di indirizzi fisici, la finestra di "memoria convenzionale" da 128 KiB, che è necessariamente anche in primo luogo ombrebile. Non tutti i servizi firmware in modalità protetta devono vivere al di sotto della linea 1MiB nello spazio degli indirizzi fisici, come fanno i servizi firmware in modalità reale, e alcuni no. (E, naturalmente, sarebbe solo possibile fare lo stesso trucco con l'area di spazio di indirizzamento fisico che fanno vivere in se c'è almeno 4GiB di RAM di sistema.)
Ironia della sorte, una fonte più accurato per informazioni su questo di S. Ebrahim Shubbar scrivendo nel 2002 è il libro di Phil Croucher Il BIOS compagno da un anno prima nel 2001. M. Croucher osserva che Unix, Linux, Windows NT, e "presumibilmente (95 / 98) "" non traggono alcun beneficio dall'ombra ". Non è necessariamente un vantaggio, ma è relativamente poco rispetto al mondo delle persone che eseguono MS-DOS, PC-DOS e DR-DOS in modalità reale su macchine 80286 a 16 bit nel 1989.