Différence entre les appels système et les fonctions de bibliothèque

Réponses:

19

Conceptuellement, une fonction de bibliothèque fait partie de votre processus.

Au moment de l'exécution, votre code exécutable et le code de toutes les bibliothèques (comme libc.so) dont il dépend, sont liés en un seul processus. Ainsi, lorsque vous appelez une fonction dans une telle bibliothèque, elle s'exécute dans le cadre de votre processus, avec les mêmes ressources et privilèges. C'est la même idée que d'appeler une fonction que vous avez écrite vous-même (avec des exceptions possibles comme les fonctions PLT et / ou trampoline, que vous pouvez consulter si vous le souhaitez).

Conceptuellement, un appel système est une interface spéciale utilisée pour passer un appel de votre code (qui n'est généralement pas privilégié) au noyau (qui a le droit d'élever les privilèges si nécessaire).


Par exemple, voir Linux man brk . Lorsqu'un programme C appelle mallocpour allouer de la mémoire, il appelle une fonction de bibliothèque dans la glibc.

S'il y a déjà suffisamment d'espace pour l'allocation à l'intérieur du processus , il peut effectuer la gestion de tas nécessaire et retourner la mémoire à l'appelant.

Sinon, glibc doit demander plus de mémoire au noyau: elle appelle (probablement) la brkfonction glibc, qui à son tour appelle brksyscall. Ce n'est qu'une fois le contrôle passé au noyau, via l'appel système, que l'état de la mémoire virtuelle globale peut être modifié pour réserver plus de mémoire et le mapper dans l'espace d'adressage de votre processus.

Inutile
la source
11

Ajout à la réponse inutile: les
fonctions de bibliothèque sont plus rapides que les appels système et ne contiennent généralement pas de considérations d'autorisation / sécurité, car elles s'exécutent avec les privilèges du processus et sa mémoire.

Les Syscalls d'autre part, puisqu'ils s'exécutent dans le noyau, ont accès à tout dans le système, et donc ils doivent contrôler ce que le processus appelant peut faire quand il les appelle (vérifiez qu'il a les autorisations pour ouvrir un fichier, par exemple exemple), en outre, puisque les appels système sont dans le noyau, les appeler nécessite un changement de contexte dans le CPU, ce qui est un processus très lourd par rapport à un simple appel à la bibliothèque.

Les appels système reflètent généralement l'utilisation du processeur système dans les programmes de surveillance.

Didi Kohen
la source
0
  1. lib fun est pris en charge par le compilateur tandis que syscall est pris en charge par le système d'exploitation
  2. Libcall est spécifique tandis que syscall est générique, comme getc a lib fun ne peut accéder qu'à un seul caractère à la fois et non chaîne ou mot par mot, mais ouvrir un syscall peut être utilisé pour ouvrir un fichier texte, un fichier binaire et bien d'autres types de fichiers.
preet
la source
0

appel à la bibliothèque - invoque un sous-programme lié à l'application (via l'inclusion ou l'ajout d'une bibliothèque).

appel système - transfère le contrôle vers le système d'exploitation (utilisateur-> système système-> système d'exploitation) et place le processeur en mode privilégié

Vedhas Deshpande
la source