Question 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 ce qui est réellement disponible.

Mais finalement, il doit mapper l'adresse logique à l'adresse physique réelle. Maintenant, comment augmente-t-il la mémoire?


68
2018-01-10 07:34


origine


C'est le vieux concept. La motivation d'origine de la mémoire virtuelle était une forme de gestion de la mémoire pour fournir un espace d'adressage supérieur à la mémoire physique. Mais c'est à ce moment-là que la mémoire était de faible densité et très coûteuse. Aujourd'hui, la principale raison d'utiliser la mémoire virtuelle est la sécurité des processus. - sawdust
"Maintenant, comment augmente-t-il la mémoire?". Ce n'est pas L’application n’a pas connaissance de la mémoire physique du système, elle ne connaît que la mémoire virtuelle, ce qui explique pourquoi une application se plaint de ne pas avoir assez de mémoire, elle parle de mémoire virtuelle et non de mémoire physique. - Ramhound
Gardez à l'esprit que les systèmes de mémoire virtuelle sont assez intelligents. Si n processus ont la même page en lecture seule, tous les n processus peuvent utiliser la même page de mémoire physique. - Eric Lippert
Ne pensez pas à la mémoire virtuelle comme tromper n'importe quoi. La mémoire est la capacité abstraite de stocker et de récupérer des données. La mémoire virtuelle fournit une implémentation pour cette abstraction. Le fait qu'une partie de cette abstraction soit soutenue par la RAM et que d'autres soient sauvegardés par le disque constitue un détail d'implémentation de l'abstraction. - Eric Lippert
@HagenvonEitzen Pas sûr que la mémoire soit "toujours" sur le disque ... à part les pages lues à l'origine sur le disque, sauf si une page est remplacée, son contenu peut jamais être sur le disque, et cela est particulièrement vrai pour les pages qui sont épinglées en mémoire, par ex. en raison d'être critique pour les fonctionnalités du noyau. - Michael


Réponses:


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

La mémoire virtuelle est utilisée pour séparer et isoler les processus les uns des autres et permettre également de transférer 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. Avec des programmes fonctionnant efficacement dans leur propre espace, cela leur donne un accès complet à l'ensemble de l'espace d'adressage plutôt que de devoir contourner d'autres programmes qui pourraient également nécessiter l'utilisation des "mêmes" adresses. Cela a pour effet secondaire d'accroître la fiabilité et la sécurité car les processus ne peuvent pas interférer facilement les uns avec les autres.

L'espace mémoire virtuel d'une application est construit selon les besoins. Une application semble se trouver dans un seul bloc de mémoire contigu mais pourrait ê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 fonctionnalités comme un fichier de swap. Cela signifie que nous pouvons pousser des parties de la mémoire qui n’ont pas été utilisées récemment sur le disque et configurer un pointeur indiquant «ce bloc de mémoire est dans le fichier x à l’emplacement y», puis nous pouvons libérer la mémoire physique. zone à utiliser par une autre application. Lorsqu'une application a besoin de cette mémoire, elle peut être relue à partir du disque, placée à un endroit de la RAM physique (potentiellement différente de celle où elle se trouvait auparavant) et redirigée vers le même emplacement de la mémoire virtuelle qu'auparavant.

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 de faire 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 souhaite 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 de l'application en elle peut différer le chargement des pages de la bibliothèque du disque jusqu'à ce qu'elles soient réellement nécessaires. De cette manière, les seules parties de la bibliothèque qui sont chargées dans la RAM sont les parties réellement utilisées par le programme, les pièces qui ne sont jamais utilisées ne sont jamais chargées et ne gaspillent donc pas de RAM.

En utilisant ces techniques, nous améliorons la stabilité du système et nous permettons à plus de processus de s'exécuter dans un espace confiné sans que ceux-ci ne se touchent indûment. Cela n'augmente pas la mémoire, mais nous permet d'utiliser plus efficacement ce que nous avons.

Le fichier d'échange est activé par les systèmes de mémoire virtuelle, mais dans le passé, il était confus comme étant la mémoire virtuelle.


116
2018-01-10 07:56



Les commentaires ne sont pas destinés à une discussion approfondie; cette conversation a été déplacé pour discuter. - Sathya♦


Explication de Layman

Le système devra mapper chaque adresse virtuelle à une adresse physique lorsque cette mémoire est 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 le système d'exploitation sans support de mémoire virtuelle, vous auriez besoin de 20 Go de RAM pour que cela fonctionne. L'astuce est que vous ne parcourez pas les 20 onglets en même temps, de sorte que le système d'exploitation avec mémoire virtuelle vous permettra d'utiliser votre navigateur 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 l'échange. Son principal objectif est d'éviter la fragmentation de la RAM, ce qui pose un gros problème sur les systèmes sans gestion de mémoire virtuelle: vous pouvez disposer de 1 Go de RAM, mais si vous disposez de 10 Mo, une application de 100 Mo ne fonctionnera pas. .

Au fil du temps, la mémoire virtuelle a trouvé encore plus d’usages, notamment l’accès aléatoire aux fichiers: de nombreuses applications comme les bases de données deviendront terriblement lentes si elles sont obligées de lire les fichiers séquentiellement et de travailler beaucoup plus rapidement si ) la mémoire et l’optimisation des E / S disque et de la mise en cache en fonction des modèles d’accès.


21
2018-01-10 12:55



il est triste de vivre dans un monde où chaque onglet de navigateur nécessite 1 Go de mémoire - tbodt
@tbodt je blâme les anciens égyptiens. Si seulement ils savaient ce qu'ils faisaient en domestiquant ces chats embêtants! - Dmitry Grigoryev
@tbodt C'est un peu exagéré aussi. Mon navigateur avec 8 onglets ouverts ne prend que 500 Mo de mémoire. - Random832
@ Random832 Bien sûr, c'est exagéré, même si je ne suis pas sûr de la limite entre l'exagération et la pérennité. Mon premier PC avait 32 Mo de RAM et je pouvais facilement ouvrir 8 onglets dans Opera sans permutation notable. Maintenant, il faut 500 Mo, et dans 20 ans, cela pourrait atteindre 8 Go. - Dmitry Grigoryev


La mémoire virtuelle n'augmente pas la mémoire, dans le sens de l'ajout de davantage de matériel de mémoire principale. Mais ça PEUT augmenter la gamme d'adresses utilisables. On pourrait donc avoir un programme en cours composé d’un segment de code et d’un segment de données (stack & heap), les deux pouvant occuper une plage de virtuel adresses plus grandes que la gamme 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 à cause du phénomène de localité de référence: À tout moment, seules les instructions d'une ou de plusieurs petites sections contiguës du segment de programme sont en cours d'exécution et seules les données d'une ou de 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 schéma pendant une grande partie du temps]


5
2018-01-10 16:14





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

La motivation d'origine de la mémoire virtuelle était une forme de gestion de la mémoire pour fournir un espace d'adressage supérieur à la mémoire physique.
Le logiciel pourrait utiliser l'espace d'adressage complet du processeur (par exemple, l'espace d'adressage 2 ^ 32) alors que la mémoire physique installée réelle ne représentait qu'une fraction de ce nombre.
Les grands programmes peuvent être portables entre des ordinateurs utilisant de la mémoire virtuelle sans imposer d’énormes besoins en mémoire (installés).
Cette utilisation de la mémoire virtuelle était de retour à l’époque des ordinateurs centraux et de la mémoire du noyau de ferrite (qui était physiquement et cher de faible densité).

Mais finalement, il doit mapper l'adresse logique à l'adresse physique réelle. Maintenant, comment augmente-t-il la mémoire?

La mémoire virtuelle a évolué d'une simple technique pour fournir plus d'espace d'adressage pour le programme.
La mémoire virtuelle est un élément clé de la sécurité de chaque processus dans les systèmes d'exploitation modernes, de sorte qu'un processus ne peut pas interférer avec un autre processus ni être compromis par un autre processus.
Mais multiprocessing (ne pas confondre avec multiprocessous) 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 réellement utilisée (et associée à la mémoire virtuelle) à chaque processus est dynamique. En règle générale, seule la mémoire virtuelle contenant le code (aka text) et les pages / segments de données pour exécuter le processus est mappée sur la mémoire physique (aka résident en mémoire).

Le code non essentiel (car il n'est pas actuellement exécuté) et les données (car elles ne sont pas référencées / traitées) ne doivent pas nécessairement être résidentes en mémoire tout le temps. Le code et / ou les pages / segments de données peuvent être "échangés" vers le magasin de sauvegarde (par exemple, espace de swap ou fichier de page sur un disque dur ou SSD), puis "inversés" selon les besoins (alias "à la demande"). ).

La mémoire virtuelle facilite l'utilisation efficace de la mémoire physique finie parmi de nombreux processus, chacun avec son propre espace d'adressage virtuel protégé. La somme de ces mémoires virtuelles serait généralement plus grande que la mémoire physique installée.
La "mémoire accrue" est maintenant du point de vue du système, et pas seulement de la perspective du programme.


4
2018-01-10 21:10





La mémoire virtuelle augmente la quantité de données qu'un programme peut traiter. Du point de vue du logiciel, nous ne nous soucions (généralement) pas du lieu de stockage des données. Il pourrait être stocké dans la mémoire physique DRAM, il pourrait être stocké sur un lecteur flash branché sur la machine, ou il pourrait même être stocké sur un plateau tournant. Ce qu’il faut au logiciel, c’est qu’il demande à accéder à ces données.

En pratique, nous souhaitons également que les programmes fonctionnent rapidement. Pour la vitesse considérations, nous nous soucions de savoir où sont les données. Nous voulons que les données auxquelles nous accédons le plus souvent soient stockées dans du matériel permettant l’accès le plus rapide. Nos programmes seraient comme pour fonctionner entièrement en 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 "supprime" les données qui n’ont pas été utilisées depuis longtemps, les stockant sur un disque dur. Ceci est toujours accessible, juste lent. Si le programme demande des données sur le disque dur, le système d'exploitation doit prendre le temps de lire les données du disque et de le déplacer dans la mémoire DRAM.

En théorie, il suffit de lire les données directement sur le disque. Cependant, il y a des raisons pour lesquelles cela n'est pas fait de cette façon. Les programmes ne veulent pas être conscients de toutes ces complications. Nous pouvons et nous écrivons des logiciels qui placent intelligemment les données sur le disque (cela s'appelle la mise en cache). Cependant, cela demande beaucoup de travail supplémentaire. Le plus rapide possible en code est:

if data is not in memory
    read data from disk into memory
operate on data

Un lecteur avisé remarquera que, même si les données sont en mémoire, nous devions avoir une condition pour vérifier si elles étaient présentes. C'est beaucoup plus lent que de simplement fonctionner en mémoire directement!

La mémoire virtuelle résout ce problème en effectuant une vérification du matériel sur le processeur. Le processeur est en mesure de faire cette opération de mémoire virtuelle extrêmement rapidement car il peut y dédier du matériel. Toute tentative de faire cela uniquement dans le logiciel doit utiliser les parties d'usage général du CPU, qui sont naturellement plus lentes que le seraient les transistors dédiés.

Cela nous amène à expliquer pourquoi nous renvoyons toujours les données en mémoire plutôt que de simplement les lire à partir du disque et de les laisser là. Nous divisons la mémoire en "pages", chacune d'entre elles étant marquée comme présente ou non présente en mémoire. Le système d'exploitation maintient cette table dans un format pratique pour que le processeur puisse l'utiliser directement. Chaque fois qu'un programme accède à des données présentes, le matériel de la CPU leur donne accès aux données directement dans DRAM. Lorsque les données ne sont pas présentes, un "défaut de page" est émis, indiquant au système d'exploitation de charger cette page du disque sur une page physique de la mémoire et de mettre à jour la table pour pointer le processeur sur cette nouvelle page physique.

La clé de tout ce problème est de minimiser son utilisation. En pratique, nous constatons que les systèmes d’exploitation sont très efficaces pour choisir les données à conserver en mémoire et les données à transférer sur le disque, de sorte que la grande majorité des accès à la mémoire se produisent sans provoquer de défaillance de page.


3
2018-01-10 20:01





Il le fait en rendant les entrées de carte temporaires.

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

La mémoire maximale allouée 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 de swap comme la «vraie» mémoire, et de la RAM comme un cache haute vitesse pour l’espace de swap.

(Ceci est loin d'être une description approfondie, il est destiné à répondre à la question immédiate sans entrer dans les détails pertinents mais inutiles.)


2
2018-01-11 20:16





Le concept de base repose sur le fait qu'un processeur moderne peut gérer les tables de traduction en conservant "les plages d'adresses auxquelles un processus donné a été affecté et les adresses physiques (pensez aux lignes A00..Axx sur un bus de mémoire), SI ANY , sont actuellement utilisés pour stocker réellement les données. "SI UN" car "aucun" est un état possible et acceptable: Dans ce cas, une condition d'erreur (un "défaut de page") sera levée au niveau du matériel - et cette erreur déclenchera un gestionnaire au niveau du système d'exploitation qui pourra par exemple charger le contenu de la mémoire écrit dans un fichier d'échange dans n'importe quel emplacement libre de la mémoire physique (en lecture) ou trouver un emplacement Dans le cas d’une écriture), mettez à jour la table de traduction susmentionnée, et ne THEN restaurez que le contrôle du processus qui a tenté d’accéder à cette mémoire.


1
2018-01-10 10:48





Mémoire virtuelle:

1) permet de mapper un grand espace d'adressage virtuel sur une plus petite quantité de mémoire physique, avec un "échange" excessif vers un disque ou un disque SSD ou vers la mémoire NVRAM et d'autres périphériques.

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 de mapper un espace d'adressage virtuel plus petit (par exemple, 32 bits) sur un espace d'adressage physique plus grand (par exemple, 40 bits) et permet ainsi aux applications plus anciennes de tirer parti d'une mémoire DRAM plus physique.

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

5) permet aux processus de recevoir leurs propres espaces d'adressage virtuel et d'être ainsi isolés les uns des autres.

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

Cela peut se produire dans un seul processus ou système d'exploitation - la plupart des systèmes d'exploitation dérivés BSD UNIX ont une seule page de zéros en lecture seule, pouvant être mappée sur n'importe quelle page virtuelle remplie de zéro, et page non partagée et rendue accessible en écriture).

Cela peut se produire entre les processus - par ex. UNIX fork () crée des processus enfants partageant presque toute la mémoire virtuelle de manière COW.

Cela peut se produire entre des systèmes d'exploitation - par ex. Les systèmes d'exploitation invités sur un hôte de machine virtuelle peuvent avoir des pages dédupliquées, partagées, etc. (certaines attaques de sécurité récentes en ont profité.)

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 sur Internet.


0
2018-01-17 05:26