J'ai parcouru la réponse à cette question, mais je ne comprends pas très bien la différence entre les appels système et les fonctions de bibliothèque. Conceptuellement, quelle est la différence entre les deux?
J'ai parcouru la réponse à cette question, mais je ne comprends pas très bien la différence entre les appels système et les fonctions de bibliothèque. Conceptuellement, quelle est la différence entre les deux?
Réponses:
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 malloc
pour 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 brk
fonction glibc, qui à son tour appelle brk
syscall. 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.
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.
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é