Le passage en mode noyau s'effectue sur la quasi-totalité des processeurs par une interruption. Lorsqu'une interruption est reçue, le processeur passe en mode superviseur. A la fin de l'interruption, le processeur repasse en mode utilisateur.
La totalité des appels système et des routines du noyau se passent donc en interruption.
Les appels systèmes se basent donc sur des interruptions dites logicielles, permettant d'effectuer telle ou telle opération. Les appels systèmes se déroulent donc toujours en mode noyau.
De la même façon, les interruptions matérielles sont complètement traitées par le noyau.
A titre d'exemple, le mécanisme d'appel système sous linux est détaillé ici.
Un appel système est effectué en appelant l'interruption logicielle 0x80. Les paramètres
ont eux passé par les registres. Un appel à un appel système classique se fera donc de la
manière suivante :
__asm__ volatile ( “int $0x80”: “=a” (result): “0” ( 164 ), “b” (param1), “c” (param2),”d” (param3): );
Ce petit bout de programme appelle l'appel système 164 ( passé dans le registre eax ),
avec les paramètres param1, param2 et param3 ( passés dans les registres ebx, ecx et edx ). Le
code d'erreur est stocké ensuite dans le registre eax. Ce code d'erreur prend généralement la
valeur –1 quand une erreur est survenue.
[...] int (*poll) ( . int (*ioctl) ( . int (*mmap) ( . } Introduction aux systèmes d'exploitation UNIX Le tableau ci dessous résume les fonctionnalités de chacune de ces fonctions à implémenter : Nom Fonctionnalité Write Implémente l'écriture dans le périphérique Read Implémente la lecture de donnée du périphérique Open Implémente l'ouverture du périphérique ( peut être une initialisation ) Release Implémente une fermeture du périphérique. Llseek Implémente la recherche d'une position dans le périphérique. ( par exemple déplacement sur un secteur particulier de la tête du disque dur ) Readdir Implémente la lecture d'un directory sur le périphérique. [...]
[...] Chaque processus se voit allouer un quantum de temps pour s'exécuter. Si ce quantum est dépassé, si le processus est bloqué, ou si le processus s'achève, on passe au processus suivant de la file d'attente courante . Les files d'attentes de processus se voient attribuer une priorité Pi et un quantum Qi ( pour la file d'attente numérotée i). Ainsi tout processus enfilé dans cette file d'attente possèdera une priorité Pi et un quantum Qi. Les files d'attentes sont ordonnées de telle façon que : Q0 [...]
[...] unregister_chrdev( int MAJOR, char *name); La structure file opération comporte les champs suivants. Ce sont des pointeurs sur des fonctions effectuant les opérations sur le périphérique. Ainsi la fonction read devra lire des informations sur le périphérique et renvoyer le cas échéant les caractères lus du périphérique vers l'utilisateur. Les paramètres des fonctions passées en pointeur ne sont pas données. struct file_operation { int (*write)( . int (*read) ( . int (*open) ( . int (*release) ( . [...]
[...] Les paramètres ont eux passé par les registres. Un appel à un appel système classique se fera donc de la manière suivante : volatile ( : (result) : ( 164 (param1), (param3) : Ce petit bout de programme appelle l'appel système 164 ( passé dans le registre eax avec les paramètres param1, param2 et param3 ( passés dans les registres ebx, ecx et edx Le code d'erreur est stocké ensuite dans le registre eax. Ce code d'erreur prend généralement la valeur quand une erreur est survenue. [...]
[...] Au prochain redémarrage le nouveau noyau est lancé. Introduction aux systèmes d'exploitation UNIX 7.2 Utilisation de modules dynamiques Les modules dynamiques sont des drivers ou bout de code noyaux pouvant être chargés après que le noyau soit démarré. On insère un module grâce à la commande shell insmod. On retire un module grâce à la commande shell rmmod. On visualise la liste des modules installés grâce à la commande lsmod Création de modules dynamiques Un module est inséré dans le kernel. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture