L'une des raisons les plus importantes pour lesquelles nous avons de la mémoire virtuelle est de savoir comment fonctionne le code exécutable. Compte tenu de l'exemple le plus simple a = 12345
comment l'assemblage ici regarderais (simplifié pour des raisons évidentes, tout est un int):
Memory Address:Content at address
00000000000004: 12345 (or binary: 11000000111001)
00000000000008: a (phisical location of a)
0000000000000C: copy from 00000000000004 to 00000000000008 instruction
L'important est copy from 00000000000004 to 00000000000008 instruction
ce qui ne fait copier tout un tas de mémoire d'un endroit de un autre.
Lorsque vous essayez d'exécuter ce programme, vous devez avoir a
et 12345
à ces endroits sinon il ne fonctionnera pas. Si la mémoire est physique directement, votre programme ne fonctionnera que s'il est toujours placé dans le même emplacement mémoire. Ceci est résolu par virtual memory de sorte que pratiquement tout est au même endroit, laissant le placement dans la mémoire physique au système d'exploitation (en utilisant paging). Sans cela, vous devriez changer toutes les instructions dans le code chaque fois que le programme s'exécute à l'emplacement physique et que cela ne ferait que rendre les programmes plus gros et plus lents.
La mémoire virtuelle résout plusieurs problèmes. Tout d'abord, il permet à plusieurs programmes de fonctionner sur la même machine. Deuxièmement, il permet au système d'exploitation de faire une sécurité supplémentaire par randomizing the position of each page in the ram. En outre, vous pouvez théoriquement allouer plus de mémoire que votre mémoire physique, car le système d'exploitation peut déplacer la mémoire de la RAM vers le disque dur et revenir à chaque fois que le programme en a besoin (see this).
Beaucoup de raisons. J'en donnerai un de la sécurité: si un attaquant sait exactement où une bibliothèque est chargée avec précision, il peut être plus facile pour eux d'exploiter votre programme. Cela conduit à [Address Space Layout Randomization] (https://en.wikipedia.org/wiki/Address_space_layout_randomization) –