¿A qué proceso se devuelve el resultado del kernel?

¿A qué proceso se devuelve el resultado del kernel?

Cuando un proceso requiere acciones que requieren el modo kernel, utiliza una llamada al sistema. Entonces, ¿cómo se devuelven los resultados al proceso?

Respuesta1

NOTA:TODA LA INFORMACIÓN A CONTINUACIÓN ES DEL SITIO REFERENCIADO


Deesteenlace, encontré la siguiente información.

Allamada al sistemaes una interfaz entre una aplicación de espacio de usuario y un servicio que proporciona el kernel. Debido a que el servicio se proporciona en el kernel, no se puede realizar una llamada directa; en su lugar, debe utilizar un proceso para cruzar el límite del espacio de usuario/kernel.

Usando la llamada al sistema

Veamos qué es necesario para usarlos desde una aplicación de espacio de usuario. Hay dos formas de utilizar nuevas llamadas al sistema del kernel. El primero es un método conveniente (no es algo que probablemente quieras hacer en el código de producción) y el segundo es el método tradicional que requiere un poco más de trabajo. Con el primer método, llamas a tus nuevas funciones identificadas por su índice a través de la función syscall. Con la función syscall, puede llamar a una llamada al sistema especificando su índice de llamada y un conjunto de argumentos. Por ejemplo, la breve aplicación que se muestra a continuación lo llama sys_getjiffiesusando su índice.

#include <linux/unistd.h>
#include <sys/syscall.h>

#define __NR_getjiffies     320

int main()
{
  long jiffies;

  jiffies = syscall( __NR_getjiffies );

  printf( "Current jiffies is %lx\n", jiffies );

  return 0;
}

Como puede ver, la función syscall incluye como primer argumento el índice de la tabla de llamadas al sistema a utilizar. Si hubiera que pasar algún argumento, se proporcionaría después del índice de llamada. La mayoría de las llamadas al sistema incluyen una constante simbólica SYS_ para especificar su asignación al _NRíndices. Por ejemplo, invocas el índice __NR_getpid con syscall como:

syscall( SYS_getpid )

La función syscall es específica de la arquitectura pero utiliza un mecanismo para transferir el control al kernel. El argumento se basa en un mapeo de _Índices NR a SYSsímbolos proporcionados por /usr/include/bits/syscall.h(definidos cuando se construye la libc). Nunca haga referencia a este archivo directamente; en su lugar utilice /usr/include/sys/syscall.h.

información relacionada