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 ?

119voto

Ana cleto Points 11

Elle n'augmente pas physique mémoire du tout. Son but est tout autre. Ce qu'il peut faire, c'est mettre à disposition d'autres magasins de sauvegarde qui permettent aux programmes d'utiliser plus de mémoire que celle qui est physiquement disponible.

La mémoire virtuelle est utilisée pour séparer et isoler les processus les uns des autres et permet également de détourner l'accès à la mémoire vers d'autres emplacements.

La mémoire virtuelle permet au système de donner à chaque processus son propre espace mémoire isolé des autres processus. Les programmes fonctionnant effectivement dans leur propre espace, ils ont un accès complet à l'ensemble de l'espace d'adressage plutôt que de devoir contourner d'autres programmes qui pourraient également avoir besoin d'utiliser les "mêmes" adresses. Cela a pour effet secondaire d'augmenter la fiabilité et la sécurité, car les processus ne peuvent pas facilement interférer les uns avec les autres.

L'espace mémoire virtuel d'une application est constitué en fonction des besoins. Une application semble (pour elle-même) se trouver dans un seul bloc de mémoire contigu mais peut en réalité être complètement dispersée dans la mémoire physique.

La mémoire virtuelle permet également de piéger et de détourner les accès à la mémoire, ce qui nous permet d'utiliser des fonctions telles que le fichier d'échange. Cela signifie que nous pouvons pousser des parties de la mémoire qui n'ont pas été utilisées récemment vers le disque et mettre en place un pointeur qui dit "ce bloc de mémoire est dans le fichier x à l'emplacement y" et ensuite nous pouvons libérer la zone de mémoire physique pour une utilisation par une autre application. Lorsqu'une application a besoin de cette mémoire, elle peut être relue depuis le disque, placée à un certain emplacement de la RAM physique (potentiellement différent de celui où elle se trouvait auparavant) et réaffectée au même emplacement de la mémoire virtuelle que celui où elle se trouvait précédemment.

De la même manière que le fichier de page est utilisé, la mémoire virtuelle peut également permettre au système d'exploitation d'effectuer ce qui est effectivement un chargement "paresseux" des bibliothèques partagées pour un programme. Lorsque le programme principal indique au système d'exploitation qu'il veut utiliser une bibliothèque particulière, le système d'exploitation peut gagner du temps en vérifiant les exigences de la bibliothèque, en allouant l'espace dans la zone de mémoire virtuelle pour l'application, mais plutôt que de charger la bibliothèque entière, il peut reporter le chargement des pages de la bibliothèque depuis le disque jusqu'à ce qu'elles soient réellement nécessaires. De cette façon, les seules parties de la bibliothèque qui sont chargées dans la RAM sont celles qui sont effectivement utilisées par le programme. Les parties qui ne sont jamais utilisées ne sont jamais chargées et ne gaspillent donc pas de RAM.

Grâce à ces techniques, nous améliorons la stabilité du système et permettons à davantage de processus de fonctionner dans un espace restreint sans qu'ils ne s'influencent indûment les uns les autres. Cela n'augmente pas la mémoire, mais nous permet d'utiliser plus efficacement ce dont nous disposons.

Le fichier d'échange est activé par les systèmes de mémoire virtuelle, mais dans le passé, il était confondu avec le fichier d'échange. être la mémoire virtuelle.

21voto

Dmitry Grigoryev Points 8663

Explication pour les profanes

Le système devra faire correspondre chaque adresse virtuelle à une adresse physique lorsque cette mémoire sera utilisée, mais toute la mémoire n'est pas utilisée en même temps . Par exemple, supposons que vous ayez 20 onglets dans votre navigateur, chacun prenant 1 Go de mémoire. Dans un système d'exploitation sans support de mémoire virtuelle, il vous faudrait 20 Go de RAM pour que cela fonctionne. L'astuce est que vous ne naviguez pas dans les 20 onglets en même temps, donc le système d'exploitation avec mémoire virtuelle vous permettra d'utiliser votre navigateur comme cela avec seulement quelques Go de RAM, en échangeant les onglets inactifs sur le disque.

Aspects plus complexes

La mémoire virtuelle n'est pas utilisée exclusivement pour le swapping. Son but principal est en fait d'éviter la fragmentation de la RAM, qui est un gros problème sur les systèmes sans gestion de la mémoire virtuelle : vous pouvez très bien avoir 1 Go de RAM libre, mais s'il est divisé en morceaux de 10 Mo, une application demandant 100 Mo ne pourra pas fonctionner.

Au fil du temps, la mémoire virtuelle a trouvé d'autres utilisations, notamment l'accès aléatoire aux fichiers : de nombreuses applications, comme les bases de données, deviennent terriblement lentes si elles sont forcées de lire les fichiers de manière séquentielle, et fonctionnent beaucoup plus rapidement si le système d'exploitation leur permet de prétendre que le fichier entier est situé dans la mémoire (virtuelle) et d'optimiser les entrées-sorties du disque et la mise en cache en fonction des modèles d'accès.

6voto

PMar Points 61

La mémoire virtuelle n'augmente pas la mémoire, dans le sens où il faudrait ajouter du matériel de mémoire principale. Mais elle PEUT augmenter la gamme d'adresses utilisables . Ainsi, un programme en cours d'exécution pourrait se composer d'un segment de code et d'un segment de données (pile et tas), et tous deux pourraient occuper une plage de virtuel des adresses plus grandes que la plage de physique adresses fournies par l'espace de stockage physiquement réel de la machine. L'astuce est que seule une petite fraction de ces adresses virtuelles est soutenue par la mémoire principale physique à tout moment. [mais tout est finalement soutenu par le stockage sur disque]. . Cela fonctionne grâce au phénomène de localité de référence : À tout moment, seules les instructions d'une ou plusieurs petites sections contiguës du segment de programme sont exécutées, et seules les données d'une ou plusieurs petites sections contiguës du segment de données sont exploitées. (bien sûr, le comportement est en réalité plus complexe, mais il suit ce modèle pendant une grande partie du temps).

4voto

sawdust Points 16268

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

La motivation initiale de la mémoire virtuelle était une forme de gestion de la mémoire visant à fournir un espace d'adressage plus grand que la mémoire physique.
Les logiciels pouvaient utiliser tout l'espace d'adressage de l'unité centrale (par exemple, 2^32 espaces d'adressage) alors que la mémoire physique réellement installée ne représentait qu'une fraction de ce nombre.
Les gros programmes pouvaient être transportés d'un ordinateur à l'autre grâce à la mémoire virtuelle, sans imposer d'énormes exigences en matière de mémoire (installée).
Cette utilisation de la mémoire virtuelle remonte à l'époque des ordinateurs centraux et de la mémoire à noyau de ferrite (qui était physiquement de faible densité et coûteuse).

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 ?

La mémoire virtuelle n'est plus seulement une technique permettant de fournir un espace d'adressage plus important pour le programme.
La mémoire virtuelle est un élément clé pour assurer la sécurité de chaque processus dans les systèmes d'exploitation modernes, afin qu'un processus ne puisse pas interférer avec un autre processus, ni être compromis par un autre processus.
Mais le multiprocessing (à ne pas confondre avec le multiprocessing ors ) avec la mémoire virtuelle fournit toujours plus de mémoire apparente pour le système que la mémoire physique.

Chaque processus créé dispose de son propre espace d'adressage virtuel, c'est-à-dire de sa propre mémoire virtuelle.
La quantité de mémoire physique qui est effectivement utilisée (et mappée à la mémoire virtuelle) par chaque processus est dynamique. En général, seule la mémoire virtuelle qui contient le code (texte) et les pages/segments de données nécessaires à l'exécution du processus est mappée à la mémoire physique (c'est-à-dire résidente en mémoire).

Le code non essentiel (parce qu'il n'est pas en cours d'exécution) et les données (parce qu'elles ne sont pas référencées/traitées) ne doivent pas nécessairement résider en mémoire en permanence. Les pages/segments de code et/ou de données peuvent être "échangés" vers le magasin de sauvegarde (par exemple, l'espace d'échange ou le fichier de page sur un disque dur ou un disque SSD), et plus tard "échangés (de nouveau) dans" selon les besoins (alias "à la demande").

La mémoire virtuelle facilite l'utilisation efficace de la mémoire physique finie entre de nombreux processus, chacun disposant de son propre espace d'adressage virtuel protégé. La somme de ces mémoires virtuelles est généralement plus importante que la mémoire physique installée.
L'"augmentation de la mémoire" se fait maintenant du point de vue du système, et non plus seulement du point de vue du programme.

2voto

ShadSterling Points 1301

Pour ce faire, il rend les entrées de la carte temporaires.

Lorsqu'un programme accède à une adresse logique, le CPU recherche dans la carte l'adresse physique correspondante. Si elle est trouvée, l'accès à la mémoire se déroule comme prévu ; si elle n'est pas trouvée, une adresse physique doit être allouée et le contenu doit être chargé à partir d'une autre mémoire - l'"espace d'échange". Si chaque adresse physique a déjà été allouée à une adresse logique, alors certaines adresses logiques doivent être "échangées" (leur contenu est sauvegardé dans l'espace d'échange) pour rendre les adresses physiques disponibles.

La mémoire allouée maximale correspond à la taille de l'espace d'échange, qui peut être beaucoup plus grande que la mémoire installée. Il peut être utile de considérer l'espace d'échange comme la "vraie" mémoire, et la RAM comme un cache à haute vitesse pour l'espace d'échange.

(Cette description est loin d'être exhaustive, elle vise à répondre à la question immédiate sans entrer dans des détails pertinents mais inutiles).

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