La mémoire virtuelle augmente la quantité de données qu'un programme peut traiter. D'un point de vue logiciel, nous ne nous soucions généralement pas de l'endroit où leurs données sont stockées. Il peut être stocké dans une mémoire DRAM physique, sur un lecteur flash branché à la machine ou même sur un plateau en rotation. Ce qui importe au logiciel, c’est que, quand il demande d’accéder à ces données, il réussit.
En pratique, nous souhaitons également que les programmes fonctionnent rapidement. Pour des raisons de rapidité , nous nous soucions de l'emplacement des données. Nous voulons que les données auxquelles nous avons accès le plus souvent soient stockées dans un matériel permettant un accès le plus rapide possible. Nos programmes ne vous exécuter entièrement hors de DRAM. Cependant, nous n'avons souvent pas assez de DRAM pour le faire. La mémoire virtuelle est une solution.
Avec la mémoire virtuelle, le système d’exploitation "dépose" des données inutilisées et les stocke sur un disque dur. Ceci est toujours accessible, juste lent. Si le programme demande des données qui se trouvent sur le disque dur, le système d'exploitation doit prendre le temps de lire les données sur le disque et de les replacer dans la mémoire DRAM.
En théorie, il pourrait simplement lire les données directement à partir du disque. Cependant, il y a des raisons pour lesquelles ce n'est pas fait de cette façon. Les programmes ne veulent pas être conscients de toutes ces complications. Nous pouvons et faisons écrire un logiciel qui met intelligemment les données sur disque (cela s'appelle la mise en cache). Cependant, cela demande beaucoup de travail supplémentaire. Le plus rapidement possible dans le code est:
if data is not in memory
read data from disk into memory
operate on data
Un lecteur astucieux remarquera que, même si les données sont en mémoire, nous devions avoir une condition pour vérifier si elles sont présentes. C'est beaucoup plus lent que de simplement utiliser la mémoire directement!
La mémoire virtuelle résout ce problème en vérifiant le matériel sur la CPU. Le processeur est en mesure d'effectuer cette opération de mémoire virtuelle extrêmement rapidement car il peut y dédier du matériel. Toute tentative de faire cela dans le seul logiciel doit utiliser les parties générales de la CPU, qui sont naturellement plus lentes que ne le seraient les transistors dédiés.
Cela explique pourquoi nous mettons toujours les données en mémoire dans la mémoire plutôt que de simplement les lire à partir du disque et de les laisser telles quelles. Nous divisons la mémoire en "pages", chacune étant marquée comme étant présente ou non présente en mémoire. Le système d'exploitation conserve cette table dans un format facilement utilisable par la CPU. Lorsqu'un programme accède aux données présentes, le matériel de la CPU leur donne directement accès aux données de la mémoire DRAM. Lorsque les données ne sont pas présentes, une "erreur de page" est générée, invitant le système d'exploitation à charger cette page du disque sur une page physique de la mémoire et à mettre à jour le tableau pour indiquer à la CPU cette nouvelle page physique.
La clé de tout ce problème est de minimiser son utilisation. Dans la pratique, nous trouvons que les systèmes d'exploitation savent très bien quelles données conserver en mémoire et quelles données transférer d'une page à une autre sur un disque. Ainsi, la grande majorité des accès à la mémoire se font sans jamais causer d'erreur de page.