Articulo de referencia

YAFFS

YAFFS ( Yet Another Flash File System ) es un sistema de archivos diseñado y escrito por Charles Manning para la empresa Aleph One. YAFFS1 fue la primera versión de este sistema...

YAFFS ( Yet Another Flash File System ) es un sistema de archivos diseñado y escrito por Charles Manning para la empresa Aleph One.

YAFFS1 fue la primera versión de este sistema de archivos y se diseñó para los chips NAND de la época, con un tamaño de página de 512 bytes (+ 16 bytes de área de reserva (OOB; fuera de banda)). El desarrollo comenzó en 2002 y se lanzó ese mismo año. El proyecto 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 aprovecha esto: las páginas sucias se marcan escribiendo en un byte de área de reserva específico. Los chips flash NAND más nuevos tienen páginas más grandes, las primeras páginas de 2K (+ 64 bytes OOB), luego de 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.

Diseñar un sistema de almacenamiento que imponga una "regla de escritura única" ("propiedad de escritura única") tiene varias ventajas. [ 2 ]

YAFFS2 se diseñó para dar cabida a estos chips más modernos. Se basó en el código fuente de YAFFS1, con la principal diferencia de que las estructuras internas no están fijas a un tamaño de 512 bytes, y se coloca un número de secuencia de bloque en cada página escrita. De esta forma, las páginas antiguas pueden sobrescribirse lógicamente sin infringir la regla de "escribir una sola vez". Se lanzó a finales de 2003.

YAFFS es un sistema de archivos robusto con estructura de registro que prioriza la integridad de los datos . Un objetivo secundario de YAFFS es el alto rendimiento. YAFFS suele 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 de propósito especial. Una variante, 'YAFFS/Direct', se utiliza en situaciones donde no hay sistema operativo, sistemas operativos embebidos o gestores de arranque: tiene el mismo sistema de archivos central, pero una interfaz más sencilla tanto para el código de nivel superior como para el de nivel inferior y el hardware de memoria flash NAND.

El código fuente de YAFFS está licenciado tanto bajo la GPL como bajo las licencias por producto disponibles en Aleph One.

YAFFS está bloqueado por partición a un alto nivel, lo que permite que solo un hilo escriba a la vez. [ 4 ]

YAFFS1

No existe ningún 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 que marca el quinto byte del área de reserva del bloque. Los bloques marcados de esta manera permanecen sin asignar a partir de ese momento.

Para escribir datos de archivo, YAFFS escribe inicialmente una página completa (fragmento en la terminología de 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 en el área de reserva. YAFFS mantiene una estructura de árbol en la RAM de la ubicación física de estos fragmentos. Cuando un fragmento deja de ser válido (el archivo se elimina o partes del archivo se sobrescriben), YAFFS marca un byte específico en el área de reserva del fragmento como "sucio". Cuando un bloque completo (32 páginas) se marca 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 páginas válidas en un nuevo bloque. Luego, YAFFS recupera el espacio utilizado por las páginas sucias dentro de cada uno de los bloques originales.

Cuando un sistema YAFFS monta un dispositivo de memoria flash NAND , debe recorrer cada bloque para comprobar si contiene datos válidos, escaneando su área de reserva. Con esta información, 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 de YAFFS2 admite los formatos de datos de YAFFS1 mediante retrocompatibilidad. La principal diferencia es que YAFFS2 necesita superar importantes obstáculos para cumplir con el requisito de "escritura única" de la memoria flash NAND moderna. [ 5 ]

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 a partir del número de secuencia del bloque y el desplazamiento del fragmento dentro del mismo. De este modo, cuando YAFFS2 escanea la memoria flash y detecta varios fragmentos con ObjectID y ChunkNumber idénticos, puede elegir cuál usar tomando el mayor número de secuencia. Por razones de eficiencia, YAFFS2 también introduce el concepto de encabezados de reducción. Por ejemplo, cuando se redimensiona un archivo a un tamaño menor, YAFFS1 marca todos los fragmentos afectados como modificados; YAFFS2 no puede hacer esto debido a la regla de "escritura única". En su lugar, YAFFS2 escribe un "encabezado de reducción", que indica que un cierto número de páginas anteriores a ese punto no son válidas. Esto permite a YAFFS2 reconstruir el estado final del sistema de archivos cuando se reinicia el sistema.

YAFFS2 utiliza una definición más abstracta de la memoria flash NAND, lo que permite su uso con una mayor variedad de componentes flash con diferentes geometrías, reglas de manejo de bloques defectuosos, etc.

Posteriormente, YAFFS2 añadió compatibilidad con puntos de control , lo que evita el escaneo normal de montaje y permite tiempos de montaje muy rápidos. El rendimiento puede variar, pero se han reportado tiempos de montaje de 3 segundos para 2 GB .

Véase también

Referencias

  1. Borrar un bloque de borrado flash establece todos sus bits a 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 bits seleccionados a 0. Se podrían realizar una o dos escrituras adicionales en el bloque si los bits que se escriben a 0 eran previamente 1 en el bloque de escritura. Escribir un 0 en un bit que ya era 0 conllevaba el riesgo de que el 0 se "quedara fijo", es decir, podrían ser necesarios varios borrados para que el bit volviera a ser 1.Huelga decir que esta práctica de escritura múltiple no fue probada ni garantizada por los fabricantes de memoria flash, y no funciona en absoluto entecnologías de memoria flash que no sean SLC .
  2. 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 multinúcleo" . pág. 4
  3. "Pruebas de rendimiento del sistema de archivos flash en Linux 3.1" .
  4. "Cómo funciona Yaffs | Yaffs: un sistema de archivos Flash para uso integrado" . yaffs.net . Consultado el 18 de marzo de 2024 .
  5. "Especificaciones y notas de desarrollo de YAFFS 2" .
  • http://www.yaffs.net/yaffs-history
  • Sitio web oficial
  • Presentamos YAFFS, el primer sistema de archivos flash específico para NAND.
  • Unyaffs : Un programa sencillo para descomprimir imágenes YAFFS2.
  • yaffs2utils : Utilidades para crear/extraer una imagen YAFFS2 en Linux.