Bonjour,
Est-ce que quelqu'un pourrait m'expliquer clairement ce qu'est la pagination et la mémoire virtuelle ? Parce qu'on ne peut pas dire que le manuel d'Intel est ce qu'il y a de plus clair sur la question, et Wikipédia non plu...
Bonjour,
Est-ce que quelqu'un pourrait m'expliquer clairement ce qu'est la pagination et la mémoire virtuelle ? Parce qu'on ne peut pas dire que le manuel d'Intel est ce qu'il y a de plus clair sur la question, et Wikipédia non plu...
Bonsoir,
En gros, la mémoire virtuelle consiste à faire volontairement croire à un programme qu'il y a plus de mémoire disponible qu'il n'y a de RAM physiquement installée.
Le système découpe le plan mémoire adressage en pages et, lorsque la RAM commence à être utilisée en totalité et que d'autres programmes continuent à en demander, le système en libère en sauvegardant automatiquement et de façon complètement transparente certaines de ces pages sur le disque, en les choisissant selon certains critères comme la fréquence d'utilisation ou la priorité des processus qui les possède.
Avantage : tu peux faire tourner autant de programmes que tu veux, tant qu'il te reste de l'espace disque. Et tu ne te retrouves pas bloqué par un processus qui réclamerait toute la mémoire disponible pour se lancer et qui, au final, ne l'utiliserait jamais.
Inconvénient : si tous tes processus sont réellement actifs, ton système passe son temps à « échanger » des pages (d'où le terme de swap) en sauvegardant les moins utilisées pour recharger, à la place, celle que le processus réclame. Ton ordinateur fonctionne donc à la vitesse de ton disque dur et plus à celle d'un composant électronique. C'est ce qui fait que ton ordinateur est lent et que tu entends ton disque dur travailler en permanence quand tu manques de mémoire.
La pagination, à la base, est un terme générique qui désigne le fait d'organiser la mémoire en pages de taille fixe. Ça se faisait beaucoup du temps des 8 bits et 16 bits, chez lesquels le plan mémoire adressable n'était pas assez grand pour visualiser la mémoire disponible en entier (on parle bien de RAM physique. Il n'y avait pas de mémoire virtuelle sur ces engins). On utilisait un système de blocs qui occupaient tous la même position. Un seul bloc était donc visible à la fois et on choisissait le bloc à mapper à un instant t en utilisant un port d'entrée-sortie.
Mais de nos jours, le terme est surtout utilisé pour parler des mécanismes mis en œuvre dans la mémoire virtuelle elle-même. Comme tout doit être transparent pour le programme, c'est en fait le micro-processeur qui déclenche une exception chaque fois que le programme accède à une zone de mémoire qui est censée lui être allouée mais qui, dans les faits, n'est pas chargée en mémoire. Le système la charge donc et rend la main au programme, ni vu ni connu.
Mais pour que cela fonctionne, il faut pouvoir mapper également de manière transparente un bloc de mémoire se trouvant à une adresse donnée vers une autre partie de la mémoire physique. C'est pourquoi les ordinateurs sont équipés soit d'une MMU, soit d'un micro-processeur capable de gérer cela directement et, indépendamment des zones de mémoire officiellement réservées à un programme donné, on découpe la mémoire allouée en pages qui peuvent être redistribuées en mémoire et, par extension, éventuellement ne pas être mappées du tout.
Ouah, merci !
Mais excuse-moi, je ne comprends toujours pas vraiment comment ça marche. Surtout quel intérêt ça a, mis à part le stockage des pages sur un support auxiliaire.
Si je mélange ce que tu dis et la doc de Intel, voilà ce que je comprends :
Les adresses linéaires traduites par la MMU via le système de segmentation (GDT, ...) sont traduites une nouvelle fois par la MMU pour donner une adresse physique. Déjà, une chose que je comprends pas, c'est comment on passe de l'adresse linéaire à l'adresse physique avec la pagination active. Quand la pagination n'est pas active, l'adresse linéaire est l'adresse physique. Mais quelle différence y-a-t-il quand la pagination est active ? Le système de pagination n'entre en jeux qu'après la traduction de l'adresse logique en adresse linéaire qui joue le rôle d'adresse physique, et ne présente donc pas de structure particulière ? Alors que dans la doc de Intel, les adresses linéaires avec la pagination (sur architecture 32 bits) sont formés des trois champs différents ?
En supposant que ce soit un problème résolu, les adresses linéaires se présentent ainsi : 10 bits pour un offset dans la table des répertoires, 10 bits pour un offset dans la table de page pointée par l'entrée sélectionnée dans la table de répertoires, et 12 bits pour un offset dans la page. Comme elle fait soit 4 Ko ou 4Mo, c'est parfait, ça donne 4096 valeurs adressable par page. Ca, je comprends. Du moins, je crois . Donc, ces adresses linéaires sont lues par la MMU pour finalement donner une adresse physique, dans la mémoire physique.
Ce que j'ai cru comprendre aussi, c'est que les espaces mémoire ne sont créés que si ils sont appelé pendant l'exécution d'un programme. Mais ça, c'était très vague dans la doc d'Intel.
Bref, est-ce qu'il serait possible que tu fasses un example d'un programme qui s'exécute en utilisant la mémoire physique et virtuelle, le genre de petit programme à une instruction avec une opérande mémoire ? Parce que j'arrive vraiment pas à me faire une image du fonctionnement de la pagination... Surtout, je ne vois pas l'utilité de la pagination alors qu'il y a déjà la segmentation, à part bien sur, l'extention sur le disque...
Bonjour.
Je conseille la lecture de l'article suivant :
http://sos.enix.org/wiki/upload/SOSD...texte-art4.pdf
pour resumer, la pagination permet de virtualiser les adresses.
un programme prevu pour etre à l'adresse X peut etre chargé à l'adresse Y,
la pagination effectue la translation d'une adresse virtuelle X vers l'emplacement reel Y.
lorsque cet emplacement Y n'existe pas, il est possible d'aller le chercher sur le disque dur (ou ailleur), le mettre à l'emplacement Z, et passer par la pagination pour y acceder comme si c'etait à l'adresse X.
plusieurs programmes peuvent partager des pages.
un programme n'accede qu'aux pages listées dans son repertoire de pages, dans l'ordre ou elles sont listées.
ce qui permet aussi de deplacer des données juste en modifiant l'entrée de page correspondante.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager