GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es la diferencia entre la llamada al sistema y la llamada a la biblioteca?

Mirando el comentario, déjame probar esto. Un servicio del sistema es un procedimiento que se ejecuta con privilegios elevados (normalmente en modo kernel). Todo lo demás es una llamada de biblioteca.

El hardware subyacente proporciona una puerta para que las aplicaciones del usuario ingresen al modo kernel. El sistema operativo protege esta puerta para la seguridad básica del sistema.

Haciendo un poco de simplificación aquí --- un método común utilizado por los procesadores es que el proceso desencadene explícitamente una excepción (Intel tiene un método SYSCALL alternativo).

Un sistema tendrá un conjunto de vectores de interrupción/excepción (procedimientos de puntero a controlador) para responder a excepciones o interrupciones (por ejemplo, fallo de página, división por cero). El sistema definirá un conjunto de vectores (normalmente los de número bajo) para excepciones e interrupciones de hardware. Sin embargo, por lo general dejan ranuras para que las use el sistema operativo.

Una instrucción algo así como:

   INT #12

Activará explícitamente una excepción e invocará el procedimiento número 12 en el vector. Un sistema podría permitirle simular una excepción de división por cero haciendo esto

Supongamos que el sistema operativo utiliza el vector 123 para los servicios del sistema.

   INT #123

llamaría a un servicio del sistema. Un sistema podría reservar un vector separado para cada servicio del sistema o podría usar uno y enviarlo.

Así que harías algo como esto:

  MOVL  #23, R0
  INT  #123

El valor 23 en el Registro 0 le dice al manejador de interrupciones que invoque el servicio del sistema #23.

Entonces puede ver que todo esto requiere lenguaje ensamblador. Lo que hace cada sistema operativo es crear un envoltorio que se puede llamar funciones similares desde lenguajes de alto nivel.

Esta es entonces la secuencia de lo que sucede:

  1. Un usuario llama al contenedor nombrado con parámetros normales. El contenedor configura los registros y la pila para el servicio del sistema.

  2. El contenedor desencadena la excepción que envía al servicio del sistema.

  3. El servicio del sistema tiene que comprobar TODOS los parámetros. Esta es una de las razones por las que los servicios del sistema tienen una sobrecarga elevada. Las excepciones en el modo kernel provocan pantallas azules de la muerte. Si el servicio del sistema necesita escribir en un búfer proporcionado por el usuario, debe asegurarse de que cada byte en el que escribe sea memoria grabable.

  4. El servicio del sistema hace lo que tiene que hacer.

  5. El servicio del sistema ejecuta una instrucción de hardware para regresar de una excepción o interrupción. Eso vuelve al modo de usuario y vuelve a la función contenedora.

  6. El contenedor puede desempaquetar los parámetros devueltos en los registros.

  7. El envoltorio vuelve a la persona que llama.


Las llamadas al kernel de bajo nivel que son manejadas por el kernel son las llamadas al sistema.

La página del manual dice:

2 Llamadas al sistema (funciones proporcionadas por el kernel)

3 Llamadas de biblioteca (funciones dentro de bibliotecas de programas)

Una imagen pictórica puede dejarlo claro:

y


Linux
  1. ¿La diferencia entre los comandos Halt y Shutdown?

  2. ¿La diferencia entre [[ $a ==Z* ]] y [ $a ==Z* ]?

  3. ¿La diferencia entre usuario y cuenta de servicio?

  4. ¿Cuál es la diferencia entre strtok_r y strtok_s en C?

  5. ¿Cuál es la diferencia entre una llamada de biblioteca y una llamada de sistema en Linux?

¿Cuál es la diferencia entre InnoDB y MyISAM?

¿Cuál es la diferencia entre Linux y Unix?

¿Cuál es la diferencia entre Shell de inicio de sesión y sin inicio de sesión?

¿Cuál es la diferencia entre el comando apt y apt-get?

¿Qué es un Hipervisor? ¿Cuál es la diferencia entre el tipo 1 y 2?

¿Cuál es la diferencia entre curl y Wget?