Un système d'exploitation informatique moderne utilise généralement la mémoire virtuelle pour fournir des espaces d'adressage séparés ou des régions séparées d'un espace d'adressage unique, appelés espace utilisateur et espace noyau . Cette séparation sert principalement à assurer la protection de la mémoire et la protection du matériel contre les comportements logiciels malveillants ou erronés.
L'espace noyau est strictement réservé à l'exécution d'un noyau de système d'exploitation privilégié , des extensions du noyau et de la plupart des pilotes de périphériques . En revanche, l'espace utilisateur est la zone mémoire où s'exécutent les logiciels d'application et certains pilotes, généralement un espace d'adressage par processus.
Aperçu
Le terme espace utilisateur (ou userland ) fait référence à tout le code qui s'exécute en dehors du noyau du système d'exploitation. L'espace utilisateur fait généralement référence aux différents programmes et bibliothèques que le système d'exploitation utilise pour interagir avec le noyau : logiciels qui effectuent des entrées/sorties , manipulent des objets du système de fichiers , logiciels d'application , etc.
Chaque processus de l'espace utilisateur s'exécute normalement dans son propre espace mémoire virtuel et, sauf autorisation explicite, ne peut pas accéder à la mémoire des autres processus. C'est la base de la protection de la mémoire dans les principaux systèmes d'exploitation actuels et un élément de base pour la séparation des privilèges . Un mode utilisateur distinct peut également être utilisé pour créer des machines virtuelles efficaces (voir les exigences de virtualisation de Popek et Goldberg) . Avec suffisamment de privilèges, les processus peuvent demander au noyau de mapper une partie de l'espace mémoire d'un autre processus sur le sien, comme c'est le cas pour les débogueurs . Les programmes peuvent également demander des régions de mémoire partagée avec d'autres processus, bien que d'autres techniques soient également disponibles pour permettre la communication entre processus .
Mise en œuvre
La manière la plus courante d'implémenter un mode utilisateur distinct du mode noyau implique des anneaux de protection du système d'exploitation . Les anneaux de protection, à leur tour, sont implémentés à l'aide de modes CPU . En général, les programmes de l'espace noyau s'exécutent en mode noyau , également appelé mode superviseur ; les applications normales de l'espace utilisateur s'exécutent en mode utilisateur.
Certains systèmes d'exploitation sont des systèmes d'exploitation à espace d'adressage unique : ils disposent d'un espace d'adressage unique pour tout le code en mode utilisateur. (Le code en mode noyau peut se trouver dans le même espace d'adressage ou dans un deuxième espace d'adressage). D'autres systèmes d'exploitation disposent d'un espace d'adressage par processus, avec un espace d'adressage distinct pour chaque processus en mode utilisateur.
Une autre approche adoptée dans les systèmes d'exploitation expérimentaux consiste à disposer d'un espace d'adressage unique pour tous les logiciels et à s'appuyer sur la sémantique d'un langage de programmation pour garantir que la mémoire arbitraire ne soit pas accessible - les applications ne peuvent acquérir aucune référence aux objets auxquels elles ne sont pas autorisées à accéder. Cette approche a été mise en œuvre dans JXOS , Unununium ainsi que dans le projet de recherche Singularity de Microsoft .