(La réponse suivante suppose un ordinateur de bureau, un serveur ou une plate-forme embarquée haut de gamme «moderne» (comme les smartphones, et de plus en plus de systèmes plus petits également). Pour les systèmes x86, moderne signifie 386 et plus. La réponse suivante suppose également un OS «moderne», comme presque tous les Unix, ou Windows depuis 95.)
Cela ne se produit pas dans le système d'exploitation, cela se produit dans le processeur, en particulier dans la MMU ( unité de gestion de la mémoire ) . La MMU prend en charge l'adressage virtuel, les bits qui composent un pointeur n'indiquent pas directement l'emplacement physique des bits en mémoire.
Dans une MMU typique, lorsqu'un pointeur est déréférencé, la MMU décompose les bits en deux groupes: les bits de poids fort constituent le numéro de page et les bits de poids faible constituent l'adresse à l'intérieur de la page. La plupart des ordinateurs de bureau et serveurs utilisent des pages de 4 Ko. La MMU recherche le numéro de page virtuelle dans une table appelée TLB (c'est ce que vous avez appelé les «mappes de mémoire de processus»). Le TLB indique le numéro de la page physique qui correspond à cette page virtuelle. La MMU récupère ensuite les données de la page physique en mémoire.
Si le TLB ne contient pas d'entrée pour ce numéro de page virtuel particulier, la MMU informe le processeur qu'un accès non valide s'est produit; cela s'appelle généralement une exception.
Notez que je n'ai pas mentionné le système d'exploitation jusqu'à présent. C'est parce que toute cette opération est indépendante du système d'exploitation. L'OS entre en jeu car il configure les choses de deux manières:
L'OS est responsable de la commutation des tâches. Dans ce cas, comme vous le soupçonniez, il enregistre le TLB actuel et le remplace par le TLB enregistré pour la prochaine tâche planifiée. De cette façon, chaque processus a un TLB, donc l'adresse 0x123456
dans le processus X peut ne pas pointer vers le même endroit réel dans la RAM que cette même adresse dans le processus Y, ou peut simplement être invalide. Si un processus essaie de déréférencer un pointeur en dehors de son espace d'adressage, il n'atteint pas l'espace d'un autre processus, il n'atteint nulle part .
L'OS décide de ce qui se passe lorsqu'une exception est levée. Il peut mettre fin au processus pour effectuer un accès mémoire invalide (défaut de segmentation, défaut général de protection, ...). C'est également la façon dont la permutation est implémentée: le gestionnaire d'exceptions peut décider de récupérer certaines données de l'espace de permutation, mettre à jour le TLB en conséquence et effectuer à nouveau l'accès.
Notez que la MMU assure la sécurité car le processus ne peut pas modifier son propre TLB. Seul le noyau du système d'exploitation peut modifier les TLB. Le fonctionnement des autorisations de modification TLB dépasse le cadre de cette réponse.
Gilles 'SO- arrête d'être méchant'
la source