Diferencia entre llamadas al sistema y funciones de biblioteca

Respuestas:

19

Conceptualmente, una función de biblioteca es parte de su proceso.

En tiempo de ejecución, su código ejecutable y el código de cualquier biblioteca (como libc.so) de la que depende se vinculan en un solo proceso. Entonces, cuando llama a una función en dicha biblioteca, se ejecuta como parte de su proceso, con los mismos recursos y privilegios. Es la misma idea que llamar a una función que escribió usted mismo (con posibles excepciones como PLT y / o funciones de trampolín, que puede consultar si le importa).

Conceptualmente, una llamada al sistema es una interfaz especial utilizada para realizar una llamada desde su código (que generalmente no tiene privilegios) al núcleo (que tiene el derecho de escalar privilegios según sea necesario).


Por ejemplo, vea Linux man brk . Cuando un programa C llama mallocpara asignar memoria, llama a una función de biblioteca en glibc.

Si ya hay suficiente espacio para la asignación dentro del proceso , puede hacer cualquier gestión de almacenamiento dinámico necesaria y devolver la memoria al llamante.

Si no, glibc necesita solicitar más memoria del kernel: (probablemente) llama a la brkfunción glibc, que a su vez llama a brksyscall. Solo una vez que el control ha pasado al kernel, a través de syscall, se puede modificar el estado de la memoria virtual global para reservar más memoria y asignarla al espacio de direcciones de su proceso.

Inútil
fuente
11

Agregando a la respuesta 'Inútil': las
funciones de la biblioteca son más rápidas que las llamadas al sistema, y ​​por lo general no contienen consideraciones de permiso / seguridad, ya que se ejecutan con los privilegios del proceso y su memoria.

Las llamadas al sistema por otro lado, ya que se ejecutan en el kernel, tienen acceso a todo en el sistema, por lo que deben controlar lo que el proceso de llamada puede hacer cuando los llama (verifique que tenga los permisos para abrir un archivo, por ejemplo). ejemplo), además, dado que las llamadas al sistema están en el kernel, llamarlas requiere un cambio de contexto en la CPU, que es un proceso muy pesado en relación con solo llamar a una llamada de biblioteca.

Las llamadas al sistema generalmente se reflejan como el uso de la CPU del sistema en los programas de monitoreo.

Didi Kohen
fuente
0
  1. lib fun son compatibles con el compilador, mientras que syscall son compatibles con el sistema operativo
  2. Libcall es específico, mientras que syscall es genérico, como getc a lib fun solo puede acceder a un carácter a la vez, no cadena o palabra por palabra, pero abrir un syscall puede usarse para abrir archivos de texto, archivos binarios y muchos más tipos de archivos.
preestablecido
fuente
0

llamada a la biblioteca: invoca una subrutina vinculada a la aplicación (mediante la inclusión o adición de la biblioteca).

llamada al sistema: transfiere el control al sistema operativo (usuario-> sistema proc-> sistema operativo) y pone el procesador en modo privilegiado

Vedhas Deshpande
fuente