# Logical block addressing

Il Logical block addressing, abbreviato LBA, è un sistema di accesso ai dati usato nei dischi fissi, introdotto per superare il limite dei 504 MiB (528 MB) del precedente sistema CHS (cylinder-head-sector).
Un disco rigido è costituito da piatti paralleli scritti su ambedue le superfici: ad ogni superficie corrisponde una testina. Ogni piatto è inoltre suddiviso in tracce concentriche, raggruppate per distanza dall'asse in cilindri, e divise in settori circolari. È chiaro quindi che per identificare un settore, l'unità fisica di memorizzazione sul disco, sono necessarie le tre coordinate cilindro, testina e settore.
Il metodo LBA, introdotto con lo standard ATA-2, esegue la numerazione dei settori partendo da 0 fino ad un massimo di $2^{28}-1$, assegnando il valore 0 al primo settore della prima traccia del primo cilindro, procedendo poi lungo tutti i settori della stessa traccia, poi lungo tutte le tracce (corrispondenti a tutte le superfici) dello stesso cilindro per poi spostarsi al cilindro adiacente, continuando così fino all'ultimo settore dell'ultima traccia dell'ultimo cilindro. La conversione da indirizzo logico a indirizzo fisico, ovvero quello definito dalle tre coordinate, viene eseguita dal controller.

## Storia

Il primo PC XT IBM montava un disco Seagate da 10 MiB con un controller Xebec (inizialmente i controller erano installati su una scheda a parte). Il disco aveva 4 testine, 360 cilindri e 17 settori per traccia. Per scrivere e leggere sul disco il sistema operativo chiamava il BIOS, il quale si occupava a sua volta di scrivere sui registri del controllore per avviare i trasferimenti.
Col tempo la tecnologia è migliorata, passando alle unità IDE, ma le procedure di chiamate al BIOS non vennero modificate per mantenere una compatibilità con i dispositivi precedenti (questa è una scelta molto frequente nell'informatica, si pensi alla retrocompatibilità dei processori Intel con tutti i modelli della famiglia 80x86). Tale metodo però era intrinsecamente limitato dato che prevedeva l'uso di 4 bit per specificare la testina, 6 per il settore e 10 per il cilindro. Con queste specifiche si potevano indirizzare massimo 16 testine, 63 settori e 1024 cilindri: da notare che i settori non erano $2^{6}=64$ perché, probabilmente per un errore del programmatore, mentre la numerazione delle testine e dei cilindri cominciava da 0, quella dei settori partiva da 1, riducendone di fatto la rappresentazione di un'unità.
Con tale specifica, mantenuta fino allo standard ATA, si potevano indicizzare massimo 1.032.192 settori che, per una dimensione tipica di 512 byte ciascuno, portavano a massimo 504 Mib. In seguito furono introdotte realizzazioni più avanzate di BIOS (note a volte come Enhanced BIOS) che virtualizzavano la mappatura CHS, spesso generando più testine "virtuali" di quante ne possedesse realmente il disco, e che espandevano questo limite a 255 testine. Questo significava che un volume MS-DOS poteva arrivare a 7,97 GiB.
Con l'introduzione del secondo standard ATA fu introdotto, tra le altre innovazioni, lo schema LBA che di fatto ha aumentato di gran lunga la capacità di indirizzamento dei settori sui dischi rigidi a 128 GiB, poi salito a 128 Pib con l'aumento a 48 bit per gli indirizzi nella standard ATA-6.
Lo schema LBA è utilizzato anche dall'interfaccia Serial ATA, infatti nella documentazione o nelle caratteristiche tecniche di molti adattatori SATA su interfaccia PCI si fa riferimento alla compatibilità del controller con i dischi di capacità superiore a 137 gigabyte (equivalenti a 128 GiB), grazie ad un LBA a 48 bit anziché a 24. Invece, alcuni dei primi adattatori SATA avevano un LBA a 24 bit, quindi non accettavano hard disk di capacità maggiore di 137 gigabyte.
Lo schema LBA a 48 bit pur essendo standard da molti sistemi a 32 bit (come ad esempio Windows XP) non veniva utilizzato ma veniva usato uno schema ridotto a 32 bit dando problemi a dischi superiori a 2,2 terabyte (equivalenti a 2 TiB).