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

13

Me gustaría saber cuál es la diferencia entre una llamada a la Biblioteca y una llamada al Sistema en Linux. Cualquier sugerencia para una buena comprensión de los conceptos detrás de ambos será muy apreciada.

Sen
fuente

Respuestas:

9

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.

Falmarri
fuente
Entonces, si alguien hace la pregunta anterior, puedo interpretarla como la diferencia entre una llamada al sistema y una llamada a la función.
Sen
"man ltrace" da mi "Un rastreador de llamadas de la biblioteca" :)
ysdx
8

Si escribe man mansu 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á chmoden la sección 2 del manual cuando escriba man chmod. Y fprintfen la sección 3.

uloBasEI
fuente
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.

LawrenceC
fuente
Las llamadas a la biblioteca no son manejadas necesariamente por una biblioteca dinámica. Las bibliotecas se pueden vincular estáticamente para que no se requiera importar (cargar).
jlliagre
Cierto. Agregué esa información.
LawrenceC
Solo la mitad ...
jlliagre
¿No debería funcionar en el archivo de solo cabeza y también ser parte de las llamadas a la biblioteca?
陳 力
1

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.

yasouser
fuente
1

Básicamente hay dos modos de Linux kernel viz.

  1. Modo de usuario,
  2. Modo kernel.

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

  1. fopen (): es una llamada a la biblioteca,
  2. open (): es una llamada al sistema.

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

  1. man man: aquí encontrará la sección de manual de 1-8 cada uno tiene un propósito específico.
  2. Hacer 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.
  3. 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.

alpha9eek
fuente
El kernel tiene solo un modo, el modo kernel. Los procesos de usuario tienen dos modos operativos que cambian de un lado a otro, userland y kernel.
jlliagre
1

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.

cout_display_name
fuente