Anneau (CPU)
L' anneau , également appelé domaine , désigne (dans le cadre de la programmation du système d'exploitation et du multitâche ) un privilège ou un niveau de sécurité pour le code du programme en cours d'exécution . Cela restreint le code par rapport au jeu d'instructions utiles du processeur et la zone de stockage utilisable est facultative. L'utilisation de niveaux de privilège a du sens pour faire abstraction du matériel et pour isoler les processus les uns des autres et du système d'exploitation et des pilotes .
Dans l'anneau le plus interne (niveau d'autorisation le plus élevé), le système d'exploitation est généralement en cours d'exécution , peut-être même uniquement son noyau . Le système d'exploitation «est autorisé à tout faire», en particulier l'accès direct au matériel et l'accès aux zones RAM d'autres processus. Les programmes d'application sont généralement limités à l'anneau le plus externe (niveau d'autorisation le plus bas). Pour les opérations nécessitant un accès matériel, les programmes d'application doivent mettre en service les services du système d'exploitation.
la mise en oeuvre
Le jeu d'instructions est restreint pour les processus non privilégiés («userland») de telle manière qu'ils ne peuvent pas accéder directement au matériel et ne peuvent pas se libérer de leur niveau privilégié. L'accès à la zone mémoire d'autres processus est généralement empêché par la virtualisation de la mémoire . Cela garantit que le code de programme dans les anneaux externes ne peut pas accéder non autorisé au code de programme ou aux données du noyau et d'autres services système dans les anneaux internes. La même virtualisation du stockage est également couramment utilisée pour isoler différents processus les uns des autres. Étant donné que les processus non privilégiés ne peuvent pas accéder au matériel directement, il y a soi-disant « portes » qui code de programme d'anneaux externes peut appeler le code de programme d'anneaux intérieurs. En particulier, l' interface de programmation de l' noyau peut être atteint de cette manière afin de demander les mesures nécessaires.
La plupart des architectures de processeur ne fournissent que deux anneaux: le code du programme dans l'anneau 0 est situé en mode noyau (anglais " Kernel mode " ), l' espace noyau (anglais " Kernel space " ou est) Super User Code (anglais " Superuser code " ) - tout le monde en mode utilisateur (angl. " user mode " ) ou dans l'espace utilisateur (angl. " userspace " ).
Séquence d'un appel du système d'exploitation
Un processus (exécuté avec une faible autorisation) sélectionne la fonction du système d'exploitation à exécuter en définissant de manière appropriée les registres de l'UC et les zones de mémoire et définit les paramètres requis. Ensuite, il déclenche une interruption logicielle via une commande CPU . Cela interrompt le processus, la CPU passe à l'anneau le plus interne ("mode noyau") et continue l'exécution avec une routine spéciale du système d'exploitation. Cela enregistre d'abord d'autres états (CPU) qui n'ont pas encore été sauvegardés par la CPU elle-même dans le cadre de l'interruption logicielle, par exemple pour avoir des registres libres pour sa propre exécution. Il agit alors en fonction du travail demandé: il le transfère au pilote responsable, le met en file d'attente pour traitement par un thread du noyau, ou il peut éventuellement exécuter le travail lui-même. Dans les deux premiers cas, un changement de contexte complet vers un autre processus est alors généralement effectué, car le processus appelant ne peut se poursuivre que lorsque le système d'exploitation a complètement traité le travail. Dès que le travail a été complètement traité, le sous-programme du système d'exploitation stocke les valeurs de retour dans les zones de mémoire du processus et, si nécessaire, note d'autres valeurs de retour pour certains registres de CPU dans son contexte de processus. Le processus de demande est marqué comme "prêt" et repris plus tard dans le cadre de la planification régulière (au moyen d'un changement de contexte): Une instruction CPU spéciale achève le changement de contexte, la CPU "retourne de l'interruption logicielle", la CPU retournant à l'utilisateur -Le mode (anneau le plus externe) change en arrière et continue l'exécution du processus à faibles privilèges immédiatement après le point d'interruption.
exigence
Il doit y avoir des circuits dans la CPU et, le cas échéant, dans la MMU qui vérifient à chaque commande ou accès mémoire si cela est autorisé dans l'anneau actuel. Si un processus veut faire quelque chose qui n'est pas autorisé, il est interrompu et une routine du système d'exploitation est appelée, dont la tâche est de réagir en conséquence.
systèmes de processeur x86
Les processeurs compatibles Intel 80286 différencient quatre niveaux de privilèges: Ring 0, 1, 2 et 3. Ring 0, appelé « mode superviseur », représente le niveau de privilège le plus élevé, de plus en plus restreint jusqu'au niveau 3 (anneau 3). Des exemples d' instructions d' assembleur qui peuvent être exécutées dans l'anneau 0 mais pas dans l'anneau 3 comprennent: B. "cli" et "sti". Ces instructions sont utilisées pour activer ou désactiver la gestion des interruptions matérielles (masquables) . Les anneaux étaient à l'origine destinés au noyau (anneau 0), aux pilotes (anneau 1), aux services système (anneau 2) et aux programmes d'application (anneau 3).
Pour permettre aux processus de s'exécuter dans une zone protégée (anneau> 0), la mémoire principale physique est divisée en pages de mémoire virtuelle . Pour chaque page de mémoire, il y a une table qui, entre autres, stocke le niveau (anneau) dans lequel le code de programme, qui est stocké dans cette page de mémoire, est exécuté. La MMU effectue généralement cette évaluation en externe.
Avec l'introduction de l' AMD64 - opcodes que même Intel pour certains de ses processeurs comme Intel 64 acquis existe en plus Speicherseitendeskriptor, le NX - Flag (anglais ". No eXecution "), qui permet une distinction entre les données et le code du programme donc les vulnérabilités être évité par les débordements de tampon . Le dépassement de la mémoire tampon n'est pas empêché directement, mais le code de programme dans les pages de données ne peut pas être exécuté.
Changer entre les anneaux
Il existe trois types de portes disponibles pour changer d'anneau, qui nécessitent différentes quantités de temps de calcul lorsqu'elles sont utilisées, car chaque changement d'un anneau à l'autre représente également un changement de contexte d' au moins certains états dans le CPU:
- Portes d'appel pour appeler le code de programme directement à partir de niveaux de privilèges supérieurs. La porte d'appel détermine à quel point et avec quels privilèges le code de programme appelé s'exécutera. Pour des raisons de sécurité, le code programme du niveau de privilège supérieur se voit attribuer sa propre pile , les paramètres d'appel de la pile du code appelant sont copiés dans la nouvelle pile. Sinon, le code privilégié s'exécute dans le contexte du code appelant.
- Les portes d'interruption sont utilisées lors du déclenchement d'une soi-disant interruption logicielle, mais les interruptions matérielles nécessitent également une porte d'interruption. En plus de toutes les étapes qui sont exécutées lors de l'utilisation d'une porte d'appel, le registre des drapeaux est également stocké sur la pile et les interruptions supplémentaires sont bloquées jusqu'au retour du programme d'interruption.
- Les portes de tâches permettent de passer le contrôle à un autre processus. Il s'agit de la forme la plus complexe de changement de contexte, car l'état complet du processeur du processus appelant doit être enregistré et le processus appelé doit être chargé.
Systèmes d'exploitation sur x86
Les systèmes d'exploitation courants pour x86 Linux et Windows (ainsi que macOS pour x64 et DOS avec le gestionnaire de mémoire EMM386.EXE ) n'utilisent que deux des quatre anneaux de processeur possibles. Le noyau et tous les pilotes matériels sont exécutés dans l'anneau 0, tandis que le logiciel d'application fonctionne dans l'anneau 3 sans privilège. Cela garantit la portabilité du système d'exploitation même sur des architectures de processeurs qui ne peuvent différencier que deux anneaux. Cependant, OS / 2 utilise Ring 2 pour les pilotes graphiques. Une version spécialement adaptée du gestionnaire de mémoire EMM386 du kit de développement pour DOS Protected Mode Services (pour Novell DOS 7, OpenDOS 7.01 et DR-DOS 7.02 et supérieur) permet à DPMS de fonctionner sur l'anneau 1 au lieu de l'anneau 0, ce qui facilite le dépannage des logiciels qui DPMS utilise.
Les solutions de virtualisation de plus en plus utilisées utilisent également l'anneau 1. Ici, le noyau du système d'exploitation est déplacé de l'anneau 0 à l'anneau 1, l' hyperviseur réside alors en tant que couche supérieure dans l'anneau 0 et gère un ou plusieurs cœurs de système d'exploitation s'exécutant dans l'anneau 1. Cependant, cela peut également être exploité par les rootkits pour permettre à un code malveillant de s'exécuter inaperçu par l'utilisateur sur Ring 0 (voir aussi Virtual Machine Based Rootkit ).
Afin de simplifier l'utilisation des hyperviseurs, les processeurs plus récents d'Intel et d'AMD introduisent un nouveau "anneau -1", de sorte que le noyau du système d'exploitation reste dans l'anneau 0 tandis que l'hyperviseur réside en tant que couche au-dessus dans l'anneau -1. Il gère un ou plusieurs cœurs de système d'exploitation dans l'anneau 0.
Systèmes non x86
La division en quatre anneaux faite avec des processeurs x86 a été utilisée plus tôt, par ex. B. chez VAX . Le processeur Alpha prend en charge une zone protégée supplémentaire pour son code PAL , qui pourrait être interprété comme un anneau -1. Le Honeywell 6180 , le premier système avec un support matériel pour ce concept, avait huit anneaux.
Avec de nombreux processeurs actuels, une distinction n'est souvent faite qu'entre le mode superviseur («tout est permis») et le mode utilisateur (accès restreint aux zones mémoire / ressources système / registres CPU). La mémoire principale est protégée par l'unité de gestion de pages MMU de la CPU.
Ce principe peut également être appliqué aux systèmes x86 dans la mesure où la mémoire est créée en tant que mémoire plate via la segmentation . Le processeur ne fonctionne qu'aux niveaux de privilège 0 et 3.
Preuve individuelle
- ↑ Presentation Device Driver Reference for OS / 2 ( Souvenir de l' original du 16 juin 2013 dans les archives Internet ) Info: Le lien de l' archive a été automatiquement inséré et pas encore vérifié. Veuillez vérifier le lien d'origine et d'archive conformément aux instructions , puis supprimez cet avis. sur warpspeed.com (anglais)