IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation d'OS Assembleur Discussion :

Système de pagination - Mémoire virtuelle


Sujet :

Programmation d'OS Assembleur

  1. #1
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Octobre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Octobre 2011
    Messages : 14
    Points : 20
    Points
    20
    Par défaut Système de pagination - Mémoire virtuelle
    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...

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 377
    Points : 23 663
    Points
    23 663
    Par défaut
    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.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Octobre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Octobre 2011
    Messages : 14
    Points : 20
    Points
    20
    Par défaut
    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...

  4. #4
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Bonjour.

    Je conseille la lecture de l'article suivant :
    http://sos.enix.org/wiki/upload/SOSD...texte-art4.pdf

  5. #5
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Octobre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Octobre 2011
    Messages : 14
    Points : 20
    Points
    20
    Par défaut
    Merci !

  6. #6
    Membre éclairé
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Points : 701
    Points
    701
    Billets dans le blog
    1
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide plz :Mémoire virtuelle et pagination
    Par router_ dans le forum Linux
    Réponses: 0
    Dernier message: 07/06/2010, 20h23
  2. Réponses: 5
    Dernier message: 17/04/2008, 10h01
  3. mémoire virtuelle minimale insuffisante
    Par sempire dans le forum Windows XP
    Réponses: 16
    Dernier message: 15/10/2003, 17h29
  4. [Turbo Pascal] Limite de la mémoire virtuelle
    Par moon tiger dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 08/02/2003, 22h30
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo