Woher wissen Computer die Kapazitäten der damit verbundenen Laufwerke?

466
VortixDev

Wenn Sie mein 32-GB-USB-Laufwerk an meinen Computer anschließen, woher weiß der Computer, dass es sich um ein 32-GB-Laufwerk handelt? Wo werden diese Informationen gespeichert und wie werden sie abgerufen?

3
Wenn Sie ein USB-Gerät anschließen, werden Sie gefragt, "was sind Sie?". und die Geräte antworten und werden vom Betriebssystem entsprechend behandelt. vor 6 Jahren 2

3 Antworten auf die Frage

4
sawdust

Woher wissen Computer die Kapazitäten der damit verbundenen Laufwerke?

Frühe PC-Festplattenlaufwerke (z. B. ST506, MFM, RLL) erforderten vom Benutzer eingegebene Parameter für die Laufwerksgeometrie (dh Anzahl der Sektoren pro Spur, Anzahl der Schreib- / Leseköpfe und Anzahl der Zylinder) für die CHS-Adressierung . Natürlich haben (IBM) PCs eine Sektorgröße von 512 Bytes angenommen / definiert.
Diese Parameter wurden normalerweise im BIOS des PCs gespeichert.

Bei IDE-Laufwerken wurde der ATA-Befehlssatz eingeführt, der einen Identify DeviceBefehl (mit dem Befehlscode 0xEC) enthielt, der die Laufwerksgeometrie und andere Informationen meldete.
Bei der Version 3 von ATAPI war die Antwort auf diesen Befehl die total number of user addressable sectors. (Ich habe keine frühere Version der ATAPI-Spezifikation, daher bin ich mir nicht sicher, was genau in der Antwort vor ATA-3 enthalten war.)
Unter Verwendung der Gesamtzahl der Sektoren und der Sektorgröße die Gesamtkapazität des Laufwerks ist leicht zu berechnen.
Da moderne ATA-Versionen (z. B. SATA-Laufwerke mit Zonenbitaufzeichnung) keine CHS-Adressierung mehr unterstützen, ist die Laufwerksgeometrie irrelevant (und aufgrund der Zonenbitaufzeichnung nicht einmal konstant ).

USB-Flash-Laufwerke verwenden den USB einfach als Transportprotokoll und implementieren den ATA-Befehlssatz genauso wie HDDS und SSDs. Die Kapazität von USB-Flashlaufwerken (und SATA-Festplatten / SSDs) kann daher leicht durch Abfragen des Laufwerks mithilfe des ATA- Identify DeviceBefehls ermittelt werden.

SD-Karten verfügen über ein proprietäres Befehlsprotokoll zur Verwendung über ihre Schnittstelle. Die Kapazität, die Geschwindigkeitsfunktionen und andere Informationen der Karte werden als Antwort über die Befehlszeile (und nicht über die Datenschnittstelle der Karte) gemeldet.


Betriebssysteme bieten in erster Linie einen Benutzerzugriff auf Massenspeichergeräte wie Festplatten und SSDs als Dateisysteme.
Nach PC-Konventionen muss das Laufwerk partitioniert sein und ein Dateisystem muss in einer Partition des Laufwerks vorhanden sein. Beachten Sie, dass Disketten und optional USB-Flash-Laufwerke nicht partitioniert sind.
Die wichtigsten Parameter des Laufwerks (dh die Start- und Endsektor- / LBA-Adressen) der Partitionen werden aus der Partitionstabelle abgerufen (die sich im MBR- oder GPT-Sektor befindet).

2
music2myear

Das Betriebssystem ist mehr oder weniger vollständig vom Laufwerk für die Übertragung der Laufwerkskapazität abhängig.

Diese Tatsache wird ausgenutzt ...

  • Für die meisten gängigen SSDs, bei denen ein erheblicher Teil des Speicherplatzes für die Zwischenspeicherung aufbewahrt wird, und als Ersatzspeicher für den Fall, dass das Laufwerk zu altern beginnt

  • und für schlechte Zwecke, wenn billige USB-Laufwerke behaupten, dass sie viel größer sind als sie tatsächlich sind, und sogar das Betriebssystem dazu bringen, mehr Daten zu schreiben, als sie halten können

Laufwerke aller Art enthalten kleine Mengen nichtflüchtigen Speichers, der diese Informationen enthält und der das Betriebssystem bei der Verbindung meldet.

2
LawrenceC

PCs steuern das Laufwerk nicht direkt, sie geben Befehle an einen Hostadapter oder Controller an einem Bus aus. Bei modernen (seit mindestens späten 80ern / frühen 90ern) Laufwerken leitet der Adapter / Controller diese Befehle an eine CPU auf dem Laufwerk weiter, auf der die Firmware ausgeführt wird. Standardisierte Busse und ihre entsprechenden Befehlsschemata umfassen ATA, AHCI, SCSI, SAS.

Laufwerksspezifische Parameter, wie z. B. die Kapazität, sind Teil dieser Firmware oder können von dieser erkannt werden, und bestimmte Befehle veranlassen, dass die Firmware diese Informationen zurückgibt, anstatt Daten zu lesen oder zu schreiben.

Beispiel: Der ATA-1-Standard (sehr alt) beschreibt den Befehl "Identify Drive" (Laufwerk identifizieren), der die CHS-Werte des Laufwerks zurückgibt, aus denen die Kapazität ermittelt werden kann. Dies ist also der erste Befehl, den ein Betriebssystem vor dem Lesen / Schreiben an das Laufwerk sendet.

Ich glaube nicht, dass Laufwerke vor ATA, wie MFM- oder RLL-Laufwerke, über intelligente Firmware (außer für das Formatieren) verfügten. Für diese Systeme der frühen 80er Jahre musste man den "Laufwerkstyp" kennen, der nur eine bekannte Kapazität war Stellen Sie eine benutzerdefinierte Kapazität direkt im BIOS ein.

Bei USB ist es das gleiche Prinzip - es gibt Befehle, die über USB gesendet werden und mit einem Controller kommunizieren, der Informationen abruft, anstatt Daten zu lesen / schreiben.