Dans le monde actuel, les systèmes d'exploitation doivent offrir aux utilisateurs non seulement le plus grand confort possible, mais aussi une stabilité et une sécurité maximales. Les développeurs de systèmes tels que Linux ou Windows sont donc soucieux, entre autres, de minimiser le risque de complications potentielles du système dues à une négligence personnelle involontaire ou à des attaques ciblées de l'extérieur. Une des mesures les plus importantes prises à cet effet est la séparation stricte du noyau du système d'exploitation et des programmes d'application ou des processus utilisateur. Cela signifie que les programmes et les processus qui n'appartiennent pas au système n'ont pas d'accès direct à l'unité centrale et à la mémoire, mais dépendent de ce que l'on appelle les system calls.
Un appel système ou syscall est une méthode utilisée par les programmes d'application pour communiquer avec le noyau du système. Dans les systèmes d'exploitation modernes, cette méthode est utilisée lorsqu'une application ou un processus utilisateur a besoin de transmettre des informations au matériel, à d'autres processus ou au noyau lui-même, ou de lire des informations à partir de ceux-ci. Ainsi, un tel appel est le lien entre lemode utilisateur (User Mode) et le mode noyau (Kernel mode), les deux modes de privilège et de sécurité essentiels pour le traitement des instructions du CPU dans les systèmes informatiques. Tant qu'un appel système n'a pas été traité et les données correspondantes transmises ou reçues, le noyau système prend le contrôle du programme ou du processus. L'exécution est interrompue pendant cette période. Une fois que l'action demandée par un appel système a été effectuée, le noyau abandonne le contrôle et le code de programme continue à partir du point où le syscall a été précédemment lancé.
Note
Une majorité de systèmes d'exploitation modernes fournissent certains appels système sous la forme de fonctions de bibliothèque qui peuvent être exécutées via une interface de programmation également fournie. Cela facilite grandement le travail des développeurs de logiciels, car il n'est plus nécessaire de connaître avec précision le fonctionnement interne du logiciel système concerné.
À quoi servent les appels système ?
La nécessité des appels système est étroitement liée au modèle moderne de système d'exploitation avec mode utilisateur et mode noyau, qui a été introduit en réponse au nombre croissant de processus s'exécutant simultanément dans la mémoire principale (RAM) des ordinateurs. Ainsi, chaque processus individuel dispose de ses propres données avec des droits d'accès spéciaux, et ce n'est qu'avec une répartition équitable des ressources qu'il est possible d'exécuter correctement le système et les programmes d'application. Le mode privilégié supérieur du noyau est ici l'instance de contrôle décisive, car - comme déjà indiqué - non seulement tous les services et processus du système lui-même y sont exécutés, mais aussi les actions critiques du système des programmes d'application qui sont bloqués en mode utilisateur. La condition préalable est le system call approprié par le programme respectif. Dans la plupart des cas, il s'agit simplement d'accéder à la puissance de calcul (CPU) ou aux structures de mémoire (mémoire de travail et espace disque dur). Par exemple, si une application nécessite plus de puissance de calcul ou d'espace de stockage, ou si un fichier non spécifique à l'application est demandé (ouverture, lecture, édition, etc.), les appels système sont indispensables.
Quels sont les types d'appels système ?
En principe, tous les appels système peuvent être utilisés comme unités de commande pour la communication entre les processus d'application et le système d'exploitation ou le matériel, comme mentionné ci-dessus. En outre, les appels de système établis peuvent également être classés en différentes catégories, les cinq types de classification suivants étant notamment établis :
Windows et Linux : les appels système en un coup d'œil
La mesure dans laquelle les types d'appels système énumérés peuvent être mis en œuvre ou utilisés dépend principalement du matériel et de l'architecture du système utilisés, mais aussi du système d'exploitation utilisé. Sous Linux, par exemple, les appels système sont stockés directement dans le noyau Linux dans la « System Call Table ». Chaque entrée de cette table se voitattribuer un numéro unique et une fonction spécifique à exécuter en mode noyau. Pour exécuter un Linux system call, le numéro correspondant est chargé dans la mémoire du CPU puis chargé par l'interruption logicielle 128 (appel d'une sous-fonction du système d'exploitation qui interrompt l'exécution du programme en mode utilisateur). La fonctionnalité est similaire dans les systèmes Windows, où un appel système est toujours d'abord converti en interne : une fonction de bibliothèque de l'API Windows (WinAPI en abrégé) devient ainsi automatiquement un appel système lisible par le système d'exploitation, incluant un numéro unique qui se réfère à la fonction souhaitée en mode noyau. Quelques exemples d'appels système Windows et Linux concrets sont donnés dans le tableau suivant :