Fonctionnement en mode double et multimode dans un système d'exploitation
Étant donné que le système d'exploitation et ses utilisateurs partagent les ressources matérielles et logicielles du système informatique, un système d'exploitation correctement conçu doit garantir qu'un programme incorrect (ou malveillant) ne peut pas entraîner une exécution incorrecte d'autres programmes - ou du système d'exploitation lui-même. Afin d'assurer la bonne exécution du système, nous devons être capables de faire la distinction entre l'exécution du code du système d'exploitation et le code défini par l'utilisateur. L'approche adoptée par la plupart des systèmes informatiques consiste à fournir un support matériel qui permet de différencier les différents modes d'exécution.
Au minimum, nous avons besoin de deux modes de fonctionnement distincts : le mode utilisateur et le mode noyau (également appelé mode superviseur, mode système ou mode privilégié). Un bit, appelé bit de mode, est ajouté au matériel de l'ordinateur pour indiquer le mode actuel : noyau (0) ou utilisateur (1). Grâce au bit de mode, nous pouvons faire la distinction entre une tâche exécutée au nom du système d'exploitation et une tâche exécutée au nom de l'utilisateur.
Lorsque le système informatique s'exécute au nom d'une application utilisateur, il est en mode utilisateur. Cependant, lorsqu'une application utilisateur demande un service au système d'exploitation (via un appel système), le système doit passer du mode utilisateur au mode noyau pour répondre à la demande.
Au moment du démarrage du système, le matériel démarre en mode noyau. Le système d'exploitation est ensuite chargé et lance les applications utilisateur en mode utilisateur. Chaque fois qu'une interruption se produit, le matériel passe du mode utilisateur au mode noyau (c'est-à-dire que le bit de mode passe à 0). Ainsi, lorsque le système d'exploitation prend le contrôle de l'ordinateur, il est en mode noyau. Le système passe toujours en mode utilisateur (en mettant le bit de mode à 1) avant de passer le contrôle à un programme utilisateur.
Le double mode de fonctionnement nous fournit les moyens de protéger le système d'exploitation contre les utilisateurs errants - et les utilisateurs errants entre eux. Nous réalisons cette protection en désignant certaines des instructions machine susceptibles de causer des dommages comme des instructions privilégiées. Le matériel permet aux instructions privilégiées d'être exécutées uniquement en mode noyau. Si l'on tente d'exécuter une instruction privilégiée en mode utilisateur, le matériel n'exécute pas l'instruction, mais la considère comme illégale et la transmet au système d'exploitation.
L'instruction permettant de passer en mode noyau est un exemple d'instruction privilégiée. D'autres exemples incluent le contrôle des E/S, la gestion des temporisateurs et la gestion des interruptions.
Les appels système permettent à un programme utilisateur de demander au système d'exploitation d'exécuter des tâches réservées au système d'exploitation pour le compte du programme utilisateur.