En general, ¿cómo sé si mi proyecto necesita un sistema de archivos? [cerrado]

Esta pregunta brinda una buena descripción general de alto nivel sobre cuándo un sistema operativo es apropiado en una plataforma integrada. Los tres temas mencionados son los requisitos de red, los requisitos de GUI y los requisitos del sistema de archivos.

Las redes y las GUI son bastante obvias, pero me pregunto cuándo un sistema de archivos es apropiado y/o requerido para un sistema integrado. ¿Qué tipo de tareas integradas se prestan a una solución de sistema de archivos?

¿Tal vez algo así como una aplicación de recopilación de datos, donde las mediciones anteriores o los archivos de registro deben almacenarse para futuras referencias?

¿Algo que se ocupe de más de una cosa que contenga datos que desee conservar? Básicamente, cualquier cosa en la que imagine que los datos se organizan en (¡plural!) archivos.
Cuando la molestia de almacenar y recuperar los datos que necesita directamente en flash (o lo que sea) supera la molestia de incorporar un sistema de archivos.

Respuestas (4)

Las situaciones más obvias en las que encuentro deseable un sistema de archivos:

  1. Siempre que tenga que intercambiar datos con un sistema externo (por ejemplo, un PC). Definitivamente, un sistema de archivos FAT es la solución más fácil cuando se usa una tarjeta SD o una memoria USB (ejemplo: registrador de datos, preparación de archivos de configuración en una PC).

  2. Utiliza almacenamiento NAND. Necesita un sistema de archivos que sea compatible con NAND, porque todos los chips NAND tienen sectores defectuosos y el sistema de archivos tiene que solucionarlos.

Los sistemas operativos abstraen cosas para que diferentes aplicaciones en la misma máquina no necesiten preocuparse unas de otras.

Los sistemas de archivos siguen la misma lógica. Si necesita almacenamiento para múltiples componentes independientes que no deberían necesitar coordinar el uso de recursos entre sí, necesita un componente de mediación, que sería un sistema de archivos.

Esto puede ser una asignación genérica de una clave principal (posiblemente jerárquica) a un único blob de datos de longitud arbitraria, como la mayoría de los sistemas de archivos, o puede contener características adicionales como secuencias secundarias, índices (por ejemplo, búsqueda de artistas en carpetas MP3), un registro formato como en Palm OS, ...

Trabajé en un proyecto de recolección remota de datos. Si bien se suponía que el sistema estaba permanentemente conectado a través de RF, tuvimos que manejar el caso en el que la RF, Internet no funcionaba o cualquier otra razón por la que no se pudieran enviar los datos, ya que no podíamos permitirnos perderlos.

En ese momento estábamos usando un RTOS con un sistema de archivos Fat en una tarjeta PIC24 y SD. Desafortunadamente, esto no era confiable, ya que en caso de pérdida de energía, podría dañarse el sistema de archivos.

Además, FAT es bastante complejo de manejar con uC, especialmente cuando comienzas a tener muchos archivos.

Nuestra solución al final fue escribir datos en bruto en la tarjeta SD con el sector de escritura/lectura almacenado en los primeros 10 sectores de la SD con aleatorización para evitar el desgaste del flash.

La desventaja fue que tuvimos que usar un software especial en modo administrador para leer los datos de una computadora, aunque era mucho más confiable que un sistema de archivos Fat, y también mucho más fácil de manejar en el PIC.

Mirando hacia atrás, probablemente ahora usaría un Linux incorporado para manejar esto en lugar de un PIC, ya que ahorra mucho tiempo y dolor de cabeza. La conectividad también es mucho más fácil de manejar en un Linux que en un uC, la desventaja de Linux es el costo, el consumo de energía, el tiempo de arranque y la latencia de E/S, según lo que haga.

La única vez que necesita un sistema de archivos es cuando tiene un requisito que lo menciona, como "el sistema debe proporcionar al usuario tal o cual archivo" o "la configuración del sistema debe almacenarse en un archivo de configuración".

En todos los demás casos, un sistema de archivos es un compromiso entre la complejidad y la conveniencia del software. Los sistemas de archivos le permiten almacenar datos sin ocuparse de detalles de bajo nivel, son fácilmente escalables y (si elige un sistema de archivos compatible) facilitan mucho el intercambio de datos.

A veces, no puede permitirse la complejidad porque su plataforma de destino es muy limitada en términos de memoria y/o rendimiento. A veces, la complejidad se interpone en el camino para lograr la confiabilidad deseada (como en un dispositivo que se puede apagar en cualquier momento pero que no tolera la pérdida de datos). En estos casos se debe considerar trabajar con registros de datos fijos en lugar de archivos.

Si puede permitirse la complejidad y necesita (o prevé que pueda necesitar) flexibilidad, abstracción o compatibilidad, usar un sistema de archivos es una buena idea.