Prima di trattare in dettaglio i metodi di wear leveling, oggetto di questo approfondimento, è bene fare una breve premessa sui tipi di dati memorizzati in una memoria di massa.
Essi possono essere suddivisi in due categorie:
- Dati statici: informazioni aggiornate raramente per le quali si può affermare che risiederanno in determinate locazioni di memoria per l’intero ciclo vita del dispositivo. A titolo d’esempio, si possono citare la maggior parte dei file del sistema operativo e archivi di file personali come album fotografici o raccolte di file audio e video;
- Dati dinamici: file soggetti a continui cambiamenti, cancellazioni e riscritture. A tale categoria appartengono per esempio i file temporanei del sistema, cache di programmi frequentemente utilizzati, file personali di lavoro soggetti a frequenti modifiche.
Allo stesso modo andiamo quindi a identificare due principali implementazioni del wear leveling da parte del controller NAND Flash:
- Wear leveling dinamico: il controller scrive nei blocchi vuoti disponibili contraddistinti dal più basso tasso di cancellazione, ovvero in quei blocchi che sono stati cancellati meno volte rispetto a tutti gli altri;
- Wear leveling statico: il controller seleziona un blocco di destinazione con il più basso tasso di cancellazione, lo cancella se necessario, scrive i dati ricevuti dal sistema host e si assicura che gli eventuali dati precedentemente presenti nel blocco di destinazione siano spostati in un’altra locazione caratterizzata da un tasso di cancellazione inferiore ad una certa soglia.