He respondido esta pregunta, pero no entiendo la diferencia entre las llamadas al sistema y las funciones de la biblioteca. Conceptualmente, ¿cuál es la diferencia entre los dos?
He respondido esta pregunta, pero no entiendo la diferencia entre las llamadas al sistema y las funciones de la biblioteca. Conceptualmente, ¿cuál es la diferencia entre los dos?
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 malloc
para 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 brk
función glibc, que a su vez llama a brk
syscall. 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.
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.
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