Qu'est-ce que la mémoire virtuelle?


27

Je revérifiais mes notes pour la «mémoire virtuelle» et la définition dans mon manuel est:

Processus d'allocation d'une section de stockage secondaire pour faire partie de la mémoire principale

Où, comme le dit Wikipedia :

La mémoire virtuelle est une technique de système informatique qui donne à un programme d'application l'impression qu'il a une mémoire de travail contiguë (un espace d'adressage)

et (Wikipedia dit aussi)

Notez que la «mémoire virtuelle» est plus que «l'utilisation de l'espace disque pour étendre la taille de la mémoire physique»

Quelqu'un peut-il apporter des éclaircissements sur ce qui est correct?


Je crois que la note de Wikipédia implique certaines réserves sur ce qui est utilisé en termes de choses contiguës.
JB King

Cette question obtiendrait probablement une meilleure réponse sur SO.
Captain Segfault

2
Ne confondez pas la mémoire virtuelle avec son utilisation. La première phrase de Wikipédia définit ce que c'est. Votre livre parle de la façon dont il est généralement utilisé. Une fois que les gens parlent de "pages", ils parlent d'une implémentation spécifique de la mémoire virtuelle.
Tony Lee

2
Votre manuel est tout simplement faux. Il existe de nombreuses machines avec mémoire virtuelle et aucun stockage secondaire. De même, il y avait une fois de nombreuses machines qui pouvaient utiliser le stockage secondaire dans le cadre de la mémoire principale mais ne prenaient pas en charge la mémoire virtuelle. La "mémoire virtuelle" est quelque chose qui n'est pas de la mémoire mais qui est accessible comme de la mémoire. Votre manuel définit l'échange ou la pagination.
David Schwartz

1
Le manuel le définit de manière totalement incorrecte, le stockage secondaire ne fait pas partie de la définition. Et même la déclaration de Wikipédia sur "plus que de l'espace disque" est trompeuse, car elle peut ne pas impliquer du tout le disque - cette déclaration sonne comme si elle "étend la mémoire sur le disque" et quelque chose d'autre.
Kelvin

Réponses:


41
Note that "virtual memory" is more than just "using disk space to extend physical memory size"

La mémoire virtuelle est une couche d'abstraction fournie à chaque processus. L'ordinateur a, disons, 2 Go de RAM physique, adressée de 0 à 2G. Un processus peut voir un espace d'adressage de 4 Go, qu'il a entièrement pour lui-même. Le mappage des adresses virtuelles aux adresses physiques est géré par une unité de gestion de mémoire, qui est gérée par le système d'exploitation. Généralement, cela se fait dans des "pages" de 4 Ko.

Cela donne plusieurs fonctionnalités:

  1. Un processus ne peut pas voir la mémoire dans d'autres processus (sauf si le système d'exploitation le souhaite!)
  2. La mémoire à une adresse virtuelle donnée peut ne pas se trouver à la même adresse physique
  3. La mémoire à une adresse virtuelle peut être «paginée» sur le disque, puis «paginée» lors d'un nouvel accès.

Votre manuel définit la mémoire virtuelle (incorrectement) comme juste # 3.

Même sans échange, vous devez particulièrement être conscient de la mémoire virtuelle si vous écrivez un pilote de périphérique pour un périphérique qui fait du DMA (accès direct à la mémoire). Votre code de pilote s'exécute sur le CPU, ce qui signifie que ses accès à la mémoire se font via la MMU (virtuelle). Le périphérique ne passe probablement pas par la MMU, il voit donc les adresses physiques brutes. Donc, en tant que rédacteur de pilotes, vous devez vous assurer:

  1. Toutes les adresses de mémoire brute que vous transmettez au matériel sont physiques et non virtuelles.
  2. Tous les grands blocs de mémoire (multipages) que vous envoyez sont physiquement contigus. Un tableau 8K peut être virtuellement contigu (via la MMU) mais deux pages physiquement distinctes. Si vous dites à l'appareil d'écrire 8K de données à l'adresse physique correspondant au début de cette matrice, il écrira le premier 4K où vous vous attendez, mais le second 4K corrompra une partie de la mémoire quelque part. :-(

4

J'essaierai de commencer lentement, puis de rassembler tout cela pour vous. C'est comme ça:

La mémoire virtuelle, telle qu'elle est couramment utilisée, fait référence à la «pagination». Comme son nom l'indique, la pagination est comme un bloc-notes humain.

Lorsque vous travaillez sur des sommes simples ou que vous apprenez des informations simples, vous faites tout dans votre tête: il vous suffit de charger toutes les informations, de les traiter et d'obtenir la réponse. C'est comme un ordinateur qui charge des fichiers à partir du disque dur - il charge les programmes ou les images ou autres informations dont il a besoin pour travailler dans sa "mémoire réelle" (ou "mémoire physique") et fonctionne avec eux avec son "cerveau" ( son processeur).

Cependant, lorsque vous apprenez des informations complexes ou travaillez avec des sommes complexes, vous ne pourrez peut-être pas tout mettre dans votre tête à la fois. Vous êtes confus, vous commencez à ralentir, vous n'arrivez pas à tout garder en même temps et vous devez oublier quelque chose pour vous souvenir d'autre chose.

La solution humaine consiste à utiliser un bloc-notes. Nous notons sur les pages toutes les choses dont nous ne pouvons pas nous souvenir en même temps, mais nous y faisons référence en faisant les sommes. Nous ne pourrons peut-être pas nous souvenir d'une énorme liste de chiffres de ventes pour le mois, mais nous pouvons regarder les pages, obtenir les informations un peu à la fois et traiter chaque bit. C'est comme si l'ordinateur «paginait» sa mémoire - écrivant des pages pleines d'informations, les plaçant dans la «mémoire virtuelle» pour référence ultérieure, et réalisant qu'il avait besoin d'une page, et rechargeant cette page de la mémoire virtuelle dans la mémoire réelle. Sous linux et unix, l'endroit où ces pages sont stockées est littéralement appelé un "fichier d'échange", et les pages de données en mémoire sont littéralement appelées "pages". Différents systèmes ont des noms différents pour ces choses, mais le concept général est à peu près le même.

Donc, la pagination est très simple. Toutes les pages d'informations ne tiennent pas en mémoire, donc certaines pages sont placées sur le disque et chargées à nouveau plus tard.

Maintenant, là où cela devient plus compliqué, c'est que les systèmes modernes offrent un mappage de la mémoire et une protection de la mémoire, qui sont généralement gérés par le même système matériel de l'ordinateur: l'unité de gestion de la mémoire, ou MMU.

Dans un ordinateur multitâche (moderne), qui peut exécuter de nombreux programmes à la fois et dispose d'une protection de la mémoire, chaque programme est généralement séparé des autres programmes exécutés sur le même système. De cette façon, un programme ne peut pas modifier un autre programme simplement en accédant à sa mémoire - la MMU sépare physiquement l'espace d'adressage d'un programme de celui des autres. En d'autres termes, les programmes de l'utilisateur ne voient pas les programmes d'autres utilisateurs ni même d'autres programmes. Ils ne voient pas la "mémoire réelle" - ils voient leur propre "mémoire virtuelle".

Maintenant, ce concept d'isolement de la mémoire et le concept de fichier d'échange sont deux choses conceptuellement différentes, c'est probablement pourquoi vous êtes confus. Cependant, la clé est qu'ils fonctionnent tous les deux à l'aide de la MMU - l'unité de gestion de la mémoire, qui divise la mémoire en pages et mappe les pages à un espace d'adressage virtuel.

Ainsi, lorsqu'un programme demande de la mémoire à une certaine "adresse de mémoire", ce qui se passe réellement, c'est que les pages de mémoire de ce programme et leurs adresses correspondantes ("l'espace d'adressage" du programme) sont recherchées, et la page qui correspond à ce bloc de mémoire est trouvé. Cette page peut être chargée quelque part dans la mémoire réelle, auquel cas le programme est autorisé à accéder, ou, elle peut être paginée vers un disque. S'il est paginé, il déclenche alors un «défaut de page» - le disque est accessible et la page est chargée en mémoire. Le programme fonctionne donc même lorsqu'il n'y a pas assez de mémoire, mais il s'exécute LENTEMENT, s'il doit utiliser le disque pour ce qui serait normalement un accès mémoire très rapide.

Maintenant, s'il n'y a pas assez d'espace pour charger cette page en mémoire, vous avez un problème. Dans ce cas, une page OTHER déjà en mémoire doit être "échangée" sur le disque, de sorte que la page du premier programme peut être chargée. Ou, ils peuvent également être des pages du même programme. Vous le voyez parfois dans les programmes graphiques, par exemple, sur des systèmes fortement chargés, lorsqu'une partie de l'image est chargée lentement et dessinée rapidement, puis la partie suivante est chargée également lentement et dessinée rapidement, et lorsque vous reprenez le travail avec la première partie, c'est encore lent. C'est parce qu'ils sont chargés pour être travaillés, puis échangés à nouveau, donc quelque chose d'autre peut être travaillé. Évidemment, c'est une façon très lente de travailler, et ce dont vous avez vraiment besoin, c'est de plus de VRAIE mémoire.


Je suis 100% en désaccord avec cette réponse. Si la «mémoire virtuelle» faisait référence à la pagination, un système qui ne recherche pas (par exemple, sans permutation ou fichiers d'échange activés) ne pourrait pas prendre en charge la mémoire virtuelle. Mais c'est évidemment fou.
David Schwartz

@DavidSchwartz - J'ai d'abord eu une réaction similaire à la vôtre, mais en lisant la réponse plus en détail, je ne pense pas que ce soit si mauvais. Considérez Wikipedia / mémoire virtuelle / Paged dit "Presque toutes les implémentations de mémoire virtuelle divisent un espace d'adressage virtuel en pages, blocs d'adresses de mémoire virtuelle contiguës". C'est-à-dire que la «pagination», au sens large, ne nécessite pas de fichier d'échange , mais fait référence au mappage d'adresses virtuelles en adresses physiques.
ToolmakerSteve

1
Hmm, d'un autre côté, Lee dit "Toutes les pages d'informations ne tiennent pas en mémoire, donc certaines pages sont placées sur le disque et chargées à nouveau plus tard.", Donc David a raison: cette réponse manque le fait essentiel que la pagination ne concerne pas seulement la pagination sur le disque . Du côté positif, Lee continue à mentionner d'autres avantages de la mémoire virtuelle (isolation de la mémoire). Si cette réponse était reformulée pour ne pas confondre les «pages de mappage de la mémoire virtuelle» avec la «pagination sur le disque», elle serait plus utile.
ToolmakerSteve

@ToolmakerSteve Le problème est qu'il s'agit d'une idée fausse très courante et tout ce qui renforce cette idée fausse est, l'OMI, une mauvaise chose. C'est particulièrement mauvais ici quand cette réponse essaie d'expliquer les concepts très basiques dans une affaire très simple - il est le plus important de ne pas jeter les bases sur une idée fausse commune!
David Schwartz

@DavidSchwartz - Je suis d'accord. Vous avez raison, il ne définit pas la "mémoire virtuelle", il définit "le fonctionnement d'un fichier d'échange". Au début, j'avais pensé que le problème était simplement que Lee n'avait pas réussi à faire la distinction entre "pagination = mappage des pages de mémoire du virtuel au physique" et "fichier de page = mappage des pages sur le disque", mais après relecture, il ne parlait vraiment que sur le mappage sur le disque. (Comme nous pouvons le voir, d'après la citation du manuel, de toutes les autres réponses sauf celle du capitaine, et d'une recherche sur Google, ce mélange des deux concepts est très répandu. Je suis sûr que j'en suis coupable.)
ToolmakerSteve

0

Je sais qu'il est trop tard ... mais je pense que c'est encore utile.

  • Tous sont corrects selon différents points de vue.
  • La mémoire virtuelle est une technique de gestion de la mémoire alors que la mémoire d'échange était une zone sur le lecteur de disque. La mémoire d'échange est généralement appelée espace d'échange. L'espace d'échange fait référence à la partie de la mémoire virtuelle qui est réservée comme emplacement de stockage temporaire. L'espace d'échange est utilisé lorsque la RAM disponible n'est pas en mesure de répondre aux besoins de la mémoire du système
  • Vous pouvez vous référer au lien ci-dessous pour plus de détails

-2

Eh bien, si nous comprenons le mot virtuel, je pense que nous pouvons comprendre comment il se rapporte à la mémoire.

"Virtuel" tel que défini sur Dictionary.com: "simulé ou étendu temporairement par un logiciel informatique: un disque virtuel en RAM; mémoire virtuelle sur un disque dur."

Dans le cas de la mémoire virtuelle, le système simule la mémoire système en utilisant des ressources de mémoire plus lentes (disque dur, clé USB, etc.). Lorsque de la mémoire supplémentaire est requise, le système échangera des données dans la mémoire système qui ne sont pas nécessaires au disque dur. lecteur ou ressource que vous avez configuré. Cela libère de la mémoire système afin que votre application puisse continuer la tâche qu'elle effectuait.

L'échange est un processus continu et donc si vous mettez à niveau votre mémoire, vous devriez voir une amélioration des performances car le système ne devrait pas nécessiter un échange pour ralentir la mémoire car il est trop fréquent.


-2

La mémoire virtuelle est une caractéristique d'un système d'exploitation (OS) qui permet à un ordinateur de compenser les pénuries de mémoire physique en transférant temporairement des pages de données de la mémoire vive (RAM) vers le stockage sur disque.

Cela signifie que c'est comme un miroir ou un exemple de mémoire utilisé dans une machine virtuelle ou une boîte virtuelle pour essayer les systèmes d'exploitation sans formater l'ordinateur.


Non, c'est de la pagination.
David Schwartz,

-4

La mémoire virtuelle est un bloc de votre disque dur que le système utilise comme fichier d'échange en plus de la RAM physique.

Cela devient difficile et parfois lent, car Windows ne défragmente PAS cette partie de votre disque dur.

Les 2 meilleurs conseils que je peux offrir: 1) Virt Mem doit être réglé à la fois min et max à environ 1,5 fois votre mémoire physique. ex. 2 Go de RAM = 3070 Mo Virt. 2) Lors de la défragmentation, désactivez votre fichier d'échange. Défragmentez 2x et réinitialisez le numéro d'origine. Cela donne une tranche de lecteur propre et augmentera la vitesse du fichier d'échange.


1
Ce n'est pas tout à fait vrai - les gestionnaires de mémoire modernes virtualisent TOUTE la mémoire système. C'est ce qui permet la séparation des processus - chaque processus ne peut toucher que sa propre mémoire. Le gestionnaire de mémoire est responsable du mappage de ces pages virtuelles sur le stockage réel et éventuellement sur un disque fixe.
Anthony Giorgio

1
"Windows ne défragmente PAS cette partie de votre disque dur." il suffit de nuke pagefile.sys, de redémarrer, de défragmenter le disque et de réactiver la pagination, voilá, un nouveau fichier de page contigu! cependant, le PageDefrag de Sysinternals fait un meilleur travail car il placera également le fichier d'échange au début du lecteur / de la partition pour de meilleures performances.

1
Si cette réponse était correcte, alors un système Windows sans aucun fichier d'échange configuré ne pourrait fournir aucune prise en charge de mémoire virtuelle. Mais c'est évidemment faux. Un tel système pourrait toujours, par exemple, mapper des fichiers dans un espace d'adressage de processus dépassant la RAM physique, qui est un exemple de mémoire virtuelle.
David Schwartz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.