Chủ Nhật, 12 tháng 1, 2020

Textual description of firstImageUrl

YAFFS - Wikipedia


Yaffs ( Noch ein Flash-Dateisystem ) wurde von Charles Manning aus Whitecliffs, Neuseeland, für die Firma Aleph One entworfen und geschrieben.

Yaffs1 war die erste Version dieses Dateisystems und wurde für die damals aktuellen NAND-Chips mit einer Seitengröße von 512 Byte (+ 16 Byte Reserve-Bereich (OOB; Out-Of-Band)) entwickelt. Die Arbeit begann im Jahr 2002 und wurde erst später in diesem Jahr veröffentlicht. Die ersten Arbeiten wurden von Toby Churchill Ltd und Brightstar Engineering gesponsert.

Diese älteren Chips erlauben im Allgemeinen auch 2 oder 3 Schreibzyklen pro Seite. [1] YAFFS macht sich das zu Nutze: Dirty Pages werden durch Schreiben in ein bestimmtes Reserve-Byte markiert. Neuere NAND-Flash-Chips haben größere Seiten, erste 2 KB-Seiten (+ 64 Byte OOB), später 4 KByte mit höheren Schreibanforderungen. Jede Seite innerhalb eines Löschblocks (128 Kilobytes) muss in sequentieller Reihenfolge beschrieben werden, und jede Seite muss nur einmal geschrieben werden. [ Zitat benötigt ]

Entwurf eines Speichersystems das erzwingt eine "einmal schreiben-Regel" ("einmal schreiben-Eigenschaft") hat mehrere Vorteile. [2]

YAFFS2 wurde entwickelt, um diese neueren Chips aufzunehmen. Es basierte auf dem YAFFS1-Quellcode, mit dem Hauptunterschied, dass die internen Strukturen nicht auf 512-Byte-Größen festgelegt sind und auf jeder geschriebenen Seite eine Blocksequenznummer steht. Auf diese Weise können ältere Seiten logisch überschrieben werden, ohne die Regel "Einmal schreiben" zu verletzen. Es wurde Ende 2003 veröffentlicht.

YAFFS ist ein robustes Dateisystem mit Protokollstruktur, das der Datenintegrität hohe Priorität einräumt. Ein sekundäres Ziel von YAFFS ist die hohe Leistung. YAFFS wird in der Regel die meisten Alternativen übertreffen. [3] Es ist auch als tragbares Gerät konzipiert und wurde unter Linux, WinCE, pSOS, RTEMS, eCos, ThreadX und verschiedenen Spezialbetriebssystemen verwendet. Eine Variante 'YAFFS / Direct' wird in Situationen verwendet, in denen kein Betriebssystem, eingebettete Betriebssysteme oder Bootloader vorhanden sind: Es verfügt über dasselbe zentrale Dateisystem, ist jedoch einfacher an den Code der höheren und niedrigeren Ebene sowie an die NAND-Flash-Hardware anzuschließen.

Die YAFFS-Codebase ist sowohl unter der GPL als auch unter Produktlizenzen von Aleph One lizenziert.

Es gibt keine spezielle Prozedur zum Initialisieren eines YAFFS-Dateisystems, außer das Löschen des Flash-Speichers. Wenn ein fehlerhafter Block angetroffen wird, folgt YAFFS dem intelligenten Medienschema, das fünfte Byte des freien Bereichs des Blocks zu markieren. Blöcke, die als solche markiert sind, bleiben von da an nicht zugewiesen. [ Erforderliche Erläuterung ]

Zum Schreiben von Dateidaten schreibt YAFFS zunächst eine ganze Seite (Block in YAFFS-Terminologie), die die Datei beschreibt Metadaten wie Zeitstempel, Name, Pfad usw. Der neuen Datei wird eine eindeutige Objekt-ID-Nummer zugewiesen. Jeder Datenblock in der Datei enthält diese eindeutige Objekt-ID im Ersatzbereich. YAFFS verwaltet im RAM eine Baumstruktur des physischen Ortes dieser Blöcke. Wenn ein Chunk nicht mehr gültig ist (die Datei wird gelöscht oder Teile der Datei werden überschrieben), markiert YAFFS ein bestimmtes Byte im Ersatzbereich des Chunks als 'dirty'. Wenn ein gesamter Block (32 Seiten) als verschmutzt markiert ist, kann YAFFS den Block löschen und den Speicherplatz freigeben. Wenn der freie Speicherplatz des Dateisystems nicht ausreicht, konsolidiert YAFFS eine Gruppe guter Seiten in einem neuen Block. YAFFS beansprucht dann den von schmutzigen Seiten in jedem der ursprünglichen Blöcke belegten Speicherplatz.

Wenn ein YAFFS-System ein NAND-Flash-Gerät einbindet, muss es jeden Block besuchen, um nach gültigen Daten zu suchen, indem der freie Bereich durchsucht wird. Mit diesen Informationen stellt es dann die speicherinterne Baumdatenstruktur wieder her.

YAFFS2 ist im Konzept dem von YAFFS1 ähnlich und teilt einen Großteil des gleichen Codes. Die YAFFS2-Codebasis unterstützt YAFFS1-Datenformate durch Rückwärtskompatibilität. Der Hauptunterschied besteht darin, dass YAFFS2 durch signifikante Reifen springen muss, um die Anforderung des "einmaligen Schreibens" des modernen NAND-Flashs zu erfüllen. [4]

YAFFS2 markiert jeden neu geschriebenen Block mit einer monotonen Folgenummer zunehmen. Die Reihenfolge der Blöcke kann aus der Blocksequenznummer und dem Blockversatz innerhalb des Blocks abgeleitet werden. Wenn YAFFS2 den Flash scannt und mehrere Chunks erkennt, die identische ObjectIDs und ChunkNumbers haben, kann sie durch Verwendung der größten Sequenznummer auswählen, welche verwendet werden soll. Aus Effizienzgründen führt YAFFS2 auch das Konzept der Schrumpfköpfe ein. Wenn beispielsweise die Größe einer Datei verkleinert wird, markiert YAFFS1 alle betroffenen Blöcke als fehlerhaft - YAFFS2 kann dies aufgrund der Regel "Einmal schreiben" nicht. YAFFS2 schreibt stattdessen einen "Shrink-Header", der angibt, dass eine bestimmte Anzahl von Seiten vor diesem Punkt ungültig ist. Dadurch kann YAFFS2 den endgültigen Zustand des Dateisystems beim Neustart des Systems wiederherstellen.

YAFFS2 verwendet eine abstraktere Definition des NAND-Flash, sodass er mit einer größeren Anzahl von Flash-Bauteilen mit unterschiedlichen Geometrien, Regeln für den Umgang mit fehlerhaften Blöcken usw. verwendet werden kann.

YAFFS2 fügte später Unterstützung für das Checkpointing hinzu, wodurch das normale Mount-Scannen umgangen wird, was sehr schnelle Mount-Zeiten ermöglicht. Die Leistung wird variieren, es wurden jedoch Montagezeiten von 3 Sekunden für 2 GB gemeldet. [ Zitat erforderlich

Siehe auch [ edit

Verweise [ edit ]

Externe Links [ edit ]

Không có nhận xét nào:

Đăng nhận xét