Yaffs ( Yet Another Flash File System ) es un sistema de archivos diseñado y escrito por Charles Manning para la empresa Aleph One.
Desarrollador (es) | Charles Manning |
---|---|
Nombre completo | Otro sistema de archivos Flash |
Otro | |
Apoyados sistemas operativos | Android , Firefox OS , Linux , Windows CE , pSOS , RTEMS , eCos , ThreadX |
Yaffs1 fue la primera versión de este sistema de archivos y fue diseñado para los chips NAND vigentes en ese momento con un tamaño de página de 512 bytes (+ área de repuesto de 16 bytes (OOB; fuera de banda)). El trabajo comenzó en 2002 y se lanzó por primera vez ese mismo año. El trabajo inicial fue patrocinado por Toby Churchill Ltd y Brightstar Engineering.
Estos chips más antiguos también permiten generalmente 2 o 3 ciclos de escritura por página. [1] YAFFS se aprovecha de esto: las páginas sucias se marcan escribiendo en un byte específico del área libre. Los chips flash NAND más nuevos tienen páginas más grandes, primeras 2K páginas (+ 64 bytes OOB), luego 4K, con requisitos de escritura más estrictos. Cada página dentro de un bloque de borrado (128 kilobytes) debe escribirse en orden secuencial, y cada página debe escribirse solo una vez. [ cita requerida ]
Diseñar un sistema de almacenamiento que aplique una "regla de escritura única" ("propiedad de escritura única") tiene varias ventajas. [2]
YAFFS2 fue diseñado para adaptarse a estos nuevos chips. Se basó en el código fuente YAFFS1, con la principal diferencia de que las estructuras internas no están fijas para asumir un tamaño de 512 bytes, y se coloca un número de secuencia de bloque en cada página escrita. De esta manera, las páginas más antiguas se pueden sobrescribir lógicamente sin violar la regla "escribir una vez". Fue lanzado a finales de 2003.
YAFFS es un robusto sistema de archivos estructurado por registros que mantiene la integridad de los datos como una alta prioridad. Un objetivo secundario de YAFFS es el alto rendimiento. YAFFS normalmente superará a la mayoría de las alternativas. [3] También está diseñado para ser portátil y se ha utilizado en Linux , WinCE , pSOS , RTEMS , eCos , ThreadX y varios sistemas operativos especiales. Se utiliza una variante 'YAFFS / Direct' en situaciones en las que no hay SO, sistemas operativos integrados o cargadores de arranque: tiene el mismo sistema de archivos central pero una interfaz más sencilla con el código de nivel superior e inferior y el hardware flash NAND.
El código base de YAFFS tiene licencia tanto bajo la GPL como bajo licencias por producto disponibles en Aleph One.
YAFFS1
No existe un procedimiento especial para inicializar un sistema de archivos YAFFS más allá de simplemente borrar la memoria flash. Cuando se encuentra un bloque defectuoso, YAFFS sigue el esquema de medios inteligentes de marcar el quinto byte del área libre del bloque. Los bloques marcados como tales permanecen sin asignar a partir de ese momento. [ aclaración necesaria ]
Para escribir datos de archivo, YAFFS escribe inicialmente una página completa (fragmento en terminología YAFFS) que describe los metadatos del archivo , como marcas de tiempo , nombre, ruta, etc. Al nuevo archivo se le asigna un número de identificación de objeto único; cada fragmento de datos dentro del archivo contendrá este ID de objeto único dentro del área libre. YAFFS mantiene una estructura de árbol en RAM de la ubicación física de estos fragmentos. Cuando un fragmento ya no es válido (el archivo se elimina o se sobrescriben partes del archivo), YAFFS marca un byte particular en el área libre del fragmento como "sucio". Cuando un bloque completo (32 páginas) está marcado como sucio, YAFFS puede borrar el bloque y recuperar el espacio. Cuando el espacio libre del sistema de archivos es bajo, YAFFS consolida un grupo de buenas páginas en un nuevo bloque. YAFFS luego recupera el espacio utilizado por las páginas sucias dentro de cada uno de los bloques originales.
Cuando un sistema YAFFS monta un dispositivo flash NAND , debe visitar cada bloque para verificar datos válidos escaneando su área libre. Con esta información, luego reconstituye la estructura de datos de árbol residente en memoria.
YAFFS2
YAFFS2 es similar en concepto a YAFFS1 y comparte gran parte del mismo código; la base de código YAFFS2 admite formatos de datos YAFFS1 a través de compatibilidad con versiones anteriores. La principal diferencia es que YAFFS2 necesita pasar por obstáculos importantes para cumplir con el requisito de "escribir una vez" de la memoria flash NAND moderna. [4]
YAFFS2 marca cada bloque recién escrito con un número de secuencia que aumenta monótonamente . La secuencia de los fragmentos se puede inferir del número de secuencia del bloque y el desplazamiento del fragmento dentro del bloque. Por lo tanto, cuando YAFFS2 escanea el flash y detecta múltiples fragmentos que tienen ID de objeto y números de fragmento idénticos, puede elegir cuál usar tomando el número de secuencia más grande. Por razones de eficiencia, YAFFS2 también introduce el concepto de cabezales retráctiles. Por ejemplo, cuando se cambia el tamaño de un archivo a un tamaño más pequeño, YAFFS1 marcará todos los fragmentos afectados como sucios; YAFFS2 no puede hacer esto debido a la regla de "escribir una vez". YAFFS2 en su lugar escribe un "encabezado de reducción", que indica que un cierto número de páginas antes de ese punto no son válidas. Esto permite a YAFFS2 reconstruir el estado final del sistema de archivos cuando el sistema se reinicia.
YAFFS2 utiliza una definición más abstracta del flash NAND, lo que permite su uso con una variedad más amplia de piezas de flash con diferentes geometrías, reglas de manejo de bloques incorrectos, etc.
YAFFS2 luego agregó soporte para puntos de control , que omiten el escaneo de montaje normal, lo que permite tiempos de montaje muy rápidos. El rendimiento variará, pero se han informado tiempos de montaje de 3 segundos para 2 GB . [ cita requerida ]
Ver también
- Lista de sistemas de archivos
- JFFS
- JFFS2
- UBIFS
- LogFS
- NILFS , una nueva implementación de un sistema de archivos estructurado por registros
- Grupo de trabajo de interfaz flash NAND abierta
Referencias
- ^ Borrar un bloque de borrado flash establece todos sus bits en 1 y escribir un bloque de escritura (más pequeño que un bloque de borrado, pero posiblemente más grande que un bloque del sistema de archivos) establece los bits seleccionados en 0. Se podrían mantener una o dos escrituras más en el bloque si los bits que se escriben en 0 fueran previamente 1 en el bloque de escritura. Escribir un 0 en un bit que ya era 0 corría el riesgo de hacer que el 0 se "pegara", es decir, se podrían necesitar borrados múltiples para devolver el bit a un 1. [ cita requerida ] No hace falta decir que esta práctica de escritura múltiple no se probó generalmente y garantizado por los proveedores de flash y no puede funcionar en absoluto entecnologías flash queno sean SLC .
- ^ Jack B. Dennis; Guang R. Gao; y Vivek Sarkar. "Investigación colaborativa: modelos de programación y sistema de almacenamiento para computación de alto rendimiento con procesadores de muchos núcleos" . pag. 4
- ^ "Pruebas de rendimiento del sistema de archivos Flash Linux 3.1" .
- ^ "Notas de desarrollo y especificación de YAFFS 2" .
enlaces externos
- Página web oficial
- Presentamos YAFFS, el primer sistema de archivos flash específico de NAND
- Unyaffs : un programa sencillo para descomprimir imágenes YAFFS2.
- yaffs2utils : Utilidades para crear / extraer una imagen YAFFS2 en Linux.