Necesidad de algunas llamadas al sistema.

Necesidad de algunas llamadas al sistema.

Entiendo bastante bien cómo funciona la llamada al sistema y la necesidad de las llamadas al sistema en general. Sin embargo, no entiendo por qué algunas llamadas al sistema como el archivo create(), el archivo read() y close() deben ejecutarse solo en modo kernel.

Por ejemplo, en el archivo create () y read(), ¿por qué no puede suceder en el espacio de usuario o en el modo de usuario? ¿Cómo podría el usuario dañar el sistema al crear y leer un archivo? También tengo la misma duda en el caso de la llamada al sistema close().

Respuesta1

No entiendo por qué algunas llamadas al sistema como el archivo create(), el archivo read() y close() deben ejecutarse solo en modo kernel.

Bueno, las llamadas al sistema, por definición, se ejecutan en modo kernel. En el espacio de usuario, normalmente están disponibles a través de funciones contenedoras de biblioteca que tienen el mismo nombre. De man 2 intro:

Una llamada al sistema es un punto de entrada al kernel de Linux. Por lo general, las llamadas al sistema no se invocan directamente: en cambio, la mayoría de las llamadas al sistema tienen funciones contenedoras de biblioteca C correspondientes que realizan los pasos necesarios (por ejemplo, captura en modo kernel) para invocar la llamada al sistema. Por lo tanto, realizar una llamada al sistema tiene el mismo aspecto que invocar una función de biblioteca normal.

(ver también man 2 syscall)

Como dijeron @dirkt y @StephenKitt en los comentarios, las llamadas al sistema que mencionó deben ejecutarse en el espacio del kernel porque tienen que escribir en la tabla de descriptores de archivos, acceder a los controladores para E/S de archivos, verificar los derechos de acceso, etc.

Respuesta2

Por ejemplo, en create()un read()archivo, ¿por qué no puede suceder en el espacio de usuario?

En algunas plataformas (incluidas las basadas en Linux) es muy posible ejecutar el sistema de archivos IO desde el espacio del usuario. Se conoce como FUSE y puedes leerSistema de archivos en el espacio de usuariopara una introducción al tema.

Hay muchos sistemas de archivos basados ​​en FUSE disponibles, incluidosSSHFS(sistema de archivos terminado ssh) yS3QL(sistema de archivos en almacenamiento en la nube).

El kernel media la capa entre el cliente del espacio de usuario (un programa de aplicación) y la implementación de FUSE para que la semántica del sistema de archivos esté validada y sea consistente, pero el código IO real para creat(), open(), read(), write(), fcntl(), close()etc. se ejecuta desde un usuario. -servicio espacial.

información relacionada