73 votes

Comment la mémoire virtuelle augmente-t-elle réellement l'espace mémoire ?

Je comprends que la mémoire virtuelle trompe le programme en affichant plus de mémoire que celle qui est réellement disponible.

Mais en fin de compte, il doit faire correspondre l'adresse logique à l'adresse physique réelle. Maintenant, comment augmente-t-il la mémoire ?

1voto

rackandboneman Points 780

Le concept de base repose sur le fait qu'un processeur moderne peut gérer des tables de traduction permettant de savoir "quelles plages d'adresses ont été allouées à un certain processus et quelles adresses physiques (pensez aux lignes A00..Axx d'un bus mémoire) sont actuellement utilisées, SI ELLE SONT, pour stocker réellement les données. "SI QUELQUE CHOSE" parce que "rien du tout" est un état possible et acceptable : Dans ce cas, une condition d'erreur (appelée "défaut de page") sera soulevée au niveau matériel - et cette erreur déclenchera un gestionnaire au niveau du système d'exploitation qui pourra par exemple recharger le contenu de la mémoire qui a été écrit dans un fichier d'échange dans n'importe quel emplacement libre de la mémoire physique (dans le cas d'une lecture) ou trouver un emplacement réel pour y mettre des choses (dans le cas d'une écriture), mettre à jour la table de traduction susmentionnée, et seulement ENSUITE redonner le contrôle au processus qui a tenté d'accéder à cette mémoire et qui ne sera pas le plus sage de ce qui s'est passé.

1voto

Jordi Castilla Points 111

Mémoire virtuelle :

1) permet de mapper un grand espace d'adressage virtuel sur une plus petite quantité de mémoire physique, l'excédent étant "échangé" sur le disque, ou SSD, ou prospectivement sur NVRAM et d'autres dispositifs.

2) permet de mapper un espace d'adressage virtuel plus grand (par exemple, 64 bits) sur un espace d'adressage physique plus petit (par exemple, 32 ou 64 bits).

3) permet à un espace d'adressage virtuel plus petit (par exemple 32 bits) d'être mappé sur un espace d'adressage physique plus grand (par exemple 40 bits), et permet ainsi aux anciennes applications de tirer parti de plus de DRAM physique.

4) permet à la mémoire physique, fragmentée et non contiguë dans l'espace d'adressage physique, d'être rendue contiguë dans l'espace d'adressage virtuel.

5) permet de donner aux processus leurs propres espaces d'adresses virtuelles, et donc de les isoler les uns des autres.

6) permet à différentes adresses virtuelles qui partagent les mêmes valeurs de données d'allouer une seule page physique.

Cela peut se produire au sein d'un seul processus ou d'un seul système d'exploitation - la plupart des systèmes d'exploitation dérivés d'UNIX BSD ont une seule page de zéros en lecture seule, qui peut être mappée dans n'importe quelle page virtuelle remplie de zéros, typiquement COW (Copy On Write - lecture seule de zéros, écritures piégées et page non partagée et rendue inscriptible).

Cela peut se produire entre les processus - par exemple, UNIX fork() crée des processus enfants qui partagent la quasi-totalité de la mémoire virtuelle à la manière d'un COW.

Cela peut se produire entre les systèmes d'exploitation - par exemple, les systèmes d'exploitation invités sur une machine virtuelle hôte peuvent avoir des pages dédupliquées, des COW partagés, etc.

7) la mémoire virtuelle peut permettre à des parties de l'espace d'adressage virtuel d'être mappées à des fichiers, ou à la mémoire mappée sur d'autres processeurs, que ce soit dans le même système multiprocesseur ou à travers l'Internet.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X