
Im Internet gab es einen Aufstand namens "Warum ein USB-Flash-Laufwerk aufladen?". Auf den ersten Blick ist es lustig, aber ich schlage vor, noch einmal darüber nachzudenken und das Problem zu verstehen. Nachdem Sie diesen Artikel gelesen haben, laden Sie auch Ihre Flash-Laufwerke auf.
Persönlich hat der Chefdesigner eines Unternehmens der Radioelektronik einen Link zu einem Artikel mit der Aufschrift "Willst du wiehern?"
Einige verwandte Links:
- www.youtube.com/watch?v=EuCSS9VtxCA
- zen.yandex.ru/media/id/5cebc7044d24ad00b31ddccc/zachem-liudi-zariajaiut-fleshnakopiteli-5d113734e1551900b0ad97a9
Natürlich habe ich gelacht, aber nicht darüber, was du gedacht hast. Ich musste mich an der Entwicklung von Solid-State-Laufwerken auf Basis von NAND-Flash-Speichern beteiligen, auch für USB-Sticks. Auf den ersten Blick scheint es für einen technisch versierten Menschen offensichtlich, dass das Anschließen des Laufwerks an das Ladegerät bedeutungslos ist, da neben der Stromversorgung keine weiteren Aktionen mit dem Laufwerk ausgeführt werden. Abgesehen von der Wärmeableitung erhalten wir daher nichts. Im Internet gibt es viele verschiedene "Enthüllungen", Kichern und sogar regelrechte Scherze über arme Humanisten, die fragen, ob es sich lohnt, Flash-Laufwerke aufzuladen. Sie mögen lachen, aber ich habe mit eigenen Augen gesehen, wie die Entwickler von Flash-Laufwerken ihre Produkte "aufgeladen" haben, indem sie sie für eine Weile in Ladegeräte eingebaut haben!
Ein USB-Flash-Laufwerk ist ein Blockspeichergerät: Der gesamte Adressraum ist in 512-Byte-Sektoren unterteilt. Das Betriebssystem kann auf die Adresse eines bestimmten Sektors (LBA) zugreifen und diese lesen oder überschreiben. Alles ist einfach.
Schauen wir uns jetzt die Motorhaube unseres Flash-Laufwerks an ...
Das Flash-Laufwerk enthält Mikroschaltungen:
- Regler;
- NAND-Flash-Speicher.
Speicherchips sind in Bezug auf das Adressieren, Schreiben und Speichern von Daten ziemlich spezifisch angeordnet, was durch ihre Architektur vorgegeben wird (und wir müssen es so lieben, wie es ist). Die folgenden Regeln sind für NAND-Flash definiert:
- Der Speicher ist in Blöcke in der Größenordnung von Megabyte unterteilt.
- Vor dem Schreiben in einen Speicherblock muss dieser gelöscht werden. Beim Löschen werden alle Datenbytes im Block auf 0xFF gesetzt.
- Der Block besteht aus Seiten mit einer Größe von mehreren zehn Kilobyte.
- , ;
- ;
- .
Mit diesem Regelwerk wird eine so einfache Aktion (aus Sicht des Benutzers), wie ein Sektor auf ein USB-Flash-Laufwerk geschrieben wird, zu einem echten Rätsel für den Entwickler des Controllers desselben Flash-Laufwerks.

Versuchen Sie sich vorzustellen, wie Sie dieses Problem lösen würden, und Sie werden Ähnlichkeiten mit dem Spielzeugturm von Hanoi feststellen .
Um die benutzerfreundliche Blockadressierung des Laufwerks und die sadistenfreundliche Adressierung des NAND-Flash-Speichers zu "finden", dreht sich im Prozessor des Flash-Laufwerks ein Prozessor, der den Adressübersetzungsalgorithmus, auch bekannt als FTL (Flash Translation Layer), implementiert. Die Aufgaben des FTL-Algorithmus umfassen:
- Erstellen und Verwalten einer Seitenzuordnungstabelle;
- Müllabfuhr;
- Verschleißnivellierung von NAND-Flash-Speicherblöcken.
Fachleute werden sagen, dass es andere Aufgaben gibt, wie das Verfolgen fehlerhafter Blöcke des NAND-Flash-Speichers (fehlerhafte Blockverwaltung), aber ich möchte jetzt nicht darüber sprechen, da dies nicht für den aktuellen Fall gilt ...
Ein kleines Bildungsprogramm zu den angegebenen Punkten ::
Seitenzuordnung
Nun, hier ist vielleicht alles klar ... Der logische Adressraum des Laufwerks (LBA) wird durch ein riesiges Array, dessen Index für LBA steht, in die Adressen von Blöcken und Seiten des NAND-Flash-Speichers (physikalische Adresse) übersetzt, und der Wert des Elements ist die physikalische Adresse. Wenn eine Seite neu geschrieben werden muss, werden die Daten dieser Seite der Reihe nach in einen freien Block geschrieben, und im Array wird die Seitenzahl durch die neu geschriebene ersetzt. Wenn ein Schüler ein 32-GB-Flash-Laufwerk kauft und feststellt, dass es nur 29 GB hat, weiß der Schüler noch nicht, dass nicht die Chinesen den fehlenden Speicherplatz in der Fabrik gestohlen haben, sondern die Entwickler des FTL-Algorithmus. Um Daten auf das Laufwerk schreiben zu können.

Müllabfuhr
Und was passiert mit der Seite, die ihre Relevanz verloren hat? Die darin geschriebenen Daten werden nicht mehr benötigt, können jedoch nicht gelöscht werden, da das Löschen nur in Blöcken zulässig ist und im selben Block möglicherweise noch tatsächliche Seiten vorhanden sind. Früher oder später wird sich eine Situation entwickeln, in der wir keine freien Blöcke mehr haben, in die wir Seiten schreiben können. Aber in den verbleibenden Blöcken gibt es hier und da irrelevante Seiten. Um dies zu verhindern, führen die Laufwerke die Funktionalität eines "Garbage Collector" aus, der die "undichten" Blöcke mit der geringsten Anzahl relevanter Seiten findet und die tatsächlichen Seiten in einen neuen Block überträgt. Somit ist der "undichte" Block vollständig von den tatsächlichen Seiten befreit und kann gelöscht werden ... Und im neuen Block bleiben alle Seiten relevant. Erinnert an Defragmentierung.

Tragen Sie eine Nivellierung
Nichts hält für immer unter dem Mond, besonders NAND-Blitz. Es ist einfach so passiert, dass der NAND-Flash-Speicher eine begrenzte Ressource hat, die durch eine begrenzte Anzahl von Blocklöschzyklen (Blockalter) ausgedrückt wird. Blöcke, die öfter gelöscht wurden (alte Blöcke), versagen eher als weniger abgenutzte (junge Blöcke).
Haben Sie jemals darüber nachgedacht, die FAT-Tabelle von Nulladressen des Laufwerks an eine andere Stelle zu verschieben, um kein Loch im Adressraum des Flash-Laufwerks zu löschen? Dies ist unwahrscheinlich und sollte nicht bedacht werden. Weil im Flash-Laufwerk ein Blockverschleiß-Ausgleichsmechanismus funktioniert. Das Wesentliche ist, dass junge Blöcke gezwungen sind, die Plätze gegen alte auszutauschen, damit der Verschleiß aller Blöcke während des Betriebs des Laufwerks gleichmäßig ist. So hat die Fahrt die Chance, glücklich zu leben, bis alle ihre Blöcke an einem Tag sterben.

Und nun zur Hauptsache - warum das Flash-Laufwerk "aufladen"?
1) Hatten Sie jemals eine Situation, in der Sie Tag für Tag Ihre Socken waschen werden, aber jeden Abend stellt sich heraus, dass dies nicht der Fall ist? Und dann kommt so ein Moment, dass für morgen einfach keine sauberen Socken mehr übrig sind! Und dann musst du den Schlaf opfern, um deine Socken zu waschen. Es ist noch schlimmer, wenn Sie mit einem Fön in der Hand zu spät zur Arbeit kommen müssen.
Ähnliches gilt für den Garbage Collection-Algorithmus in FTL. Der Benutzer verwendet häufig ein USB-Flash-Laufwerk, um einige Daten von einem Computer auf einen anderen zu übertragen. In diesem Fall sieht das Szenario wie folgt aus: Schließen Sie das USB-Flash-Laufwerk an den Computer an - schreiben Sie schnell Dateien - ziehen Sie das USB-Flash-Laufwerk heraus - führen Sie es auf einen anderen Computer aus - schließen Sie das USB-Flash-Laufwerk an - lesen Sie die Dateien. Nach einer Weile bemerkt der Benutzer, dass sein Laufwerk langsam ist. In solchen Fällen sündigen sie normalerweise daran, dass „es sich nur um ein billiges, altes Flash-Laufwerk handelt. Hier kaufe ich ein neues, es wird fliegen! " Und es wird wirklich so sein! Aber sie wird höchstwahrscheinlich nach einiger Zeit das gleiche Schicksal erleiden. Tatsache ist, dass das Szenario solcher "Kurzfilme" es dem Garbage Collection-Algorithmus nicht erlaubt, Blöcke zum Schreiben freizugeben, was früher oder später dazu führen wird, dass es einfach keine freien Blöcke mehr gibt.Und dann ist der Controller gezwungen, sich zuerst mit dem Freigeben von Blöcken zu befassen und dann nur Ihre Dateien darauf zu schreiben, was zu einem Geschwindigkeitsverlust führt. Um bereit zu sein, Ihre Daten mit voller Geschwindigkeit zu empfangen, benötigt das Laufwerk eine Pause, um die Socken vorher zu waschen. Wie Sie vielleicht erraten haben, wird dieses Problem durch "Laden" des Flash-Laufwerks behoben, sodass der Controller genügend Zeit hat, um die Reihenfolge in den Daten wiederherzustellen.

2) Das Problem des Mangels an "persönlicher Zeit" der Steuerung ist auch für den Verschleißnivellierungsalgorithmus relevant. Der Wear Leveling-Algorithmus wird von der Steuerung ausgeführt, wenn sich der Antrieb im Leerlauf befindet, während keine Aufgaben zum Schreiben oder Lesen von Benutzerdaten vorhanden sind. Wenn das Laufwerk im Modus "Kurzfilme" arbeitet, bleibt einfach keine Zeit, um den Blockverschleiß auszugleichen. Ungleichmäßiger Verschleiß der Blöcke führt dazu, dass alte Blöcke versagen. Gleichzeitig nimmt die Anzahl der zum Schreiben verfügbaren Blöcke ab, bis ein kritischer Moment eintritt, in dem es einfach keine freien Blöcke zum Schreiben gibt, obwohl der NAND-Flash-Speicher insgesamt noch nicht abgenutzt ist und lange Zeit dienen könnte.

3) Die Evolution hat uns gelehrt, Wertsachen, die uns lieb sind, irgendwo weit weg von den Passagen zu begraben. Dies funktioniert gut für Schätze und unbewohnte Inseln. Das Gegenteil gilt für digitale Daten und NAND. Sicherlich gab es Fälle, in denen Sie einige Fotos von der Hochzeit eines Freundes auf ein Flash-Laufwerk geworfen haben. Ein Jahr lang lag das Flash-Laufwerk in einer Schreibtischschublade (wie es Ihnen schien, sicher und gesund), und dann wurden einige der Fotos nur zur Hälfte gelesen. Tatsache ist, dass Informationen, die einmal im NAND-Flash-Speicher aufgezeichnet wurden, im Laufe der Zeit "verrotten" können. Der Speicherhersteller garantiert keine 100% ige Datenaufbewahrung, sondern kündigt lediglich die Wahrscheinlichkeit von Bitfehlern an.
Natürlich löst der Laufwerkscontroller das Problem der Beseitigung von Bitfehlern durch Hinzufügen von redundantem Code zu den Daten. Unabhängig davon, wie groß dieser Code ist, wird sich die Ladung in den NAND-Speicherzellen im Laufe der Zeit auflösen und die Anzahl der Bitfehler kann jede Korrekturfähigkeit überschreiten. Sie können Daten nicht lange alleine im NAND-Flash-Speicher lassen, Sie müssen sich darum kümmern. Nämlich - periodisch überschreiben. Der richtige Controller liest die Daten regelmäßig erneut, überprüft die Anzahl der Bitfehler und schreibt die Daten gegebenenfalls neu (bis die Anzahl der Bitfehler den zulässigen Wert überschreitet). Natürlich braucht der Controller dafür auch "Freizeit".
Aus all dem werde ich zusammenfassen: Zögern Sie nicht, die Flash-Laufwerke zu "laden", dies wirkt sich positiv auf ihre Geschwindigkeit und Zuverlässigkeit aus. Und wenn Technikfreaks Sie treffen, geben Sie ihnen einfach einen Link zu diesem Artikel.