Collegando la mia unità USB da 32 GB al mio computer, come fa il computer a sapere che si tratta di un'unità da 32 GB? Dove sono archiviate tali informazioni e come vengono recuperate?
Collegando la mia unità USB da 32 GB al mio computer, come fa il computer a sapere che si tratta di un'unità da 32 GB? Dove sono archiviate tali informazioni e come vengono recuperate?
Risposte:
Come fanno i computer a conoscere le capacità delle unità ad essi collegate?
Le prime unità disco fisso per PC (ad es. ST506, MFM, RLL) richiedevano parametri forniti dall'utente per la geometria dell'unità (ovvero il numero di settori per traccia, il numero di testine R / W e il numero di cilindri) per l' indirizzamento CHS . Naturalmente i PC (IBM) hanno assunto / definito una dimensione del settore di 512 byte.
Questi parametri erano in genere memorizzati nel BIOS del PC.
Le unità IDE hanno introdotto il set di comandi ATA, che includeva un Identify Device
comando (utilizzando il codice comando 0xEC), che riportava la geometria dell'unità e altre informazioni.
Dalla versione 3 di ATAPI, la risposta a questo comando includeva il total number of user addressable sectors
. (Non ho alcuna versione precedente della specifica ATAPI, quindi non sono sicuro di cosa fosse esattamente la risposta pre-ATA-3.)
Utilizzando il numero totale di settori e le dimensioni del settore, la capacità totale dell'unità è facilmente calcolabile.
Poiché le versioni moderne di ATA (ad es. Unità SATA con registrazione bit di zona) non supportano più l'indirizzamento CHS, la geometria dell'unità è irrilevante (e nemmeno costante a causa della registrazione bit di zona ).
Le unità flash USB utilizzano semplicemente l'USB come protocollo di trasporto e implementano il set di comandi ATA proprio come HDDS e SSD. Pertanto, la capacità delle unità flash USB (e degli HDD / SSD SATA) può essere facilmente ottenuta interrogando l'unità utilizzando il Identify Device
comando ATA .
Le schede SD hanno un protocollo di comando proprietario da utilizzare tramite la sua interfaccia. La capacità, la velocità della scheda e altre informazioni della scheda vengono riportate come risposta sulla sua riga di comando (e non attraverso l'interfaccia dati della scheda).
I sistemi operativi forniscono principalmente l'accesso dell'utente a dispositivi di archiviazione di massa come HDD e SSD come filesystem.
In base alle convenzioni del PC, l'unità deve essere partizionata e deve esistere un filesystem in una partizione dell'unità. Si noti che i floppy e le unità flash USB opzionali non sono partizionati.
I parametri salienti dell'unità (ovvero gli indirizzi di inizio e fine / indirizzi LBA) delle partizioni vengono recuperati dalla tabella delle partizioni (situata nei settori MBR o GPT).
Il sistema operativo dipende più o meno interamente dall'unità per comunicare la capacità dell'unità.
Questo fatto è sfruttato da ...
per buoni scopi negli SSD più comuni in cui vengono conservate porzioni significative di spazio di archiviazione per la memorizzazione nella cache e come spazio di archiviazione di riserva quando l'unità inizia a invecchiare
e per cattivi scopi quando le unità USB economiche dichiarano di essere molto più grandi di quello che sono in realtà, anche ingannando il sistema operativo nello scrivere più dati di quanti siano in grado di conservare
Le unità di tutti i tipi contengono piccole quantità di memoria non volatile che contiene queste informazioni e che riporta al sistema operativo al momento della connessione.
I PC non controllano direttamente l'unità, inviano comandi a un adattatore host o controller su un bus. Per le unità moderne (almeno alla fine degli anni '80 / primi anni '90), l'adattatore / controller inoltra questi comandi a una CPU sull'unità che esegue il firmware. I bus standardizzati e i relativi schemi di comando comprendono ATA, AHCI, SCSI, SAS.
I parametri specifici del convertitore di frequenza, come la capacità, sono parte di o rilevabili da quel firmware e comandi specifici fanno sì che il firmware restituisca tali informazioni invece di eseguire una lettura / scrittura di dati.
Ad esempio: lo standard ATA-1 (molto vecchio) descrive il comando "Identifica unità" che restituisce i valori CHS dell'unità, da cui è possibile determinare la capacità. Quindi questo sarebbe il primo comando che un sistema operativo invia all'unità prima di eseguire qualsiasi operazione di lettura / scrittura.
Non credo che le unità prima di ATA, come le unità MFM o RLL, avessero un firmware intelligente (oltre che per la formattazione) - per questi primi anni '80 dovevi conoscere il "Tipo di unità" - che era solo una capacità ben nota, o impostare direttamente una capacità personalizzata nel BIOS.
Con USB, è lo stesso principio: ci sono comandi inviati tramite USB che parlano a un controller che ottiene informazioni invece di leggere / scrivere dati.