OS_FILESSYSTEM: un sistema de archivos virtual (C ++)
Introducción
Este es un sistema de archivos virtual que imita a Linux. El sistema está alojado por un archivo de disco virtual. Simula la lectura y la escritura del disco con lectura y escritura de archivos sin involucrar al controlador subyacente.
Para escribir un sistema de archivos Linux de imitación simple, primero debe diseñar un marco básico que incluya inodo, bloque, superbloque, diseño de disco virtual, asignación de espacio y otra información. El comienzo del sistema de archivos es un superbloque que contiene información importante sobre el sistema, incluido el número y el tamaño del inodo y los bloques. Para Inode, generalmente necesita ocupar el uno por ciento del espacio en el disco, pero este es un sistema pequeño con un tamaño total de solo 5 m, por lo que hay muy poco espacio asignado al área de inodo, y la mayor parte del espacio restante es el área de bloque.
El plan general para este sistema de archivos es el siguiente:

Debido a que el tiempo es apretado al escribir el programa, solo lo escribí durante 4 días antes de aceptarlo, por lo que el código no tuvo tiempo de optimizarlo, y algunos lugares parecerán redundantes, así que no se sorprenda.
Aunque el tiempo es limitado, también implementa la función de un editor VI. La escritura es relativamente simple y el código es muy desordenado. Si tienes tiempo para mejorarlo.
En general, el código aún debe ser optimizado. Bienvenido a dar más sugerencias y encontrar más fallas.
Cómo usar
Paso 1: Descargue el proyecto
git clone https://github.com/windcode/os_filesystem.git
Paso 2: Abra el proyecto con VC ++ 6.0
Haga doble clic en el archivo mingos.dsw en el directorio, o arrastre el archivo a la interfaz VC ++ 6.0.
Paso 3: compilar, enlace, ejecutar

o
Paso 1: Ejecute el archivo mingos.exe directamente en la carpeta /depuración
característica
- Primera ejecución, cree archivos de disco virtual

- Inicie sesión en el sistema
El usuario predeterminado es root y la contraseña es root


- Usuario agregar, eliminar, iniciar sesión, iniciar sesión (UserAdd, UserDel, inicio de sesión)

- Modificar permisos de archivo o directorio (CHMOD)

- Escribir y leer están restringidos por permisos

- Agregar y eliminar archivos/carpetas (touch, rm, mkdir, rmdir)

- Ver información del sistema (super, inode, bloque)

- Imitar un editor de texto VI (vi)

Inode administra información de archivo y directorio
Use el método de enlace de grupo para administrar la asignación de bloques inactivos
- Proceso de asignación de bloques: cuando se debe asignar un bloque, la parte superior de la pila de bloque libre saca una dirección de bloque inactiva como el bloque recién asignado. Cuando la pila está vacía, la pila en el bloque libre representada por la dirección de la pila inferior se usa como la nueva pila de bloque libre.
- Proceso de reciclaje de bloque: al reciclar un bloque, verifique si la pila está llena. Si no está satisfecho, el puntero de la pila actual se moverá hacia arriba y la dirección de bloque para reciclar se coloca en la parte superior de la nueva pila. Si la pila está llena, el bloque a reciclar se utilizará como la nueva pila de bloques libres, y la dirección del elemento inferior de esta pila de bloque libre se establece en la pila de bloques libres en el momento.
- El mapa de bits de bloque y el superblock deben actualizarse mientras se asignan y reciclaje.
Distribución/reciclaje de inodo
- La asignación y el reciclaje de inodo es relativamente simple, y se adoptan la asignación y reciclaje secuencial.
- Cuando se requiere una asignación, busque un inodo inactivo desde el mapa de bits de inodo en orden y encuentre el número que devuelve el inodo con éxito.
- Al reciclar, simplemente actualice el mapa de bits inode.
- Tanto la asignación como el reciclaje requieren la actualización del mapa de bits inode.
Aviso
- El entorno en ejecución es VC ++ 6.0