¿Qué es un sistema de archivos virtual, un sistema de archivos Linux?
Linux permite guardar muchos sistemas de archivos diferentes, como ext2, ext3, vfat, etc. Al utilizar el mismo conjunto de llamadas al sistema de E/S de archivos, cualquier archivo en Linux se puede manipular independientemente de su formato de sistema de archivos específico. Además, las operaciones con archivos se pueden realizar en todos los sistemas de archivos. Como se muestra en la Figura 1, podemos usar el comando cp para copiar datos del disco duro en el formato del sistema de archivos vfat al disco duro en el formato del sistema de archivos ext3. Y tal operación implica dos sistemas de archivos diferentes.
Figura 1. Operaciones de archivos entre sistemas de archivos
“Todo es un archivo” es uno de los conceptos básicos de Unix/Linux. En Unix/Linux, no sólo se consideran archivos los archivos normales, sino también los directorios, los dispositivos de caracteres, los dispositivos de bloque y los sockets. Aunque son tipos diferentes, proporcionan el mismo conjunto de interfaces operativas.
Figura 2. Todo es un archivo.
El sistema de archivos virtual es la clave para realizar las dos características de Linux anteriores. El sistema de archivos virtual (VFS) es una capa de software en el kernel de Linux que proporciona una interfaz de sistema de archivos para programas de espacio de usuario. Al mismo tiempo, también proporciona una función abstracta en el kernel que permite guardar diferentes sistemas de archivos. Todos los sistemas de archivos del sistema no solo dependen de VFS para el almacenamiento, sino que también dependen de VFS para trabajar juntos.
Para admitir varios sistemas de archivos prácticos, VFS define interfaces y estructuras de datos básicas y conceptuales compatibles con todos los sistemas de archivos. Al mismo tiempo, el sistema de archivos real también proporciona la interfaz abstracta y la estructura de datos esperada por VFS, y mantiene formalmente sus propios conceptos de archivos, directorios, etc., de acuerdo con la definición de VFS. En otras palabras, si un sistema de archivos real quiere ser compatible con Linux, debe proporcionar una interfaz compatible con VFS para poder funcionar con VFS. El sistema de archivos real oculta los detalles de implementación específicos bajo una interfaz y estructura de datos unificadas, por lo que todos los sistemas de archivos son iguales en la capa VFS y el resto del kernel. La Figura 3 muestra la cooperación entre VFS y el sistema de archivos real en el kernel.
Figura 3. La sinergia entre VFS y otros módulos del kernel en el kernel.
Ya sabemos que es precisamente gracias a la introducción de VFS en el kernel que se pueden realizar operaciones de archivos en todos los sistemas de archivos y se puede prometer el eslogan "todo es un archivo". ¿Y por qué se pueden lograr estas dos características mediante la introducción de VFS? A continuación, abordaremos el tema del artículo con esta idea: presentaremos brevemente algunas estructuras de datos utilizadas para describir el modelo VFS y resumiremos la relación entre estas estructuras de datos y luego seleccionaremos dos archivos representativos de E/S Operar sys_open(); y sys_read(), explica en detalle cómo el kernel usa VFS para interactuar con sistemas de archivos específicos, implementa operaciones de archivos entre sistemas de archivos y promete el lema "todo es un archivo".