YAFFS – Wikipedia


Sistema di file

Yaff (Ancora un altro file system Flash) è un file system progettato e scritto da Charles Manning per la società Aleph One.

Yaffs1 è stata la prima versione di questo file system ed è stata progettata per gli allora attuali chip NAND con 512 byte dimensione della pagina (+ area di 16 byte di riserva (OOB; Out-Of-Band)). Il lavoro è iniziato nel 2002 ed è stato rilasciato per la prima volta nello stesso anno. Il lavoro iniziale è stato sponsorizzato da Toby Churchill Ltd e Brightstar Engineering.

Questi più vecchi patatine fritte inoltre generalmente consentono 2 o 3 cicli di scrittura per pagina.(1) YAFFS ne approfitta: pagine sporche sono contrassegnati scrivendo su uno specifico byte dell’area di riserva. I chip flash NAND più recenti hanno pagine più grandi, le prime pagine da 2K (+ 64 byte OOB), successivamente 4K, con requisiti di scrittura più severi. Ciascuna pagina all’interno di un blocco di cancellazione (128 kilobyte) deve essere scritta in ordine sequenziale e ciascuna pagina deve essere scritta una sola volta.(citazione necessaria)

Progettare un sistema di storage che applichi una “regola di scrittura una volta” (“proprietà di scrittura una volta”) presenta diversi vantaggi.(2)

YAFFS2 è stato progettato per ospitare questi chip più recenti. Era basato sul codice sorgente YAFFS1, con la differenza principale che le strutture interne non sono fisse per assumere una dimensione di 512 byte e su ogni pagina scritta viene inserito un numero di sequenza di blocchi. In questo modo le pagine più vecchie possono essere sovrascritte logicamente senza violare la regola “scrivi una volta”. È stato rilasciato alla fine del 2003.

YAFFS è un robusto file system strutturato in log questo vale integrità dei dati come alta priorità. Un obiettivo secondario di YAFFS è l’elevata prestazione. YAFFS in genere sovraperformerà la maggior parte delle alternative.(3) È inoltre progettato per essere portatile ed è stato utilizzato su Linux, WinCE, pSOS, RTEM, eCos, DiscussioneXe vari sistemi operativi per scopi speciali. Una variante “YAFFS/Direct” viene utilizzata in situazioni in cui non sono presenti sistemi operativi, sistemi operativi incorporati o bootloader: ha lo stesso file system principale ma un’interfaccia più semplice sia con il codice di livello superiore che inferiore e con l’hardware flash NAND.

La codebase YAFFS è concessa in licenza sia con il GPL e con licenze per prodotto disponibili da Aleph One.

Non esiste una procedura speciale per inizializzare un filesystem YAFFS oltre la semplice cancellazione della memoria flash. Quando viene rilevato un blocco danneggiato, YAFFS segue lo schema dei media intelligenti contrassegnando il quinto byte dell’area di riserva del blocco. Da quel momento in poi i blocchi contrassegnati come tali rimarranno non allocati.(necessari chiarimenti)

Per scrivere i dati del file, YAFFS scrive inizialmente un’intera pagina (blocco nella terminologia YAFFS) che descrive il file metadatiad esempio timestamp, nome, percorso, ecc. Al nuovo file viene assegnato un numero ID oggetto univoco; ogni blocco di dati all’interno del file conterrà questo ID oggetto univoco all’interno dell’area di riserva. YAFFS mantiene una struttura ad albero in RAM della posizione fisica di questi blocchi. Quando un pezzo non è più valido (il file viene cancellato o parti del file vengono sovrascritte), YAFFS contrassegna un particolare byte nell’area di riserva del pezzo come ‘sporco’. Quando un intero blocco (32 pagine) viene contrassegnato come sporco, YAFFS può cancellare il blocco e recuperare lo spazio. Quando lo spazio libero del filesystem è basso, YAFFS consolida un gruppo di pagine valide in un nuovo blocco. YAFFS recupera quindi lo spazio utilizzato dalle pagine sporche all’interno di ciascuno dei blocchi originali.

Quando un sistema YAFFS monta UN Flash NAND dispositivo, deve visitare ciascun blocco per verificare la validità dei dati eseguendo la scansione della sua area di riserva. Con queste informazioni ricostituisce quindi la struttura dei dati dell’albero residente in memoria.

YAFFS2 è concettualmente simile a YAFFS1 e condivide gran parte dello stesso codice; la base di codice YAFFS2 supporta i formati di dati YAFFS1 grazie alla compatibilità con le versioni precedenti. La differenza principale è che YAFFS2 deve fare passi da gigante per soddisfare il requisito di “scrittura una volta” della moderna flash NAND.(4)

YAFFS2 contrassegna ogni blocco appena scritto con un numero di sequenza monotonicamente crescente. La sequenza dei blocchi può essere dedotta dal numero di sequenza del blocco e dall’offset dei blocchi all’interno del blocco. Pertanto, quando YAFFS2 esegue la scansione della flash e rileva più blocchi con ObjectID e ChunkNumbers identici, può scegliere quale utilizzare prendendo il numero di sequenza maggiore. Per ragioni di efficienza YAFFS2 introduce anche il concetto di intestazioni termoretraibili. Ad esempio, quando un file viene ridimensionato a una dimensione inferiore, YAFFS1 contrassegnerà tutti i blocchi interessati come sporchi: YAFFS2 non può farlo a causa della regola “scrivi una volta”. YAFFS2 scrive invece una “shrink header”, che indica che un certo numero di pagine prima di quel punto non sono valide. Ciò consente a YAFFS2 di ricostruire lo stato finale del filesystem al riavvio del sistema.

YAFFS2 utilizza una definizione più astratta del flash NAND che ne consente l’utilizzo con una più ampia varietà di parti flash con geometrie diverse, regole di gestione dei blocchi errate, ecc.

YAFFS2 ha successivamente aggiunto il supporto per checkpoint, che ignora la normale scansione del montaggio, consentendo tempi di montaggio molto rapidi. Le prestazioni varieranno, ma i tempi di montaggio di 3 secondi per 2 GB è stato riportato.(citazione necessaria)

Guarda anche(modificare)

Riferimenti(modificare)

link esterno(modificare)




Source link

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Torna in alto