GNU/Linux >> Tutoriels Linux >  >> Linux

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

En regardant le commentaire, laissez-moi essayer ceci. Un service système est une procédure qui s'exécute avec des privilèges élevés (généralement en mode noyau). Tout le reste est un appel à la bibliothèque.

Le matériel sous-jacent fournit une porte permettant aux applications utilisateur d'entrer en mode noyau. Le système d'exploitation protège cette porte pour la sécurité de base du système.

Faire un peu de simplification ici --- une méthode courante utilisée par les processeurs est que le processus déclenche explicitement une exception (Intel a une autre méthode SYSCALL).

Un système aura un ensemble de vecteurs d'interruption/exception (pointeur vers des procédures de gestionnaire) pour répondre à une exception ou à des interruptions (par exemple, défaut de page, division par zéro). Le système définira un ensemble de vecteurs (généralement des vecteurs à faible numéro) pour les exceptions matérielles et les interruptions. Cependant, ils laissent généralement des emplacements au système d'exploitation à utiliser.

Une instruction quelque chose comme :

   INT #12

Déclenchera explicitement une exception et invoquera la 12ème procédure dans le vecteur. Un système peut vous permettre de simuler une exception de division par zéro en faisant cela

Supposons que le système d'exploitation utilise le vecteur 123 pour les services système.

   INT #123

appellerait un service système. Un système peut réserver un vecteur distinct pour chaque service système ou il peut en utiliser un et le répartir.

Vous feriez donc quelque chose comme ceci :

  MOVL  #23, R0
  INT  #123

La valeur 23 dans le registre 0 indique au gestionnaire d'interruptions d'invoquer le service système #23.

Vous pouvez donc voir que tout cela nécessite un langage d'assemblage. Ce que fait chaque système d'exploitation, c'est créer un wrapper qui peut être appelé comme des fonctions de langages de haut niveau.

Voici alors la séquence de ce qui se passe :

  1. Un utilisateur appelle le wrapper nommé avec des paramètres normaux. L'encapsuleur configure les registres et la pile pour le service système.

  2. Le wrapper déclenche l'exception qui est envoyée au service système.

  3. Le service système doit alors vérifier TOUS les paramètres. C'est l'une des raisons pour lesquelles les services système ont une surcharge élevée. Les exceptions en mode noyau provoquent des écrans bleus de la mort. Si le service système doit écrire dans un tampon fourni par l'utilisateur, il doit s'assurer que chaque octet dans lequel il écrit est une mémoire inscriptible.

  4. Le service système fait tout ce qu'il doit faire.

  5. Le service système exécute une instruction matérielle pour revenir d'une exception ou d'une interruption. Cela revient au mode utilisateur et revient à la fonction wrapper.

  6. Le wrapper peut décompresser les paramètres renvoyés dans les registres.

  7. Le wrapper revient à l'appelant.


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

La page de manuel indique :

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

3 Appels de bibliothèque (fonctions dans les bibliothèques de programmes)

Une image picturale peut le faire comprendre :

et


Linux
  1. Quelle est la différence entre strtok_r et strtok_s en C ?

  2. Quelle est la différence entre adduser et useradd ?

  3. Quelle est la différence entre procfs et sysfs ?

  4. Quelle est la différence entre ls et l ?

  5. Quelle est la différence entre `su -` et `su --login` ?

Quelle est la différence entre Linux et Unix ?

Quelle est la différence entre la connexion et le shell sans connexion

Quelle est la différence entre la commande apt et apt-get ?

Qu'est-ce qu'un Hyperviseur ? Quelle est la différence entre les types 1 et 2 ?

Quelle est la différence entre curl et Wget ?

Quelle est la différence entre la route et la route IP ?