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

Assembleur Discussion :

Adresses virtuelles et pagination sous les OS multitâches


Sujet :

Assembleur

  1. #1
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 218
    Points : 1 437
    Points
    1 437
    Par défaut Adresses virtuelles et pagination sous les OS multitâches
    Bonjour,

    Depuis toujours j'ai écrit mes applications avec des langages de haut niveau sans me préoccuper de comment Windows traduit les adresses logiques ainsi que la pagination de mon programme en mémoire !!!
    Je prendrais le cas de Windows pour les questions suivantes:
    Quelle est la taille d'une page sous Windows ??
    Si adresse 32 bits donc 4 Go adressables, or une RAM n'est quelquefois que 36-128-256 Mo et la mémoire swap sur disque dur de 1,5 fois la RAM. Avec quoi sera comblé le vide pour atteindre les 4 Go ??
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Citation Envoyé par randriano Voir le message
    Quelle est la taille d'une page sous Windows ??
    La taille des pages est dépendantes de différents facteurs. En premier lieu, l'architecture du processeur, en second lieu le système lui-même.

    La taille minimale des pages sous x86 et x86-64 est de 4Ko (c'est ce qu'on appelle la granularité d'une page, il n'est pas possible de descendre en dessous. Voir bit G du descripteur de segment). Ces pages sont les "petites pages".

    Le système peut utiliser un système permettant de prendre en compte des page de 4Mo sous x86 ou 2Mo (sous x86-64). Voir le bit P des PDE (Page Directory Entry). Ce sont les "pages larges".

    Windows fait (généralement et par défaut) un "mix" des deux, les pages larges sont utilisées pour le système et les petites pages pour la partie utilisateur (i.e : non système).

    Si adresse 32 bits donc 4 Go adressables, or une RAM n'est quelquefois que 36-128-256 Mo et la mémoire swap sur disque dur de 1,5 fois la RAM. Avec quoi sera comblé le vide pour atteindre les 4 Go ??
    En fait il y a ce qui est adressable de ce qui existe réellement.

    Chaque processus dispose bien de 4Go adressable, cela veut simplement dire 4Go d'adressage théorique !

    Dans l'espace d'adressage du processus certaines pages sont présentes (elles existent réellement et physiquement), tandis que d'autres sont inexistantes. Il y a donc des trous dans l'espace d'adressage d'un processus, simplement parce que des pages n'existe pas.

    Ces pages qui n'existent pas ne consomment aucune mémoire physique, ni même virtuelle (donc aucun swap non plus).

    Pour les pages qui existent réellement, si la mémoire physique est trop petite[*], ces pages sont mis sur le swap (elles sont "paged out"), et si on manque de swap, c'est le crash assuré.
    [*] Ceci dit, il me semble que le système peut décider de "paged-out" une page alors que de la mémoire physique est disponible.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par randriano Voir le message
    Quelle est la taille d'une page sous Windows ??
    La taille d'une page mémoire est un paramètre du CPU, pas de l'OS.
    Ensuite, il y a des CPUs qui permettent de faire varier la taille de la page (BIOS), et des OS qui s'en accomodent.


    Citation Envoyé par randriano Voir le message
    Si adresse 32 bits donc 4 Go adressables, or une RAM n'est quelquefois que 36-128-256 Mo et la mémoire swap sur disque dur de 1,5 fois la RAM. Avec quoi sera comblé le vide pour atteindre les 4 Go ??
    A priori ces 4Go adressables sont répartis entre 2 Go pour le système et 2Go pour les processus utilisateurs.

    Il s'agit d'un espace d'adressage "virtuel".

    En dessous l'OS rame pour que lorsque le programme qui s'exécute "touche" une de ces adresses virtuelles, cela puisse correspondre à de la mémoire physique avec les informations attendues "dedans".

    L'OS va donc multiplexer les 256Mo de la machine sur l'espace "virtuel" qui sera "touché" par l'exécution du programme. Et l'unité qui va être multiplexé est une page ou un groupe entier de pages.

    Lorsqu'un programme démarre, l'espace "virtuel" est construit a partir du contenu des fichiers des exécutables... Lors de l'exécution, le programme va crée des variables, sauver un contexte dans la pile d'exécution... Lorsque les pages physiques correspondantes devront être ré-assignées à d'autres endroit de la mémoire virtuelle, il faudra en sauvegarder le contenu sur disque.... Dans le ficher swap.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Neitsa Voir le message
    ...
    Chaque processus dispose bien de 4Go adressable, cela veut simplement dire 4Go d'adressage théorique !

    Dans l'espace d'adressage du processus certaines pages sont présentes (elles existent réellement et physiquement), tandis que d'autres sont inexistantes. Il y a donc des trous dans l'espace d'adressage d'un processus, simplement parce que des pages n'existe pas.
    ...
    Hmm
    Les 4 Go sont adressables.... Après lorsqu'on essaie d'accéder à une adresse quelconque de l'intervalle il pourra se passer plusieurs chose:
    1 - l'adresse est accessible et la page 'virtuelle' correspond à une page physique,
    2 - l'adresse est accessible et la page 'virtuelle' ne correspond à rien
    3 - l'adresse n'est pas accessible.

    Lorsque je suis dans le cas (2), l'OS est supposé trouver une page physique, y mettre le contenu attendu et mettre une correspondance entre l'adresse virtuelle et le contenu de la page physique.

    Si l'instruction suivante du programme tape dans des adresses virtuelles proches, la page physique correspondante sera déjà là - et nous sommes dans le cas (1).

    Le cas (3) est plus 'difficile'.
    Supposons que nous puissions adresser 4Go avec des pages de 4Mo.
    Pour rendre compte de la correspondance 1 ou 2, il me faut un tableau de 1000 entrées qui donne soit la page physique, soit la page disque à partir de laquelle lire les informations, soit.

    Ce tableau (table de pages) devra être en mémoire physique et occupera d'autant plus de place que la taille des pages sera petite.

    Ce tableau est "spécial" car utilisé par le CPU pour réaliser la correspondance 'virtuel' -> 'physique'. L'OS ne fait rien sinon que gérer l'exception: va chercher la page dur le disque.

    C'est ici qu'intervient le 'rien'.

    Plutôt que de remplir le tableau pour 'rien', on suppose que la mémoire virtuelle est allouée de 0 vers 4 Go...
    Les routines qui créent l'espace virtuel vont donner une limite supérieure atteinte: cela permet de limiter l'allocation des pages physiques nécessaires à la seule description de l'espace virtuel alloué.

    Pour optimiser encore, les CPU modernes ont plusieurs niveaux de page de tables, un tableau de correspondance qui décrit un tableau de correspondance,...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 218
    Points : 1 437
    Points
    1 437
    Par défaut
    a taille d'une page mémoire est un paramètre du CPU, pas de l'OS.
    Ah bon, merci de me l'avoir appris

    Si la pagination est même gérée par le processeur, donc l'adressage en assembleur aussi adresse une page.
    Peut-on donc faire MOV EDX, [0xFFFFFFFF] sur une RAM qui n'est que de 256 Mo?
    En fait, le registre DS est-il encore utile si on fait MOV EAX, DS:0x45454545 puisque la technique actuelle n'est plus segmentation mais pagination!!
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par randriano Voir le message
    Ah bon, merci de me l'avoir appris
    Si la pagination est même gérée par le processeur, donc l'adressage en assembleur aussi adresse une page.
    Peut-on donc faire MOV EDX, [0xFFFFFFFF] sur une RAM qui n'est que de 256 Mo?
    Oui mais avec quelques précautions:
    1 - normalement 0xFFFFFFFF est une adresse système, même s'il y a de la mémoire physique correspondant à cette adresse, il va falloir le faire en mode privilégié (privilèges au sens processeur pas OS).
    Plus généralement, l'accès a une page (lecture, modification) est contrôlé par un masque associé au descripteur de la page. Lors d'une tentative d'accès, le processeur contrôle.
    2 - C'est l'OS qui renseigne les tables de pages - qui fait la correspondance entre adresses virtuelles et physiques - on peut donc imaginer toucher l'adresse 4Go alors qu'il n'y a que 256Mo.
    3 - Lorsqu'on démarre le CPU, il n'y a pas "d'adresses virtuelles", l'initialisation construit les tables de pages qui vont pouvoir être ensuite utilisées lorsqu'on active le mode 'virtuel'.

    Citation Envoyé par randriano Voir le message
    En fait, le registre DS est-il encore utile si on fait MOV EAX, DS:0x45454545 puisque la technique actuelle n'est plus segmentation mais pagination!!
    Sur le principe, un espace virtuel segmenté est assez 'simple', mais la segmentation sur x86 est un peu trop spéciale à mon goût pour être sûr de ne pas raconter n'importe quoi. Désolé.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 218
    Points : 1 437
    Points
    1 437
    Par défaut
    normalement 0xFFFFFFFF est une adresse système, même s'il y a de la mémoire physique correspondant à cette adresse, il va falloir le faire en mode privilégié
    Donc même si la Ram n'est que de 256 Mo, MOV EAX, [0xFFFFFFFF] = 4 Go donnera une valeur à cause de la pagination (mémoire virtuelle)? Je parle là du processeur mais pas la pagination sous Windows ou Linux !!!
    C'est quoi mode privilégié, bon si vous avez svp un lien tuto à me donner ? merci d'avance
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par randriano Voir le message
    Donc même si la Ram n'est que de 256 Mo, MOV EAX, [0xFFFFFFFF] = 4 Go donnera une valeur à cause de la pagination (mémoire virtuelle)? Je parle là du processeur mais pas la pagination sous Windows ou Linux !!!
    "conceptuellement", il est préférable de parler de "table de page". C'est le biais avec lequel le CPU va traduire les adresses "virtuelles" en adresses physiques.
    En gros, il y a deux cas: il y a ou pas de page physique correspondante.
    Lorsqu'il n'y en a pas, le processeur génére une interruption pour signaler à l'OS qu'il y a un soucis. L'OS 'résoud' cela en trouvant une page physique et en l'initialisant avec le contenu qui va bien.
    C'est derrière cette résolution qu'on va parler de 'pagination' et d'utilisation du swap.

    Citation Envoyé par randriano Voir le message
    C'est quoi mode privilégié, bon si vous avez svp un lien tuto à me donner ? merci d'avance
    Un processeur implante au moins deux modes: utilisateur et système.

    Lorsque l'OS est démarré, on passe d'un mode à l'autre via les appels systèmes. Pour interdire à un programme utilisateur d'écrire n'importe quoi là ou il n'a pas le "droit", on va protéger les pages "sensibles".

    Lors d'accès en lecture ou en écriture, le CPU vérifie que la protection de la page permet l'accès demandé suivant le mode dans lequel s'exécute l'instruction.

    Je n'ai pas de tuto à te proposer sinon te recommander la lecture de l'architecture des ordinateurs écrit et mis à jour par A.Tanenbaum.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 145
    Points : 170
    Points
    170
    Par défaut
    Un explication brève des principes de la pagination et une implémentation simple :
    http://a.michelizza.free.fr/PmWiki/p...hp?n=TutoOS.Mm

    J'espère que celà répondra à tes questions...

Discussions similaires

  1. [Debutant(e)]Eclipse TOTAL: noyé sous les répertoires
    Par albertl dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 03/05/2008, 22h44
  2. [VBA] Trouver l'adresse de la cellule sous le bouton
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/02/2006, 22h53
  3. comment recuperer l'adresse mac en C++ sous win98
    Par stefane1981 dans le forum MFC
    Réponses: 1
    Dernier message: 06/10/2005, 18h20
  4. [C#] MDIChild systematiquement sous les objets de MDIParent
    Par gprodhon dans le forum Windows Forms
    Réponses: 7
    Dernier message: 10/07/2005, 13h12
  5. [XHTML] html > xhtml : ajout d'un espace sous les images
    Par prgasp77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 28/05/2005, 18h43

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