Un coup je te vois
Cela n'a l'air de rien de passer du monoutilisateur au multiutilisateur ou au multitâche mais ça sous-entend un certain nombre d'améliorations techniques. En effet, quand plusieurs programmes partage une machine en même temps il faut que chacun d'eux ait l'impression d'y être seul à fonctionner. Il est donc nécessaire que l'emplacement du code et des données en mémoire soit transparent et modifiable. Il faut aussi que la quantité de mémoire disponible soit toujours suffisante, d'où la mise en place de la mémoire virtuelle. De plus il est indispensable que chaque programme soit protégé de ses propres débordements et de ceux des autres (sinon leur fonctionnement fiable ne pourrait jamais être garanti), ce qui demande une protection de la mémoire.
Sur la famille x86, la protection passe par la segmentation depuis le 80286. Une adresse en mémoire y est depuis l'origine séparée en 2 parties, l'une concernant le segment, l'autre étant un offset, une position à l'intérieur de ce segment. Avec la mise en place de la protection, la première partie n'indique plus le segment lui-même mais est un indice dans une table qui contient entre autre la position du début de celui-ci. Il y a été ajouté les informations sur sa taille et les possibilités de lecture, écriture, exécution dont on y dispose. Il ne faut en effet pas être autorisé à écrire dans un segment de code du programme (argh !). Si l'on cherche à accéder à un segment qui ne fait pas partie de sa propre table, par exemple au travers d'un pointeur corrompu, le programme s'arrête instantanément.
Il y a donc une première opération de relogement effectuée par cette partie segmentation puisque c'est le système qui fixera les emplacements physiques de chaque portion de code et de données de façon transparente pour le programme. Mais ce n'est pas suffisant parce qu'il faut en plus penser au problème de la mémoire virtuelle qui est traité par pagination, opération plus particulièrement confiée à la MMU (Memory Management Unit). Le principe de la mémoire virtuelle est de simuler une grande capacité de mémoire vive sur le disque dur de l'ordinateur. Il y a pendant le fonctionnement un certain nombre de pages, des fractions de la mémoire virtuelle, qui sont présentes en mémoire vive. Il est de temps en temps nécessaire d'écrire sur le disque le contenu d'une des pages si elle a été modifiée pour charger une autre qui la remplacera en mémoire physique.
C'est une tentative d'accès à une page manquante pendant l'exécution du programme qui provoque une interruption réalisant l'échange. Le système doit s'arranger pour que ces swaps ne soient pas trop fréquents ou qu'il commute vers une autre tâche pendant leur déroulement afin qu'ils ne ralentissent pas trop l'ensemble. Il y a là un deuxième niveau de relogement : la mémoire logique vue par le programme peut être linéaire alors que la MMU se charge d'y faire correspondre des adresses physiques dans des pages de mémoire virtuelle qui changent régulièrement et ne sont pas toutes présentes en même temps.