Mode protégé - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Introduction

Le mode protégé est un mode de fonctionnement des processeurs basés sur l'architecture x86 d'Intel à partir du 80286. Il est aussi présent dans les séries x86-64 sous deux formes possibles : 32 bits et 64 bits.

Caractéristiques

L'introduction du mode protégé a pour but d'ajouter, à côté du mode dit réel compatible avec l'existant, de nouvelles fonctionnalités pour favoriser le multitâche et la stabilité du système en proposant une assistance matérielle pour les points suivants :

  • protection de la mémoire (niveaux de privilèges) ;
  • support de la mémoire virtuelle (segmentation puis, à partir du 80386, pagination) ;
  • commutation de contexte ;
  • adressage sur 32 bits à partir du 80386.

La plupart des systèmes d'exploitation modernes x86, de Linux à FreeBSD en passant par Windows depuis la version 3.0, fonctionnent dans ce mode. Pour des raisons de compatibilité, un ordinateur se lance en mode réel et le basculement en mode protégé s'effectue manuellement. Il s'agit d'une des premières tâches faites par le système d'exploitation après l'amorçage.

Niveaux de privilège

Il existe, en mode protégé de x86, quatre niveaux de privilège appelés anneaux de protection, numérotés de 0 à 3. Le niveau 0 est le niveau de privilège le plus élevé et le niveau 3 le plus faible. La protection mémoire repose sur les segments : le matériel n’autorise pas à un programme qui s’exécute dans un segment, d’accéder aux segments de privilège supérieur (donc situés dans un anneau de numéro inférieur).

En pratique, la plupart des systèmes d'exploitation modernes (dont Linux et Windows) n'utilisent que deux de ces niveaux. Le code de l'espace noyau (notamment le noyau de système d'exploitation) s'exécute dans l'anneau Ring 0, tandis que les applications utilisateur sont normalement exécutées dans l'anneau Ring 3, plus sécurisé et plus restrictif. On parle couramment de ces anneaux avec les termes « mode noyau » et « mode utilisateur ».

La segmentation

La segmentation ne peut pas être complètement désactivée en mode protégé. Mais à la différence du mode réel, les segments sont entièrement programmables.

C’est avec la segmentation que sont instaurés les niveaux de privilèges (anneaux, voir ci-dessous). Chaque segment possède un niveau de 0 à 3.

La segmentation sert aussi de support à la mémoire virtuelle. En effet, un segment est constitué d’une base (adresse physique — appelée linéaire si la pagination est activée — de départ dans la mémoire) et d’une limite qui définit sa longueur. À l’intérieur d’un segment, l’adresse logique 0 correspond à la base de ce segment. Un segment peut donc être déplacé avec ses données de façon transparente.

De plus le descripteur de chaque segment contient un bit P pour « présent » qui indique si les données sont en mémoire vive ou pas. Si ce bit est éteint, lors d'un accès à ce segment, une exception se déclenche qui permet au système d’exploitation d’aller chercher les données où elles se trouvent et de les copier en mémoire vive.

La segmentation n'est pratiquement pas utilisée par Linux, qui définit des segments correspondant à l'ensemble de la mémoire virtuelle.

Rétro-compatibilité avec le mode réel

Il existe une série de règles pour qu'un programme exploité en mode réel soit binairement compatible, c'est-à-dire qu'il puisse être exécuté en mode protégé.

En fait, la plupart des programmes DOS enfreignaient ces règles. Le 386 introduit le mode virtuel 8086 pour remédier à cela.

Page générée en 0.092 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise