Perché l'indirizzamento dei numeri di settore in CHS inizia dal settore 1 e non da 0?


13

Prima dell'introduzione dell'LBA, perché inizia CHS 0,0,1e no 0,0,0?


1
"Perché il conteggio dei settori inizia da 1 ..." - In realtà ti riferisci al numero del settore , non al conteggio del settore . Questi sono due parametri distinti e diversi utilizzati in una richiesta del disco. "Indice di settore" è anche una nomenclatura inadeguata per il numero di settore, in quanto esiste un'entità distinta chiamata indice nelle unità disco.
segatura

Risposte:


8

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).


Immagino già la risposta a questa domanda, ma immagino che la persona che ho lasciato i miei commenti mostrando la risposta la abbia cancellata ... comunque il motivo per cui ho fatto questa domanda era dovuto al fatto che tutti e tutto ciò che ho letto ha pubblicato praticamente il tuo esatto parole per la maggior parte. Questa risposta di "è solo il modo in cui l'hanno fatto ..." mi ha davvero infastidito perché le persone non costruiscono semplicemente qualcosa e non lo usano solo perché non vogliono usarlo ... che la logica non fa da allora affatto ...
Jordan Davis,

1
Ripercorrendo la storia di CHR / CHS / LBA si scopre che prima di CHR, che era di lunghezza variabile usando MBBCCHHR, si usavano i zero sectorcodici 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
Jordan Davis,

@JordanDavis nella maggior parte dei casi, l'area protetta dall'host si trova alla fine del disco, non all'inizio. Infatti, mentre la nomenclatura per il primo settore viene restituita come valore 1, non ho ancora trovato alcuna informazione sul perché (anche se sospetto che possa avere qualcosa a che fare con il settore 0riservato come flag di errore). Sarò sicuro di aggiornarti se mi imbatto in qualcosa.
Sfondamento

Il link di Wikipedia per la panoramica della sezione FBA, l'elenco è il record zeroth come ECC ma suona bene, farò lo stesso se uno dei due si imbatte.
Jordan Davis,

@JordanDavis Ho aggiunto una generosità a questa domanda, dato che mi piacerebbe davvero sentire alcuni input da altri - soprattutto per quanto riguarda l' aspetto del perché .. Sentiti libero di mantenere la domanda aperta / senza risposta per il momento per dare un possibilità di altre risposte.
Breakthrough

8

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.


"Direi che ha lasciato il settore zero come settore di indirizzamento ..." - Immagino illogico. Ogni settore ha un record di identificazione che include l'indirizzo cilindro / testa / settore. Il controller del disco non deve attendere che l'indice si presenti per confermare che la ricerca è stata completata sul cilindro corretto; il settore immediatamente successivo che ruota sotto la testa viene letto per la verifica.
segatura

"CH = numero cilindro (0-1023 dec.)" - Il BIOS PC IBM originale utilizza CH per il numero "traccia". CH è un registro a 8 bit, quindi il valore massimo è solo 255.
segatura

"Ho cercato di tracciare la storia di CHS ... e ho dato vita a LBA" - Per essere chiari, tutte queste discussioni su "LBA" riguardano solo le interfacce del disco del PC, in particolare le specifiche ATAPI. Altrimenti CHS e LBA possono coesistere. Ad esempio, ho scritto alcuni filesystem che utilizzavano LBA internamente, ma ho convertito l'indirizzamento in CHS per eseguire l'I / O del disco effettivo per l'interfaccia del controller. "il primo schema CHS ha effettivamente utilizzato indirizzi settoriali a base zero." - Vero, ma è successo molto prima di CP / M.
segatura

@sawdust: Tutto ciò che ho fatto è stato citare i documenti IBM, che potrebbero anche precedere l'assegnazione dei registri per l'interfaccia BIOS del PC. È chiaro che Bradley è stato sbagliato o indirizzato erroneamente impostando il settore 0 come indirizzo riservato, ma non possiamo essere sicuri di cosa, dal momento che non è mai successo. Potrebbe non essere a conoscenza del fatto che anche la parte dell'indirizzo del settore contenesse il numero di traccia. O forse questo settore di riserva era una proprietà dei dischetti trasferiti nell'interfaccia BIOS generale di Bradley. Sappiamo solo che il BIOS IBM / PC era responsabile di questa modifica in CHS.
harrymc,

Come sempre in queste materie, l'elenco degli interrupt di Ralph Brown fornisce informazioni preziose. Sebbene sia vero ciò che @sawdust ha scritto sul fatto che CH sia un registro a otto bit, non è stato usato CX. Invece, è stato CX-bit farcito con sia il numero del cilindro e settore numero (ma questa estensione apparentemente applicata solo ai dischi rigidi, non dischetti, per i floppy, CL tenuto il numero di settore e CH tenuto il numero del cilindro). Confrontare ad esempio l'interfaccia specificata per Int 13 / AH = 02h, BIOS - DISK - READ SECTOR (S) IN MEMORY parametri di input.
un CVn del

1

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.


È riservato per il driver: l'interfaccia del firmware I / O, anche nei moderni dischi SSD o flash, ha spazio riservato alle operazioni di I / O per leggere / scrivere / copiare / formattare ecc.
Jordan Davis,

Dai un'occhiata a This
yass

Sì, ma non SETTORE 0 ma CILINDRO 0. Dalla prima specifica (IBM 3740) il cilindro 0 è chiamato "cilindro indice" e memorizza più dati specificati nel "LAYOUT DEL CILINDRO INDICE". Sui dischi moderni questo cilindro viene generalmente assegnato come "NUMERO CILINDRO -1", sì "-1" ed è accessibile solo dal controller. Non c'è nulla che spieghi perché il settore 0 non sia stato utilizzato e sebbene sia possibile vederlo in alcuni sistemi operativi come CP / M, è virtuale poiché l'hardware è ancora prodotto secondo IBM 3740. In altre parole, il primo settore è SETTORE 1. Perché? "
NUMERO
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.