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 :

La mémoire en Pmode et en Rmode - la pile


Sujet :

Assembleur

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    339
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut La mémoire en Pmode et en Rmode - la pile
    Salut à tous,

    J'aurais aimé savoir où se trouve la mémoire en Rmode(soit 1MO) ET en Pmode(4GO). Est-ce-que c'est dans la RAM ? Au niveau de la cache ?
    Que se passe-t-il quand je fais :Comment est concue la pile("stack segment") ? Utilise-t-elle la RAM ?
    Je ne recherche que des réponses simples comme par exemple "le Rmode utilise la RAM."

    Merci d'avance

    Le mage tophinus
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Tout utilise la RAM. Le problème est de savoir comment. En RMode tu accede a la RAM de la manière segment:offset ou l'adresse physique exacte ou se trouve les donénes dans la RAM est

    segment * 16 + Offset

    En pmode, c'est plus compliqué mais c'est sous la forme

    base + offset

    Le(s) segment(s) de donnée correspond a l'espace mémoire reservé a stocker toutes tes variables "globales" ou en terme d'assembleur, ce que tu déclare

    Variable db ?

    Quand tu lance un programme l'os copie tout le programe dans la RAM, et le premier segment de RAM où sont située les donnée du segment de donnée, est affecté a ds.

    Le stack segment est la notation utilisée courament (entre autre) par les langages évoluées. En asm, tu doit t'occuper toi meme de la pile. Cad que la pile est pointée par es:esp
    Donc tu dois dire a ton exe je veux par exempel 300 octets de pile. Quant au déclaration de variables dans le segment de pile (variables locales) on peux prendre exemple sur le code généré par une fonction dans un langage évolué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int Fonction()
    {
      long A = 2;
      return A + 4;
    }
    où la pile sera gérée ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function proc C
     
      mov push ebp       ;Sauvegarder ebp
      mov ebp, esp       ;Utiliser ebp comme pointeur de pile
      add esp, 4         ;Deplacer la pile de 4 (pour les autre fonctions appellées a l'interieur de cette fonction)
                         ;4 = sizeof(long)
     
      mov [ebp-00h], 2   ;A = 2
     
      mov eax, [ebp-00h] ;return A + 4
      add eax 4          ;(Valeur de retour dans eax)
     
      ret
    Bon c'est qu'un exemple, mais regarde le code généré par un compilateur C/C++. (Souvent ils optimisent donc c'est pas toujours le même squellette ca dépend ce que fait la fonction.

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    339
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut
    si je comprends bien, la pile n'est utilisée que lors des "push" ou des "call"(vu que l'adresse de retour est stockée dans la pile, si mes connaissances sont bonnes).

    Reste qqs questions :

    - Quelle est la taille maximale alouable pour une pile ?
    - En Rmode, est-ce que la taille de l'éxécutable+la taille de la pile doit être <1MO ou est-ce seulement l'un des deux ?
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    vi c'est ca pour la pile. La taille maximum je sait pas trop, ca dépends surment de ce que l'os t'autorise. En Pmode la pile ne peux pas faire plus de 65536 octets evidement a moins de l'etendre sur plusieurs segments de pile, je ne crois pas que ca se fasse.

    En rmode, c'est le tout qui doit etre < a 1 Mo. Mais ca doit etre encore plus petit que ca. En Rmodee on ne peut acceder qu'a 1 mo, même l'os, alors evidement ton executable ne peut que demander moins d'1 mo. C'est pas sur que l'os t'autorisque bcp plus que 600 Ko. Après tu réparti comme tu veux l'espace que tu as demandé a l'os

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 19
    Points : 21
    Points
    21
    Par défaut
    euh il me semble qu'en PMode la taille de la pile est >> 64Ko on peut presque y mettre toute la RAM parce que ça se définit dans les descripteurs comme les autres registres de segments.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 96
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par Guru_Meditation
    on peut presque y mettre toute la RAM
    On peut même mettre toute la ram en théorie.
    Responsable du projet SKAN (OS à but didactique)
    Contactez moi pour toutes questions ou remarques sur le projet.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 19
    Points : 21
    Points
    21
    Par défaut
    oui en théorie seulement parce que faudrait pas écraser le code avec les données qu'on empile.

  8. #8
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    339
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut
    Bon alors une dernière question technique pour finir :
    Je sais qu'en Pmode on est limité à 4GO, ça veut dire en gros que les constructeurs vont devoir créer un nouveau "mode" (du style "GigaMode") si on a une RAM>4GO ???

    Sinon merci à tous pour vos réponses
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Euh, il vont plutot passer au processeur 64 bits je crois, c'est plus pratique

  10. #10
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    339
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut
    j'ai un peu de mal avec ces calculs là, ça ferait monter la capacité de RAM maximale à combien en Pmode ?
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    à 2^64 octets, soit 2^60 * 2^4 ~= 10^18 * 16 Octets. Bon je me rappelle plus ce qu'il y a au dessus de tera (10^12), donc en gros ca fait 16 * 10^6 * 10^12, donc 16 millions de tera octets si je me trompe pas soit 32 800 000 000 Divx stockables siùultanément dans la mémoire vive.

  12. #12
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    339
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut
    Cool. Merci pour ces infos Blustuff.
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 96
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par Blustuff
    Bon je me rappelle plus ce qu'il y a au dessus de tera
    Après Tera: Peta, Exa
    Les processeurs 64 bits peuvent traiter jusqu'à 16 ExaOctets=16000 Po =16000000 To =16 000 000 000 Go
    Responsable du projet SKAN (OS à but didactique)
    Contactez moi pour toutes questions ou remarques sur le projet.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 19
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par 2PluS4.AbsoluteRoot
    Les processeurs 64 bits peuvent traiter jusqu'à 16 ExaOctets=16000 Po =16000000 To =16 000 000 000 Go
    !?
    Tien est-il vrai sur ce que j'ai lu quelque part que maintenant 1Mo =1 000 000 octets et que 1Mio =1048576 octets Mio comme Mebioctet
    ???
    ça fait bizzare non?

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 96
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par Guru_Meditation
    1Mo =1 000 000
    En fait, lorsque j'ai dit que 16 ExaO etaient égaux à 16000 Po, c'était une approximation. Plus précisément :
    1 Mo = 2^10 Ko = 2^20 octects.
    2^20 = 1048576.
    Responsable du projet SKAN (OS à but didactique)
    Contactez moi pour toutes questions ou remarques sur le projet.

  16. #16
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 65
    Points : 105
    Points
    105
    Par défaut
    Bonjour,

    Depuis le pentium pro (IA-32), intel supporte un mode d'adressage étendu (PAE - Page Address Extension) sur 36 bits, d'où 64 To théoriques. Il existe aussi un mode d'extension de la taille de page jusqu'à 2Mo (PSE - Page Size Extension).

    Ceci est supporté sous linux et windows.

    golem
    +++

Discussions similaires

  1. Transition en pmode à partir du rmode
    Par Yoha2 dans le forum Programmation d'OS
    Réponses: 6
    Dernier message: 18/06/2008, 14h18
  2. fichier mappé en mémoire
    Par WinBernardo dans le forum Delphi
    Réponses: 7
    Dernier message: 01/12/2006, 10h38
  3. Déterminer l'adresse d'une application en mémoire
    Par Gib dans le forum x86 32-bits / 64-bits
    Réponses: 9
    Dernier message: 11/06/2002, 15h27
  4. Vitesse de la mémoire vidéo
    Par Anonymous dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 06/06/2002, 21h20
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 17h10

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