Respuestas:
Realmente no existe tal cosa como una "llamada a la biblioteca". Puede llamar a una función que está vinculada a una biblioteca compartida. Y eso solo significa que la ruta de la biblioteca se busca en tiempo de ejecución para determinar la ubicación de la función a la que llamar.
Las llamadas al sistema son llamadas de kernel de bajo nivel manejadas por el kernel.
Si escribe man man
su shell, verá la lista de las secciones del manual
2 llamadas al sistema (funciones proporcionadas por el núcleo)
3 llamadas de biblioteca (funciones dentro de las bibliotecas de programas)
Por ejemplo, encontrará chmod
en la sección 2 del manual cuando escriba man chmod
. Y fprintf
en la sección 3.
Las llamadas del sistema son manejadas directamente por el núcleo.
Las llamadas a la biblioteca son manejadas por una biblioteca dinámica (o estáticamente vinculada). El programa que realiza la llamada a la biblioteca primero debe importar esa biblioteca, antes de que la llamada funcione. Las llamadas de la biblioteca pueden usar llamadas del sistema.
A veces, las bibliotecas se proporcionan como "front-end" para las llamadas al sistema, para proporcionar una funcionalidad adicional o facilidad de uso que no proporciona el núcleo.
Las llamadas al sistema son funciones que el sistema operativo proporciona para que las aplicaciones las usen. Mientras que funciones como las de math.h, string.h, etc. son aquellas que no tienen nada que ver con la interfaz con el sistema operativo.
Básicamente hay dos modos de Linux kernel viz.
Cualquier kernel de Linux se alterna entre estos dos modos. En general, las llamadas a la Biblioteca se ejecutan en modo Usuario y las llamadas al Sistema se ejecutan en modo Kernel . En términos del sistema operativo, el modo Kernel es de naturaleza atómica y está en modo de supervisión. Casi todas las llamadas a la Biblioteca necesitan ayuda del núcleo para realizar sus tareas. Cada llamada de biblioteca a su vez llama a la llamada del sistema subyacente. Hagamos una idea más clara usando el siguiente ejemplo
Siempre en el programa c, usa fopen () del archivo de encabezado. El entorno de programación llama al sistema call open () desde el kernel y realiza su tarea de abrir archivos. Nuevamente después de ejecutar, el flujo de control vuelve al modo de usuario.
Para ilustrar esto, realice las siguientes tareas
man man
: aquí encontrará la sección de manual de 1-8 cada uno tiene un propósito específico.man fopen
: verá respose como FOPEN(3)
, aquí 3 indica la sección manual 3 de páginas de manual que es la sección de llamadas de la biblioteca c.Hacer man open
: verá la respuesta como OPEN(2)
, aquí 2 indica la sección 2 del manual de las páginas man, que es la sección de llamadas del sistema.
Espero que hayas entendido el concepto.
Simplemente agregando a las diferencias mencionadas aquí en otras respuestas.
Como una llamada a la biblioteca es simplemente una llamada a una función, no se produce un cambio del espacio del usuario al espacio del núcleo. Por otro lado, una llamada al sistema da como resultado un cambio del espacio del usuario al espacio del kernel porque la llamada del sistema opera en modo kernel.