Sous Linux au moins, le mécanisme d'appel système fonctionne sous la plupart des architectures en plaçant des données spécifiquement formatées (généralement une sorte de structure c) dans certains registres ou adresses de mémoire prédéfinies.
Le problème vient cependant de forcer le CPU à effectuer le basculement dans l'espace du noyau afin qu'il puisse exécuter le code du noyau privilégié pour répondre à l'appel. Cela se fait en forçant un défaut quelconque (un défaut étant une division par 0, un débordement indéfini ou un défaut de segmentation, etc.), ce qui oblige le noyau à prendre en charge l'exécution pour gérer le défaut.
Normalement, le noyau gère les erreurs en tuant le processus à l'origine ou en exécutant un gestionnaire fourni par l'utilisateur. Cependant, dans le cas d'un appel système, il vérifiera plutôt les registres et les emplacements de mémoire prédéfinis et s'ils contiennent une demande d'appel système, il exécutera cela en utilisant les données fournies par le processus utilisateur dans la structure en mémoire. Cela doit généralement être fait avec un assemblage spécialement conçu à la main et pour faciliter l'utilisation de l'appel système pour l'utilisateur, la bibliothèque C du système doit l'encapsuler en fonction. Pour une interface de niveau inférieur, veuillez consulter http://man7.org/linux/man-pages/man2/syscall.2.html pour obtenir des informations sur le fonctionnement des appels système et sur la façon d'appeler sans encapsuleur C.
Cela donne une simplification excessive, ce n'est pas vrai dans toutes les architectures (mips a une instruction syscall spéciale) et ne fonctionne pas nécessairement de la même manière sur tous les systèmes d'exploitation. Si vous avez des commentaires ou des questions, n'hésitez pas à les poser.
Modifié: Remarque, concernant votre commentaire sur les choses dans / dev / c'est en fait une interface de niveau supérieur au noyau, pas une interface inférieure. Ces appareils utilisent en fait (environ) 4 appels système en dessous. Leur écrire est identique à un appel système d'écriture, lire un appel système de lecture, les ouvrir / fermer équivaut aux appels système ouverts et fermés et exécuter un ioctl provoque un appel système spécial d'ioctl qui en soi est une interface pour accéder à l'un des nombreux ioctl du système appels (appels spéciaux, généralement spécifiques à un appareil avec une utilisation trop étroite pour écrire un appel système complet pour eux).