Traductor de Hurd

Un traductor  es cualquier servidor que se ejecuta en el sistema operativo Hurd y proporciona una interfaz de sistema de archivos básica. Hurd OS le permite instalar el traductor en cualquier archivo o directorio al que el usuario que instala el traductor tenga derechos de acceso. Objetos del sistema de archivos traducidos: los inodos son un cruce entre los enlaces simbólicos y los puntos de montaje, que se conocen en los sistemas operativos similares a Unix .

Una descripción general del sistema de archivos normal en un sistema operativo similar a Unix

Antes de intentar averiguar qué es un traductor, debe familiarizarse con lo que es un sistema de archivos normal (FS). El sistema de archivos es un conjunto de directorios y archivos construidos jerárquicamente .

Para acceder a cualquier archivo, se utiliza una cadena de texto, que no es más que una ruta al archivo. Además, existe una tecnología para crear y usar enlaces simbólicos , que le permiten acceder a un solo archivo desde directorios ubicados en diferentes lugares en el árbol de directorios jerárquico a través de ellos mismos, también es posible crear enlaces duros , que le permiten asignar varios nombres a un solo archivo a la vez. También hay archivos de dispositivos especiales para comunicarse con los controladores de dispositivos ubicados en el kernel, y también hay directorios que sirven como puntos de montaje para las particiones del disco duro y otros dispositivos de almacenamiento. Y también existen archivos pertenecientes al tipo FIFO .

Aunque estos objetos difieren entre sí, todos tienen propiedades comunes, por ejemplo, todos tienen un propietario y un grupo al que están asociados, así como los permisos apropiados ( permisos ). Toda esta información se almacena en un archivo especial, indicado por el término - inodo ( inodo ). Esta es una propiedad común de los objetos del sistema de archivos : cada objeto tiene un inodo asociado ( los enlaces duros son inusuales en este sentido, porque el conjunto de enlaces duros asociados con un archivo comparte el mismo inodo). A veces, un inodo contiene entradas adicionales. Por ejemplo, un inodo puede contener la ruta a un archivo al que apunta un enlace simbólico .

Sin embargo, estas propiedades comunes no suelen utilizarse directamente en los programas debido a que existen interfaces de programación abstractas para ello . Se puede acceder a cualquier inodo llamando a funciones POSIX como las funciones read() y write() . Por ejemplo, para agregar soporte para nuevos tipos de objetos en el FS (por ejemplo, un nuevo tipo de enlaces) a un núcleo unix monolítico regular , tendrá que volver a escribir los códigos fuente por separado para cada tipo de sistema de archivos utilizado.

En el sistema Hurd, todo es diferente. Aunque un servidor de sistema de archivos especial en el sistema Hurd puede funcionar con propiedades especiales de tipos de objetos estándar, como enlaces (con "vínculos rápidos" ( fast links ) en el sistema de archivos ext2 , por ejemplo), el kernel del sistema Hurd tiene un genérico interfaz que le permite agregar nuevas funciones al sistema sin tener que recurrir a modificar los textos fuente del sistema.

El truco consiste en colocar el programa de traducción entre el contenido real del archivo de traducción y el programa del usuario y, en consecuencia, el usuario que accede al archivo. Este programa de retransmisión se denomina traductor porque es capaz de procesar solicitudes entrantes de diversas formas. En otras palabras, un traductor es un servidor que se ejecuta en el sistema Hurd y proporciona una interfaz de sistema de archivos básica.

Los traductores tienen propiedades interesantes. Desde el punto de vista del kernel, son solo procesos de usuario. Esto significa que los traductores pueden ser ejecutados por cualquier usuario. El usuario no necesita privilegios de superusuario para instalar o modificar el traductor, todo lo que se requiere son derechos de acceso al inodo (archivo) que se está traduciendo. Muchos traductores no requieren archivos para traducir y trabajar, pueden brindar información generada por ellos mismos. Es por eso que la información del traductor se almacena en inodos.

Los traductores deben participar en todas las operaciones del sistema de archivos que afectan los inodos que traducen. Debido a que no se limitan a la lista de objetos FS ordinarios ( archivos de dispositivos , enlaces, etc.), pueden devolver datos que el desarrollador considere necesarios como resultado de su trabajo. Puede pensar en un traductor que se comporta como un directorio cuando se accede con ls o cd , y al mismo tiempo se comporta como un archivo cuando se accede con cat .

Ejemplos

Puntos de montaje

El punto de montaje se puede considerar como una especie de inodo traducido por un servidor especial. Su propósito es traducir las operaciones del sistema de archivos a un punto de montaje que pertenece a otro sistema de archivos, por ejemplo, a otra partición de disco.

De hecho, así es como se implementa el sistema de archivos en Hurd OS. El sistema de archivos es un traductor. Este traductor toma algún dispositivo de almacenamiento como argumento y es capaz de manejar las operaciones del sistema de archivos de una manera completamente transparente.

Archivos de dispositivo

Hay muchos archivos de dispositivos diferentes, y en sistemas con un kernel monolítico, todos funcionan gracias al soporte del kernel. En el sistema Hurd, todos los archivos de dispositivos son compatibles con traductores. El mismo traductor puede admitir muchos archivos de dispositivos similares, como todas las particiones de disco. Por lo tanto, el número de traductores necesarios es bastante pequeño. Tenga en cuenta, sin embargo, que se ejecuta una tarea de traducción independiente para acceder a cada archivo de dispositivo. Pero debido a que Hurd es un verdadero sistema multitarea, no tiene muchos gastos generales.

Cuando se necesita acceso al hardware de la computadora, el traductor generalmente comienza a hablar con el kernel para obtener datos de los dispositivos. Sin embargo, si no se requiere acceso a los dispositivos de hardware, no es necesario acceder al kernel del sistema. Por ejemplo, el dispositivo /dev/zero no requiere acceso al hardware y puede implementarse completamente en el espacio de ejecución del programa del usuario.

Enlaces simbólicos

Un enlace simbólico también puede considerarse como un traductor. Un intento de acceder a un enlace simbólico activará el traductor correspondiente, que pasará las solicitudes entrantes al sistema de archivos que contiene el archivo al que apunta este enlace.

Sin embargo, en aras de un mejor rendimiento, los sistemas de archivos que tienen soporte nativo para enlaces simbólicos pueden usar esta característica para implementar el mecanismo de enlace de manera diferente, internamente, y por lo tanto el acceso a través de un enlace simbólico no iniciará un proceso de traducción por separado. Sin embargo, esto seguirá pareciendo una llamada a un traductor pasivo para el usuario (consulte a continuación para obtener una explicación de lo que es un traductor pasivo).

El sistema Hurd trae consigo un traductor de enlaces simbólicos , lo que significa que cualquier servidor para trabajar con varios tipos de sistemas de archivos (ext2, etc.) que tiene soporte para trabajar a través de traductores obtiene automáticamente la capacidad de trabajar con enlaces simbólicos (tanto enlaces firmes como archivos de dispositivos). etc.). Esto significa que puede acceder rápidamente a los archivos y agregar soporte para enlaces simbólicos y otras funciones a través del propio servidor más adelante.

Traductores pasivos, traductores activos

Hay dos tipos de traductores: pasivos y activos. Estos son realmente dos tipos diferentes de traductores, por lo que no es recomendable confundirlos entre sí, pero los dos tipos de programas interactúan.

Traductores activos

Un traductor activo es un proceso de traducción en ejecución, como se describe anteriormente. Puede configurar o eliminar el traductor activo usando el comando settrans -a . La opción -a es necesaria para decirle a settrans que el traductor activo necesita ser modificado.

El comando settrans puede tomar tres tipos de argumentos. Primero, puede configurar opciones para el comando settrans en sí , como el interruptor -a para modificar el traductor activo. Luego debe especificar el inodo que se modificará. Recuerde que un traductor siempre está asociado a un inodo ubicado en un árbol de directorios y archivos. Solo puede modificar un inodo a la vez. Si no se envían más argumentos a settrans , intentará eliminar el traductor existente. El cuidado con el que elimina el traductor depende de la opción de eliminación forzada especificada (si algún proceso está utilizando el traductor, habrá un mensaje de error de "dispositivo o recurso ocupado" , a menos que el traductor se descargue por fuerza bruta).

Pero si se especifican argumentos adicionales, se interpretarán como una línea de comando para iniciar el traductor. Esto significa que el siguiente argumento es el nombre del traductor ejecutable. Todos los argumentos posteriores son opciones para el propio traductor, no para el comando settrans.

Por ejemplo, para montar una partición ext2fs, puede ejecutar settrans -a -c /mnt /hurd/ext2fs /dev/hd2s5 . La opción -c creará un nuevo punto de montaje si aún no existe. Por cierto, el punto de montaje no tiene que ser un directorio. Para volver a desmontarlo, debe ejecutar el comando settrans -a /mnt .

Traductores pasivos

El traductor pasivo se instala y modifica con la misma sintaxis que el traductor activo (pero sin el interruptor -a ), es decir, todo lo dicho anteriormente se aplica a los traductores pasivos en su totalidad. Sin embargo, hay diferencias: los traductores pasivos no comienzan de inmediato.

Esto tiene sentido porque eso es exactamente lo que generalmente se requiere. No es necesario montar una partición de disco, a menos que se esté accediendo a los archivos de esa partición. No es necesario activar la interfaz de red y la red, a menos que haya intercambio de datos a través de canales de comunicación, etc.

En cambio, cuando se invoca un traductor pasivo, se lee automáticamente desde el inodo y se ejecuta como un traductor activo, utilizando comandos de la línea de comandos almacenados en el inodo. Esto es similar a cómo está diseñado y funciona el montador automático de Linux . Sin embargo, esto no es una bonificación adicional que deba instalar usted mismo, sino una parte integral del sistema. Por lo tanto, instalar un traductor pasivo retrasa el lanzamiento y la ejecución del traductor hasta el momento en que realmente se necesita. Además, si un traductor activo lanzado a través de un traductor pasivo muere por alguna razón, la próxima vez que se acceda al inodo correspondiente, el traductor se lanzará nuevamente.

Hay aún más diferencias: un traductor activo puede morir o perderse. Una vez que finaliza el proceso en ejecución de un traductor activo (por ejemplo, porque se reinició la computadora ), se perderá irremediablemente. Los traductores pasivos no se descargan y permanecen en el inodo durante el reinicio exactamente hasta que se modifican con el programa settrans o hasta que se elimina el inodo al que están conectados. Esto significa que no es necesario tener un archivo de configuración con datos de puntos de montaje en el sistema.

Y una cosa más: si ya tiene instalado un traductor pasivo, aún puede instalar otro traductor activo. Solo si el traductor se inició automáticamente y no había ningún proceso de traductor activo ejecutándose cuando se accedió al inodo, solo entonces se invoca al traductor pasivo.

Gestión de traductores

Como se discutió anteriormente, puede usar el comando settrans para configurar traductores pasivos y activos. Hay muchas opciones para cambiar el comportamiento del comando settrans en caso de que algo salga mal y para definir lo que debería hacer. Aquí hay ejemplos del uso común de este comando:

Monta una partición de disco, el traductor se guardará después de reiniciar.

Monta el sistema de archivos dentro del archivo de datos, el traductor desaparecerá si muere o después de reiniciar la computadora.

Hace que el traductor se apague.

También puede usar el comando showtrans para ver si un traductor está adjunto a un inodo o no. Sin embargo, este comando solo mostrará información sobre traductores pasivos.

También puede cambiar las opciones para el modo de operación del traductor activo (sistema de archivos) usando el comando fsysopts sin recargar el traductor. Es muy cómodo. Por ejemplo, puede hacer lo que Linux llama "volver a montar una partición de solo lectura" simplemente emitiendo el comando fsysopts /mntpoint --readonly . Si puede, el traductor activo en ejecución cambiará su comportamiento de acuerdo con la solicitud que reciba. El comando fsysopts /mntpoint , llamado sin opciones, muestra la configuración actual.

Enlaces