Per poter leggere o scrivere qualsiasi cosa su un disco occorre specificare una posizione sul disco stesso per esempio indicando il numero del settore o del blocco. Se il disco è SCSI il numero del settore viene passato al controller SCSI ed è capito dal disco. Se il disco è un IDE che utilizza la modalità LBA si ha la stessa cosa. Ma se il disco è obsoleto, RLL o MFM o IDE senza supporto LBA allora l'hardware del disco si aspetta una terna (cilindro,testina,settore) per individuare il punto desiderato sul disco.
La corrispondenza tra la numerazione lineare e la terna di tre cifre è di seguito mostrata.
Per un disco con C cilindri, H testine e S settori/traccia
la posizione indicata dalla notazione come terna o CHS (c,h,s) è la stessa di quella indicata dalla notazione lineare o LBA
c*
H*
S + h*
S + (s-1)
(la sottrazione di una unità è legata al fatto che nella notazione come terna i settori sono contati
a partire da 1 e non da 0).
Concludendo possiamo dire che per accedere ad un disco non SCSI obsoleto è necessario conoscerne la sua geometria ossia i valori C, H e S.
Al contrario di altri sistemi Linux non utilizza il BIOS.
Il BIOS, antecedente all'LBA,
fornisce le routine di I/O su disco attraverso l'INT13 che prevedono come ingresso la terna
(c,h,s) (più precisamente: AH
seleziona la funzione da utilizzare,
CH
contiene gli 8 bit bassi del numero dei cilindri,
CL
contiene nei bit 7-6 i due bit alti del numero dei cilindri
e nei bit 5-0 il numero del settore,
DH
contiene il numero delle testine
e DL
contiene il numero identificativo del drive (80h or
81h). Questo spiega una parte dello schema della tavola delle
partizioni).
Noi abbiamo la terna CHS codificata su tre byte in cui 10 bit sono per il numero dei cilindri, 8 per le testine e 6 per il numero dei settori (numerati da 1 a 63). Da ciò risulta come il numero dei cilindri possa variare da 0 a 1023 e come il BIOS non sia in grado di indirizzare più di 1024 cilindri.
I programmi per DOS e Windows non sono stati modificati quando sono stati introdotti i dischi IDE con il supporto LBA così sia il DOS che Windows continuano ad aver bisogno della geometria del disco solo per poter dialogare con il BIOS, pur non essendo necessaria per le operazioni di I/O. Questo significa che Linux ha bisogno di conoscere la geometria del disco in quei sistemi ove sia richiesto il dialogo tra BIOS e altri sistemi operativi presenti, anche con un disco attuale.
Questi problemi sono iniziati più o meno circa quattro anni fa, quando apparvero dischi che non potevano essere indirizzati dalle funzioni dell'INT13 (perché i 10+8+6=24 bits della terna (c,h,s) non possono indirizzare più di 8.5 GB) e fu quindi progettata una nuova interfaccia per il BIOS: la cosidetta INT13 Estesa dove DS:SI punta ad un Disk Address Packet di 16 byte che contiene un numero assoluto di inizio blocco di 8 byte.
Molto lentamente il mondo Microsoft sta traghettando verso l'utilizzo delle funzioni fornite dall'INT13 Esteso. Probabilmente fra pochi anni nessun sistema moderno equipaggiato con hardware moderno necessiterà più del concetto di "geometria del disco".
65536 cilindri (numerati da 0-65535), 16 testine (numerate da 0-15), 255 settori/traccia (numerati da 1-255), corrispondono a 267386880 settori (di 512 byte ciascuno) che equivalgono ad un massimo di 136902082560 byte (137 GB). Questo non è un problema attuale (1999) ma lo diverrà tra qualche anno.
1024 cilindri (numerati da 0-1023), 256 testine (numerate da 0-255), 63 settori/traccia (numerati da 1-63), corrispondono a 8455716864 byte (8.5 GB). Questo è un limite molto gravoso ai nostri giorni perché significa che il DOS non può utilizzare i dischi di grosse dimensioni attuali.
Se gli stessi valori c,h,s sono utilizzati dalla chiamata all'INT 13 del BIOS e dal controller I/O IDE entrambe le limitazioni si sovrappongono permettendo l'accesso al massimo a 1024 cilindri, 16 testine, 63 settori/traccia per una capacità totale di 528482304 byte (528MB), l'infame limite dei 504 MiB del DOS con i vecchi BIOS. Questo problema si è sentito a partire dal 1993 circa e gli utenti sono ricorsi ai più svariati trucchi sia hardware (LBA) sia firmware (traslazione del BIOS) sia software (gestori dei dischi). Il concetto di 'traslazione' è stato introdotto nel 1994: il BIOS può usare una geometria per dialogare con il disco e un'altra, contraffatta, per dialogare con il DOS ed effettuare la conversione tra le due.
Alcuni BIOS datati allocano solo 12 bit nella CMOS RAM per memorizzare il numero dei cilindri.
Come conseguenza il valore massimo rappresentabile è 4095. Da ciò deriva che sono indirizzabili
solamente 4095*
16*
63*
512=2113413120 byte.
Se si ha un disco più grande si avrà un blocco del sistema in fase di avvio.
Questo ha reso i dischi con la geometria 4092/16/63 abbastanza diffusi.
Ancor'oggi molti dischi di grandi dimensioni hanno un jumper per fornire la geometria
4092/16/63
Per ulteriori informazioni:
over2gb.htm.
Altri BIOS
non si bloccano ma rilevano un disco molto più piccolo, ad esempio 429 MB invece di 2.5 MB.
I BIOS Phoenix 4.03 e 4.04 avevano un baco che causava il blocco del sistema quando si impostavano nel setup della CMOS dischi con capacità superiori ai 3277 MB. Vedi: over3gb.htm.
La traslazione effettuata dal BIOS (ECHS= CHS Estesa, detta anche 'Supporto
ai dischi di grandi dimensioni' o semplicemente 'Large')
ricorsivamente raddoppia il numero delle testine e contemporaneamente dimezza
il numero dei cilindri passati al DOS finché il numero dei cilindri è al massimo 1024.
Il DOS e Windows95 non possono gestire 256 testine, e nel caso abbastanza comune
in cui il disco fornisce 16 testine ciò significa che questo meccanismo è utilizzabile
per gestire al massimo 8192*
16*
63*
512=4227858432 byte
(con una geometria contraffatta di 1024 cilindri, 128 testine e 63 settori/traccia).
È da osservare che ECHS non modifica il numero dei settori per traccia,
così se non sono 63 la capacità gestibile sarà ancora più bassa.
Vedi:
over4gb.htm.
Un po' furbescamente alcuni BIOS aggirano il problema precedente
fissando a 15 il numero di testine ('ECHS rivisto') in modo
da poter ottenere una geometria contraffatta con 240 testine.
Sono indirizzabili 1024*
240*
63*
512=7927234560 byte.
Se il BIOS è in grado di utilizzare 255 testine e 63 settori/traccia
('LBA assistita' o più semplicemente 'LBA')
può indirizzare 1024*
255*
63*
512=8422686720 byte,
un po' meno del limite precedente di 8.5 GB questo perché le geometrie con 256 testine
sono da evitarsi (la traslazione utilizza come numero di testine H il primo valore della sequenza
16, 32, 64, 128, 255 per il quale la capacità totale sia minore od eguale a
1024*
H*
63*
512, quindi calcola il numero dei cilindri C come la capacità totale diviso per
(H*
63*
512)).
Ci sono ulteriori difficoltà con dischi di dimensioni superiori ai 33.8 GB. Il problema sta nel fatto che i valori predefiniti di 16 testine e 63 settori/traccia corrispondoo ad un numero di cilindri maggiore di 65535, quantità che non è rappresentabile da una variabile di tipo short. Attualmente molti BIOS non sono in grado di gestire tali unità(vedi per esempio: Aggiornamenti Asus per trovare versioni aggiornate del BIOS che supportino tali unità). I kernel precedenti le versioni 2.2.14 / 2.3.21 devono essere aggiornati. Vedi Problemi dei controller IDE con dischi di dimensioni superiori ai 34 GB più sotto.
Per ulteriore materiale su questo argomento vedi: Breaking the Barriers ("Rompere le barriere"), e per ulteriori dettagli IDE Hard Drive Capacity Barriers ("Limiti della capacità degli HD IDE").
I dischi superiori agli 8.4 GB riportano la loro geometria come 16383/16/63. Ciò significa che la 'geometria' è obsoleta e che la capacità totale del disco non può più essere calcolata dalla geometria.