Rutinas de servicio del kernel de Linux e interfaz de llamada al sistema

  
1. Generación de rutinas de llamada al sistema con macros Las aplicaciones de lenguaje de alto nivel generalmente no tienen acceso directo a las funciones del kernel. Sin embargo, siempre hay algunos usuarios avanzados que necesitan acceder a las funciones del kernel. Si permite que los usuarios escriban programas en lenguaje ensamblador para lograr el atrapamiento del kernel, es obviamente inapropiado porque no es seguro ni cumple con la intención original de configurar el sistema operativo. Los usuarios proporcionan un programa amigable para configurar una plataforma de jugo. Como las rutinas de llamadas del sistema utilizadas para encapsular las rutinas de servicio del kernel tienen un marco fijo, para simplificar el empaquetado de las rutinas de servicio del kernel, Linux define seis macros de _sysca110 ~ _sysca115 que los usuarios avanzados pueden usar. Envuelva las rutinas de servicio del kernel requeridas como rutinas de llamadas del sistema. Los números después de los nombres de las seis macros anteriores indican el número de parámetros (excepto el número de llamada del sistema) que puede ser utilizado por la rutina de servicio del kernel encapsulado. Cuando las macros anteriores encapsulan las rutinas de servicio del kernel, Linux especifica que la cantidad de parámetros pasados ​​a la macro debería ser el doble de la cantidad de parámetros requeridos por la rutina de servicio del kernel más 2, es decir, 2 (n + 1), donde ″ Es el número de parámetros llamados por el sistema. En otras palabras Para cada parámetro de la rutina de servicio del núcleo, se deben usar dos parámetros en la macro: un nombre para indicar el parámetro y un tipo para indicar el parámetro. También se agregan dos parámetros para expresar el nombre y el tipo del valor de retorno de la llamada del sistema. Por ejemplo, cuando usa una macro para encapsular la rutina de servicio del kernel write (), debería llamar a la macro syscall3 en el siguiente formato: _syscall3 (int, write, int, fd, cONst char *, buf, unsingnde int, count) donde: int Y wrlte son el tipo y el nombre del valor de retorno; int y fd son el tipo y el nombre del parámetro fd; const char * y buf son el tipo y el nombre del parámetro buf; unsigned lnt y count son el tipo y el nombre del parámetro count. 2. Interfaz de llamadas al sistema En general, como un sistema operativo bien establecido, no permitirá que la aplicación del usuario use el nombre de forma directa. La forma svsxyz () del sistema usa rutinas para llamar rutinas de servicio del kernel. Por lo tanto, generalmente es necesario proporcionar una interfaz común con la función normal en el lenguaje de alto nivel por encima de la rutina de llamadas del sistema, de modo que el usuario se sienta tan cómodo como usar la función normal cuando usa el servicio del sistema a través de esta interfaz.
Copyright © Conocimiento de Windows All Rights Reserved