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 :
-
Un utilisateur appelle le wrapper nommé avec des paramètres normaux. L'encapsuleur configure les registres et la pile pour le service système.
-
Le wrapper déclenche l'exception qui est envoyée au service système.
-
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.
-
Le service système fait tout ce qu'il doit faire.
-
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.
-
Le wrapper peut décompresser les paramètres renvoyés dans les registres.
-
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