Sistema de archivos Toy OS

He desarrollado un núcleo básico en ensamblador / c que ejecuta un terminal básico. Lo he configurado para escapar de una iso con grub.

Me gustaría continuar con este sistema operativo, pero sin un sistema de archivos, siento que realmente no hay nada más que pueda hacer. Después de mucho tiempo en internet, no he encontrado nada que pueda hacer para implementar esto.

La gente ha dicho implementar FAT o hacer un VFS, pero nada más, ni tutoriales ni referencias a ningún lugar.

¿Alguien podría explicar cómo funciona un sistema de archivos, dónde puedo comenzar, dónde puedo conectar un sistema prefabricado y cómo usarlo?

Además, no tengo acceso a las bibliotecas estándar al comstackr mi sistema operativo. Uso gcc, nasm, ld y grub-mkrescue (para la imagen de disco). Yo uso qemu para la emulación.

EDITAR para hacer menos OT

¿Alguien puede describir, en detalle, cómo funciona un sistema de archivos, de modo que cuando veo las fonts de los sistemas de archivos que se han implementado, como FAT, puedo entender cómo aplicarlos a mi propio sistema operativo?

EDITAR – Más simple

Aún más fácil. ¿Cómo podría acceder directamente al disco duro? Mi kernel se ejecuta completamente en modo protegido, así que podría cambiar y escribir directamente en el disco duro. Un sistema de archivos podría implementarse con un archivo similar a este:

nombre especial char texto special char

es decir:

hola world.script 0x00 println “¡Hola mundo!” 0x00

Donde no necesitaría una segmentación especial, solo buscaría hasta encontrar el nombre del archivo y el carácter especial (algo que no se encuentra en una cadena como ‘\ 0’) y luego leer hasta encontrar el segundo carácter que no sea de cadena.

¿Habría una manera de acceder al disco duro al activar y desactivar el modo protegido o escribir un controlador de disco duro para implementar esto?

Primero, lea wikipage en sistemas de archivos para tener una visión amplia.

El recurso relevante sobre el desarrollo del sistema operativo es OSdev (pero quizás su pregunta no sea un tema aquí). Kernelnewbies también podría ayudar (explicando cómo está haciendo Linux). OSdev tiene wikipages que explican FAT y Ext2 en detalles.

Podrías diseñar un sistema operativo sin ningún archivo (pero alguna otra maquinaria de persistencia ). Ver esta respuesta Podría tener procesos persistentes (lea también sobre el punto de control de la aplicación , la recolección de basura , las continuaciones , la hibernación ).

Pero debería leer algunos buenos libros sobre sistemas operativos ( por ejemplo, de Tanenbaum ). Sea fluido con algunos SO de software libre existentes, por ejemplo, Linux (y POSIX), así que lea la Progtwigción Avanzada de Linux (al menos para entender muchos conceptos y obtener una buena terminología).

En mi humilde opinión, el FAT es un sistema de archivos tan feo e ineficiente que no vale la pena analizarlo (excepto por razones heredadas y de compatibilidad). Ext4 (ver aquí ) debería ser mejor y la wikipage en Ext2 tiene una buena imagen.

Puede adaptar alguna biblioteca que proporcione un sistema de archivos (por ejemplo, libext2 ) a su kernel.

Tal vez podría adaptar sqlite para trabajar en una partición de disco en bruto.

Es posible que tenga una noción de archivo que no es como MSDOS (o Windows) o POSIX o archivos. Por ejemplo, podría ser una secuencia de registros de tamaño fijo (por ejemplo, de 1Kbyte), no una secuencia de bytes.

Puede organizar su sistema operativo como un microkernel y tener sistemas de archivos dados por el código de la aplicación. Mira en VSTa y HURD .

Por supuesto, necesita un controlador de disco, que recupera / escribe bloques (de 4Kbytes) de su unidad (la E / S del disco es siempre por bloques o sectores de disco . Los discos pequeños viejos tenían bloques de 512 bytes. Los discos grandes nuevos tienen discos de 4Kbytes, vea avanzado formato ). Debe ser impulsado por interrupciones y utiliza DMA . Necesita un progtwigdor de tareas. AFAIU, no usará el BIOS para esto (quizás el UEFI ); debe comprender cómo funciona el hardware común ( SATA y AHCI ).

Debería publicar ( ¡hoy! ) Su SO de juguete como software libre (por ejemplo, bajo GPLv3 + en github ) para obtener comentarios y contribuciones.

Puede copiar (si las licencias son compatibles) el código existente de otros sistemas operativos de software libre , y ciertamente estudiará su código fuente para entender las cosas.

Así que codifique un progtwigdor de tareas, un controlador de fallas de página , una memoria virtual , luego agregue IO de disco impulsado por interrupciones y un código de sistema de archivos por encima de eso. Entonces empezará a comprender que un sistema operativo no puede ser un juguete pequeño … Podría considerar un enfoque de microkernel o exokernel .

Sería más sencillo utilizar un sistema de archivos de código abierto existente si los términos de la licencia se adaptan a sus necesidades. ELM FatFs es una de esas bibliotecas, sin restricciones de uso. Solo necesita proporcionar la capa de interfaz de control del dispositivo utilizando los apéndices y ejemplos proporcionados.