[ Pagina Principale || Redazione || Informazioni || Vai a... ]

Uno sguardo al Setup (seconda parte)

di Fernando Carello

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.


Siamo alla seconda tappa del nostro viaggio nel Setup.

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.


[ Pagina Principale || Redazione || Informazioni || Vai a... ]
BETA - la rivista ipertestuale tecnica, copyright © 1994-95 Luciano Giustini e Fernando Carello. Tutti i diritti riservati.
Numero di accessi a questa pagina dal 29/08/95: (installazione in rete)