Quelle est la différence entre un appel de bibliothèque et un appel système sous Linux?

13

Je voudrais savoir quelle est la différence entre un appel Library et un appel System sous Linux. Tous les conseils pour une bonne compréhension des concepts derrière les deux seront grandement appréciés.

Sen
la source

Réponses:

9

Il n'y a pas vraiment un "appel de bibliothèque". Vous pouvez appeler une fonction liée à une bibliothèque partagée. Et cela signifie simplement que le chemin de la bibliothèque est recherché au moment de l'exécution pour déterminer l'emplacement de la fonction à appeler.

Les appels système sont des appels de noyau de bas niveau gérés par le noyau.

Falmarri
la source
Donc, si quelqu'un pose la question ci-dessus, je peux l'interpréter comme la différence entre un appel système et un appel de fonction.
Sen
"man ltrace" donne mon "Un traceur d'appel de bibliothèque" :)
ysdx
8

Si vous tapez man mandans votre shell, vous verrez la liste des sections manuelles

2 Appels système (fonctions fournies par le noyau)

3 appels de bibliothèque (fonctions dans les bibliothèques de programme)

Par exemple, vous trouverez chmoddans la section 2 du manuel lors de la frappe man chmod. Et fprintfdans la section 3.

uloBasEI
la source
3

Les appels système sont gérés directement par le noyau.

Les appels de bibliothèque sont gérés par une bibliothèque dynamique (ou liée statiquement). Le programme appelant la bibliothèque doit d'abord importer cette bibliothèque, avant que l'appel ne fonctionne. Les appels de bibliothèque eux-mêmes peuvent utiliser des appels système.

Parfois, les bibliothèques sont fournies comme "frontaux" aux appels système, pour fournir des fonctionnalités supplémentaires ou une facilité d'utilisation non fournie par le noyau.

LawrenceC
la source
Les appels de bibliothèque ne sont pas nécessairement gérés par une bibliothèque dynamique. Les bibliothèques peuvent être liées statiquement, donc aucune importation (chargement) n'est requise.
jlliagre
Vrai. J'ai ajouté cette information.
LawrenceC
Seulement la moitié ...
jlliagre
ne devrait pas fonctionner dans le fichier head only également faire partie des appels de bibliothèque?
陳 力
1

Les appels système sont des fonctions que le système d'exploitation fournit aux applications à utiliser. Alors que les fonctions comme celles de math.h, string.h, etc. sont celles qui n'ont rien à voir avec l'interfaçage avec le système d'exploitation.

yasouser
la source
1

Fondamentalement, il existe deux modes de visualisation du noyau Linux.

  1. Mode utilisateur,
  2. Mode noyau.

Tout noyau Linux bascule entre ces deux modes. Généralement, les appels de bibliothèque sont exécutés en mode utilisateur et les appels système sont exécutés en mode noyau . En termes de système d'exploitation, le mode noyau est de nature atomique et son en mode Supervision. Presque tous les appels de bibliothèque ont besoin de l'aide du noyau pour effectuer ses tâches. Chaque appel de bibliothèque appelle à son tour l'appel système sous-jacent. Rendons l'idée plus claire en utilisant l'exemple suivant

  1. fopen (): est un appel de bibliothèque,
  2. open (): est un appel système.

Chaque fois que dans le programme c, vous utilisez fopen () du fichier d'en-tête. L'environnement de programmation appelle l'appel système open () à partir du noyau et effectue sa tâche d'ouverture de fichier. Encore une fois après l'exécution, le flux de contrôle revient en mode utilisateur.

Pour illustrer cela, effectuez les tâches suivantes

  1. man man: vous trouverez ici une section du manuel de 1 à 8 chacune ayant un objectif spécifique.
  2. À faire man fopen: vous verrez une réponse comme FOPEN(3), ici 3 indique la section manuelle 3 des pages de manuel qui est la section des appels de c-library.
  3. À faire man open: vous verrez une réponse comme OPEN(2), ici 2 indique la section manuelle 2 des pages de manuel qui est la section des appels système.

    J'espère que vous avez compris le concept.

alpha9eek
la source
Le noyau n'a qu'un seul mode, le mode noyau. Les processus utilisateur ont deux modes de fonctionnement qu'ils basculent d'avant en arrière, l'espace utilisateur et le noyau.
jlliagre
1

Ajoutant simplement aux différences mentionnées ici dans d'autres réponses.

Puisqu'un appel de bibliothèque est simplement un appel de fonction, aucun passage de l'espace utilisateur à l'espace noyau ne se produit. D'un autre côté, un appel système entraîne un basculement de l'espace utilisateur vers l'espace noyau car l'appel système fonctionne en mode noyau.

cout_display_name
la source