Prima dell'introduzione dell'LBA, perché inizia CHS 0,0,1
e no 0,0,0
?
Prima dell'introduzione dell'LBA, perché inizia CHS 0,0,1
e no 0,0,0
?
Risposte:
Sfortunatamente, è così che lo schema di indirizzamento CHS, molto popolare all'epoca, è stato implementato e adottato. Questo è stato adottato come convenzione ufficiale per i computer compatibili con IBM negli interrupt BIOS utilizzati per l'accesso al disco, spiegando perché questa convenzione è utilizzata fino ad oggi. Dallo standard ECMA-107 , volume e struttura dei file delle cartucce disco per lo scambio di informazioni (questo è anche menzionato nella specifica ATA-1 originale ):
6.1.3 Numero del settore logico
Ciascun settore di un volume deve essere identificato da un numero di settore logico. [...] I numeri del settore logico devono essere assegnati in una sequenza crescente, a partire da 0, a partire dal settore 1, traccia 00, lato 0 , proseguendo sulla traccia 00, lato 1 (se FDC è registrabile su entrambi i lati) e quindi per tracciare 01, lato 0, ecc.
Questo problema viene risolto nelle specifiche di alcuni dischi rigidi , dove si nota che un determinato indirizzo CHS logico differisce dalla posizione dell'indirizzo CHS fisico . Questo è ulteriormente discusso nel Manuale di riferimento dell'interfaccia ATA di Seagate , che contiene questa interessante narrativa:
5.1 Indirizzamento del blocco logico
[...] si presume che i settori sull'azionamento siano mappati linearmente, con un LBA 0 del cilindro 0 / testa 0 / settore 1.
[...] Per tutte le modalità di traduzione, C = 0, H = 0, S = 1 è equivalente a LBA = 0. Non è possibile calcolare un CHS equivalente per tutti gli indirizzi di blocco logici in tutte le modalità di traduzione perché questa formula funziona solo in una direzione. Questo perché l'indirizzamento CHS non può accedere a 1/ 256 di tutti i settori possibili a cui può accedere l'indirizzamento a blocchi logici, poiché in CHS non è presente il settore 0.
Pertanto, per l'indirizzamento CHS logico, sebbene i primi indici cilindro / testa inizino da un offset basato su 0, e il primo indice di settore inizi da 1 (ad es. L'indirizzo CHS minimo possibile è 0/0/1), ciò non cambia nulla di la posizione fisica di questo settore. Pensalo come il primo settore fisico sul disco chiamato "settore 1", che occupa CHS 0/0/1. In effetti, il "primo" elemento nella maggior parte dei linguaggi di programmazione è basato su 0, quindi l' indirizzo logico del settore all'indirizzo CHS 0/0/1 è zero ( 0x00
).
Ciò ha molto più senso logicamente (vale a dire, l' indirizzo logico "zeroth" è il primo settore fisico ), in quanto possiamo indirizzare il dispositivo disco come qualsiasi altro dispositivo di memoria (poiché ogni settore ha un indirizzo lineare univoco per mapparlo a un fisico settore), quindi perché ha senso che la LBA inizi da zero. In effetti, se traduciamo l'indirizzo CHS 0/0/1 in un LBA , l'LBA risultante sarà 0x00000000
(questo è il motivo per cui 1 viene sottratto dall'indice di settore nella maggior parte dei calcoli CHS in LBA e perché 1 viene aggiunto all'indice per LBA ai calcoli CHS).
zero sector
codici di errore e blocchi errati, ecc .... passaggio a CHS e "architettura a blocchi fissi" la transizione dell'aggiunta di un controller (firmware) all'unità e l'avvio di associazioni del disco "logiche" ... il controller ora è invisibile ma si può presumere che lo usi allo stesso modo ... il termine ora è chiamato "Host Protected Area " en.wikipedia.org/wiki/Fixed-block_architecture e en.wikipedia.org/wiki/Host_protected_area
1
, non ho ancora trovato alcuna informazione sul perché (anche se sospetto che possa avere qualcosa a che fare con il settore 0
riservato come flag di errore). Sarò sicuro di aggiornarti se mi imbatto in qualcosa.
Ho cercato di tracciare la storia di CHS e il fiasco di numerazione settoriale "a partire da 1", che ha causato molte complicazioni agli scrittori di driver di dischi e ha dato rapidamente vita a LBA .
CHS risale ai giorni in cui i personal computer funzionavano su dischetti e quando fu inventato il BIOS. Questo è ciò che dice Wikipedia :
Il termine BIOS (Basic Input / Output System) è stato inventato da Gary Kildall e apparve per la prima volta nel sistema operativo CP / M nel 1975, descrivendo la parte specifica della macchina di CP / M caricata durante l'avvio che si interfacciava direttamente con l'hardware.
Una ricerca nel BIOS CP / M ha trovato il documento Archivio informazioni CP / M: chiamate di sistema BDOS , in cui i numeri di settore iniziano con zero. La conclusione è che: il primo schema CHS effettivamente utilizzava indirizzi settoriali a base zero .
Gli indirizzi settoriali a base singola sono stati inizialmente introdotti con il primo IBP / PC. Il documento INT 13 - Diskette BIOS Services afferma specificamente:
Most disk BIOS calls use the following parameter scheme:
AH = function request number
AL = number of sectors (1-128 dec.)
CH = cylinder number (0-1023 dec.)
CL = sector number (1-17 dec.) <--------!!!
DH = head number (0-15 dec.)
DL = drive number (0=A:, 1=2nd floppy, 80h=drive 0, 81h=drive 1)
DL = drive number (0=A:, 1=2nd floppy, 80h=C:, 81h=D:)
Note that some programming references use (0-3) as the
drive number which represents diskettes only.
ES:BX = address of user buffer
Quindi è stato l'IBM / PC che con un'implementazione di fatto del BIOS ha convertito la numerazione dei settori da zero a uno.
Dei dodici ingegneri IBM incaricati di creare l'IBM Personal Computer (modello 5150), David J. Bradley ha sviluppato il codice per il suo BIOS. Quindi è lui che, tra tutti i suoi altri dettagli, ha deciso i parametri per gli interrupt del disco. Dobbiamo anche a questo ragazzo insieme a Mel Hallerman il famoso CTRL+ ALT+ DEL.
Quindi la risposta alla domanda
Perché il conteggio dei settori inizia da 1 e non da 0 in CHS è:
Perché David J. Bradley ha programmato il BIOS in quel modo .
Quanto al perché lo abbia fatto in questo modo, è meglio rispondere da solo. Se dovessi indovinare, direi che ha lasciato il settore zero come settore di indirizzamento in base al quale l'autista poteva verificare che la testa fosse sulla buona strada.
Dato che i dischi sono stati effettivamente progettati per non richiedere un tale meccanismo e gli ingegneri non erano pronti a sprecare un settore a causa del BIOS, il settore zero non è mai stato creato. Successivamente, i driver-writer sono stati lasciati con la necessità di sottrarre uno e aggiungere uno agli indirizzi di settore per tutte le chiamate del disco BIOS.
La prima specifica sui floppy disk è stata fatta da IBM con l'aspetto di IBM 3740 e non menziona che ci sono settori riservati per il sistema. L'unica riserva per il sistema è la traccia 00, che memorizza solo le "etichette dei set di dati" che identificano il tipo di informazioni memorizzate nelle tracce da 01 a 76. Definisce chiaramente che il primo settore è SETTORE 1. Questa non è una coincidenza ma un questione di numerazione naturale rispetto alla numerazione del computer.
Possiamo osservare che quando un essere umano inizia a contare qualsiasi cosa, non inizia con zero ma uno. Ad esempio, immagina che ci siano 135 studenti in una classe. Contare il numero sarebbe qualcosa del genere: uno, due, tre ... centotrentaquattro, centotrentacinque.
La sua rappresentazione numerica sarebbe quindi: 1, 2, 3, ... 134, 135 Finora siamo d'accordo, giusto?
Ora mettiamo le cifre che non sono rappresentate da 0. Sarebbe simile a questo: 001, 002, 003, ..., 015, 016, ..., 099, 100, ..., 133, 134, 135
Questo è ciò che accade con CHS : 0,0,1 - 0,0,2 - 0,0,3 ...
È significativo che le righe nei fogli Excel o i campi numerici automatici in un database inizino da 1 e non da 0 e nessuno ha detto nulla al riguardo.
David J. Bradley ha programmato il BIOS in quel modo?
Sì, ma non era fuori di testa.
Sicuramente non esiste alcun motivo tecnico per cui SECTOR 0 non possa essere utilizzato se non è riservato e nascosto agli utenti per altri motivi. In linea di principio, tutto indica che si tratta di una numerazione naturale.
GA21-9152-2 N. file 3740-00,15
IBM 3740 Data Entry System
pagina 12
INIZIALIZZAZIONE DEL DISCO
... Ogni disco contiene due tracce di riserva per sostituire eventuali tracce irregolari. Inoltre, la funzione di inizializzazione fornisce un mezzo per alterare la sequenza di indirizzi di settore sul dischetto. Normalmente, la sequenza dei settori è in ordine numerico (1, 2, 3, ... 25,26) .
pagina 24
ETICHETTATURA DEI DATI SUL DISKETTE
Durante l'inizializzazione, l'etichetta del set di dati per un set di dati viene registrata magneticamente sulla traccia indice (traccia 00) del dischetto. Lo scopo principale di questa etichetta è mostrare la posizione del set di dati sul dischetto
Era il 1973. Registrava i dati su un dischetto da 8 ". L'IBM PC 5150 è nato il 12 agosto 1981 ... e non possiamo dimenticare che dovevano mantenere una certa compatibilità con i dispositivi precedenti.
Non c'era assolutamente alcun motivo tecnico.