![]() |
ABSTRACT: BIOS Setup: settaggi avanzati per gli HD (block mode, PIO 3); protezione del MBR; ROM shadowing e non-cacheable blocks. Memory-mapped I/O.
Questa volta ci occuperemo dei settaggi che si riferiscono a cio' che e' comunemente indicato come "BIOS Advanced Setup": ROM shadowing, non-cacheable blocks, modalita' particolari di funzionamento degli HD (multi-block, PIO 3 e 4, ecc.) e altri settaggi. Ricordo che non tutti i programmi di Setup presentano le stesse opzioni: a parita' di marca di BIOS, ci possono essere differenze tra fabbricante e fabbricante, e da modello a modello di MB.
Cominciamo proprio dai settaggi avanzati disponibili per gli HD ATA (= AT-bus Attachment, spesso impropriamente indicati come IDE = Integrated Electronics Device, dispositivo con elettronica di controllo integrata), dato che per gli SCSI non vi sono, in genere, opzioni settabili nel BIOS Setup della MB, (tranne i casi di recenti MB che integrano un BIOS SCSI).
Un'opzione abbastanza diffusa sulle MB recenti e' il "Block Mode", o "Multi
Sector Mode".
Questo settaggio permette di attivare una particolare modalita' di trasferimento, disponibile sulla quasi
totalita' degli HD recenti, che consiste nello spostare, all'interno dello stesso ciclo di I/O,
piu' settori in sequenza,
permettendo,
in linea di massima, un Transfer Rate piu' alto.
A volte e' possibile anche indicare il numero di settori trasferiti in un colpo solo, tipicamente da 1 (no
block mode) a 16.
A prima vista, la scelta migliore sembrerebbe quella di impostare il valore massimo (o comunque di
attivare il block mode), ma non sempre e' cosi': dipende da diversi fattori .. anzitutto, non e' detto che l'HD
installato
sia in grado di supportare il block mode (se e' un HD abbastanza recente - 1993-> - tuttavia, e' assai
probabile che supporti tale modalita'; l'utilizzo di un programma diagnostico chiarira' il dubbio).
Poi, non e' detto che, con il block mode attivo, l'HD ottenga effettivamente prestazioni migliori (un
esempio tipico e' il Seagate ST3290A, che con il block mode attivato, e impostato su un valore maggiore
di 2
settori per interrupt, vede addirittura diminuire il proprio transfer rate); inoltre, e' possibile che l'eventuale
driver fornito con l'adapter o con l'HD (es: Rocket, VLIDE) gestisca in proprio l'attivazione del Block
Mode, e magari in modo piu' flessibile e adatto alle caratteristiche dell'HD utilizzato. Come ultima
considerazione
(peraltro abbastanza importante) va considerato che durante il trasferimento a blocco (sia esso a uno o
piu' settori) gli interrupt vengono disabilitati; questo puo' portare, ad esempio, a
problemi durante i trasferimenti via modem .
Un altro parametro da tenere in considerazione e' la presenza di una cache software per il disco (es.
SmartDrive, HyperDisk): in genere queste cache, in lettura, lavorano in
read-ahead ; per cui, sapendo quanti settori leggono "in anticipo", si puo' intervenire, ove possibile,
sui parametri di funzionamento del block mode, ovvero converra' impostare un numero di settori per
interrupt
pari a quelli acquisiti dalla cache durante il read-ahead.
Alcuni tra i Setup piu' recenti permettono anche la selezione del PIO Mode
per gli HD ATA. Anche qui, prima di modificare il valore di default e' bene conoscere le caratteristiche
del
proprio HD; i modelli piu' recenti, siano essi denominati Fast-ATA, ATA-2 o EIDE, supportano tutti il PIO
3,
qualcuno addirittura il PIO 4.
Mentre l'impostazione di un modo meno "tirato" rispetto al massimo supportato ha in genere come unica
conseguenza una perdita di prestazioni (Transfer Rate piu' basso), il viceversa puo' portare a problemi di
accesso a disco, bloccaggi del sistema, ecc.
Passiamo alle altre voci: una spesso presente e' la protezione dalla scrittura del Master Boot Record.
A volte, quest'opzione viene indicata come virus protection.
E' un'opzione presente per motivi di sicurezza: se il MBR viene alterato o cancellato, il disco diviene
inaccessibile dal Sistema Operativo (il DOS, ad esempio, segnala "Disco non di sistema" o "Impossibile
accedere all'unita' C", o "specificazione di unita' non valida" in caso di boot da dischetto); inoltre, la
protezione del MBR puo' costituire uno scudo contro i virus da Boot Sector, che cercano appunto di
installarsi nel MBR, attivandosi cosi' ad ogni boot del sistema operativo. Proteggere dalla scrittura il MBR,
pero', puo' avere controindicazioni: driver per la gestione del disco come EZ-Drive e Disk Manager (vedi
BETA 0295 "Uno sguardo al Setup -parte prima") devono necessariamente installarsi nel MBR per
funzionare; lo stesso dicasi dei loader dei sistemi operativi; e comunque, ogni volta che il partizionamento
del disco
viene modificato e' necessario l'aggiornamento della Tavola delle Partizioni, che risiede nel MBR.
Dunque, se si
decide di attivare la protezione dalla scrittura del MBR e' bene tener presente che potrebbe essere
necessario
disattivarla momentaneamente per poter eseguire determinate operazioni.
Proseguendo, in quasi tutti i Setup troviamo la sezione riservata al ROM
shadowing.
Copiare in RAM le routine contenute delle ROM del PC puo' portare a prestazioni migliori; tuttavia, cio' e'
vero specialmente per il DOS; i sistemi operativi moderni, infatti, sostituiscono quasi sempre le routine
contenute nei ROM BIOS con codice proprio, per trarre il massimo vantaggio dal funzionamento in modo
protetto 32 bit (mentre il codice contenuto nelle ROM e' in genere a 16 bit real mode). Ci sono tuttavia
casi in cui, per particolari motivi di incompatibilita' o per l'assenza di driver specifici, si deve ricorrere
nuovamente ai servizi dei BIOS; in tal caso, puo' essere vantaggioso abilitare lo shadowing anche su
sistemi
operativi "avanzati".
Le routine che tipicamente vengono sottoposte a shadowing sono quelle contenute nella System BIOS
ROM e nella Video BIOS ROM. La prima ROM e' quella integrata nella mother board; in genere la sua
capacita' e' di 64KB. La seconda e' invece integrata sulla scheda video; in genere e' da 32KB, e
l'indirizzo di partenza e' C0000 (si estende quindi da C0000 a C7FFF; vedi nel seguito): abilitando lo
shadowing di
queste due ROM, gli accessi al loro contenuto diverranno dunque accessi a RAM, piu' veloci; il tutto ha
un prezzo:
la perdita di 96KB di RAM indirizzabile.
Le ROM del Main BIOS e del Video BIOS possono non essere le uniche presenti su un PC: ad esempio,
una scheda di rete o un adapter evoluto possono integrare una ROM per le proprie routine; puo' essere
allora utile (nel caso il sistema operativo o i driver forniti non siano in grado di sfruttare tutte le
funzionalita' del dispositivo) abilitare lo shadowing anche per queste altre ROM. Il BIOS Setup in genere
prevede
questa possibilita', purche' si conoscano dimensione ed indirizzo di base della ROM in questione.
Facciamo un esempio: si e' installato un adapter EIDE dotato di un proprio BIOS su ROM (utile, ad
esempio, per gestire i dischi in LBA se il Main System BIOS non ha quest'opzione; v. BETA 0295).
Supponiamo
che tale BIOS si estenda per 16KB a partire dall'indirizzo C8000; se vogliamo velocizzarne l'accesso
(sotto DOS)
possiamo abilitare lo shadowing della fascia di indirizzi che va da C8000 a CBFFF. Una schermata del
Setup
riportante le opzioni della Shadow Memory puo' essere:
Shadow RAM Read Enable: enabled
Questa opzione abilita, in generale, lo shadowing.
Shadow RAM Write Protection Enable: enabled
La ROM e' a sola lettura, ma la RAM in cui viene copiata grazie allo shadowing non lo e': questa voce ci
permette di disabilitare la scrittura nelle aree della RAM usate per lo shadowing.
In generale e' bene abilitarla; tuttavia, poter modificare il contenuto della ROM senza toccare la ROM
stessa puo', in certi casi, far comodo: ad esempio, per riprogrammare la tabella dei simboli di una scheda
video e'
possibile caricare una nuova tabella all'indirizzo RAM corrispondente all'originaria posizione della tabella
in ROM;
potremmo cosi', magari, cambiare i font video della scheda. Si tratta comunque di casi particolari: in
generale e'
opportuno abilitare la protezione in scrittura.
E8000h-EFFFFh Shadow RAM Enable: disabled
Questa e' una delle voci che permettono l'abilitazione o meno dello shadowing per una certa fascia di
indirizzi ROM. Nel caso specifico, abilitando quest'opzione la zona di ROM compresa tra l'indirizzo
esadecimale
E8000 e l'EFFFF (si tratta di una porzione di memoria pari a 32KB) verra' copiata in RAM.
E0000h-E7FFFh Shadow RAM Enable: disabled
D8000h-DFFFFh Shadow RAM Enable: disabled
D0000h-D7FFFh Shadow RAM Enable: disabled
C8000h-CFFFFh Shadow RAM Enable: disabled
C0000h-C7FFFh Shadow RAM Enable: enabled
Quest'ultima voce e' particolarmente interessante: riguarda infatti una fascia di indirizzi nella quale in
genere, come abbiamo detto, si trova il Video BIOS. Attivando lo shadowing per questa porzione di
memoria,
avremo generalmente un output video in modo testo (scrolling, ecc.) nettamente piu' veloce sotto DOS;
per altri
sistemi operativi spesso non si notano differenze, in quanto le routine del Video BIOS vengono sotituite
da
funzioni interne del sistema operativo.
Se ci si limita ad attivare lo shadowing per Main BIOS e Video BIOS, tutta la parte di RAM (generalmente 256KB) predisposta allo shadowing delle "adaptor ROM" (SCSI adapters, schede di rete, ecc.) puo' essere liberata e restituita al sistema operativo; abiliteremo allora la voce:
Relocate Enable: enabled
restituendo al sistema 256KB di RAM (che verranno rimappati alla fine dello spazio fisico indirizzato).
Un'altra opzione quasi sempre presente nei BIOS Setup recenti e' quella relativa ai
non-cacheable blocks.
Come e' noto, normalmente l'intera memoria installata sulla MB e' sottoposta a caching da parte delle
cache memory di primo e secondo livello, allo scopo di migliorare le prestazioni del sistema (la memoria
cache
e le relative opzioni saranno oggetto di un prossimo articolo); tuttavia, in certi casi puo' essere opportuno
escludere dal caching determinati blocchi di memoria; vediamo perche'.
Generalmente, la CPU dialoga con i dispositivi periferici attraverso le porte di I/O, che
sono opportuni indirizzi nello spazio di indirizzamento della CPU dedicato all'I/O (tale spazio e' di 64K
nelle
CPU Intel): leggendo e scrivendo in queste porte, la CPU puo' controllare le varie periferiche.
Purtroppo, questo tipo di comunicazione soffre di due limitazioni: la prima e' la relativa esiguita' dello
spazio di indirizzamento di I/O (sono disponibili solo 64KB, contro un massimo di 4GB per lo spazio di
indirizzamento della RAM); la seconda e' la velocita': le istruzioni per accedere alle porte di I/O sono piu'
lente delle corrispondenti istruzioni per accedere alla RAM. Facciamo un esempio con un processore
486.
Per leggere una word (16 bit) dalla memoria, immagazzinando l'informazione in un registro, abbiamo a
disposizione una delle varianti dell'istruzione MOV; essa, supponendo che il dato non sia presente nella
cache integrata, richiede 3 cicli di clock (mi riferisco al clock interno della CPU), piu' l'ovvio overhead dovuto all'implementazione del ciclo.
Per leggere una word da una porta di I/O, invece, abbiamo l'istruzione IN; essa richiede, nel caso migliore
(nessun cambio di ring), mediamente 8 cicli di clock (ma anche qui bisognera' implementare un ciclo).
Nella realta', occorre tenere presente moltre altre variabili (gli stati di attesa per la RAM, i recovery time
per le porte di I/O, l'utilizzo del ciclo implicito REP INS come ottimizzazione, ecc.), ma
qualitativamente la situazione non cambia: gli accessi alle porte di I/O sono generalmente alquanto piu'
lenti degli accessi a memoria.
Per superare questi due ostacoli, si ricorre, a volte, ad una tecnica denominata memory-mapped
I/O(MMIO): anziche' comunicare attraverso una porta di I/O, la CPU comunica con la periferica
attraverso una certa locazione di memoria. Sottoporre a caching questa locazione potrebbe portare ad un
problema: supponiamo infatti che la CPU stia lavorando in PIO mode
su una
periferica funzionante in MMIO: poiche' una o piu' locazioni di memoria (Status, Ready, ecc.) dovranno
essere lette
ciclicamente aspettando un cambiamento nel loro contenuto, se fossero sottoposte a caching il ciclo non
terminerebbe mai: il valore letto dalla CPU, ormai contenuto nella cache e quindi sempre uguale, non
rifletterebbe piu' lo stato della periferica, e la CPU aspetterebbe in eterno (o, piu' probabilmente,
fino al
prefissato timeout): definendo come non-cacheable il blocco di memoria cui appartiene quella locazione,
il
problema e' risolto.
Naturalmente, difficilmente sara' possibile escludere dal caching solo le locazioni interessate al MMIO: in
genere, un certo spazio RAM attorno ad esse sara' inutilmente privato dei benefici del caching. E'
possibile
evitare cio' implementando tecniche di sorveglianza degli accessi a memoria (snooping
cache), ma non sempre cio' e' economicamente giustificabile.
Un altro motivo per cui potrebbe essere utile escludere dal caching un blocco di memoria e' l'utilizzo di
dispositivi di I/O con BIOS ROM sottoposta a shadowing, quando le routine in essa contenute hanno
particolari
problemi di timing se eseguite velocemente (come avviene nel caso siano sottoposte a caching); ad ogni
modo,
come regola generale e' opportuno non definire alcun non-cacheable block, a meno che il manuale di un
particolare dispositivo non lo consigli.
Allocation of Non-cacheable Area #1: 0C0000
Size of Non-cacheable Area #1 (within 16 MB): 0KB (disabled)
Allocation of Non-Cacheable Area #2: 0F0000
Size of Non-Cacheable Area #2 (within 64 MB): 0KB (disabled)
Queste voci ci permettono appunto di definire due blocchi non-cacheable: possiamo specificarne
l'indirizzo di
partenza e la dimensione.
Direttamente correlate alle suddette opzioni, ve se sono altre due, presenti in quasi tutti i Setup:
Main System BIOS Shadow RAM cacheable: enabled
Video BIOS Shadow RAM cacheable: enabled
A volte, l'indicazione puo' non essere cosi' chiara. Ad esempio:
C0000h-C7FFFh Shadow RAM Cacheable: enabled
Questa voce equivale alla "Video BIOS Shadow RAM cacheable: enabled", in quando la fascia di indirizzi
specificata corrisponde, come gia' detto, proprio alla parte di ROM che contiene il Video BIOS.
Abilitando queste voci, la cache (sia integrata che esterna) coprira' anche gli accessi alle routine del
BIOS principale e del BIOS della scheda video, il che puo' portare ad aumenti delle prestazioni del
sistema
(generalmente, il miglioramento e' avvertibile solo sotto DOS, per i motivi anzidetti); puo' pero' succedere
che determinati accessi hardware avvengano troppo velocemente quando le routine del BIOS sono
sottoposte a caching; se il PC manifesta strani comportamenti (specie durante l'installazione di nuovi
sistemi
operativi), una delle prove che e' saggio fare consiste nel disabilitare queste opzioni (e preferibilmente
anche lo
shadowing).
Finisce qui la seconda tappa di questa panoramica sul Setup; il prossimo articolo si occupera' dei settaggi riguardanti la memoria (DRAM e cache), quindi stati di attesa, interleaving, cicli burst, dirty tag e altre cose ancora.