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 :

Comment connaître la taille de la mémoire ?


Sujet :

Programmation d'OS Assembleur

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 37
    Points : 30
    Points
    30
    Par défaut Comment connaître la taille de la mémoire ?
    Bonjour à tous,

    Comment fait-on pour trouver la taille de la mémoire vive ? Y a-t-il une interruption pour ? Comment l'utiliser ? Est-elle compatible avec tous les processeurs x86 ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    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 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Comment fait-on pour trouvé la taille de la mémoire vive????
    1) Une seul « ? » au bout de chaque phrase, please.
    2) On demande au système d'exploitation.

    Sous Linux, ça se passe principalement à travers /proc/meminfo ou directement par la libproc.

    Y a-t-il une interruption pour???
    Oui, l'interruption 12h, mais c'est valable uniquement sur PC, c'est obsolète et autant que je me souvienne, ça ne prend pas en compte la mémoire étendue.

    Est-elle compatible avec tous les processeurs x86????
    Non. Cela n'a rien à voir. Un processeur ne fait que dire à son environnement où il a envie de lire ou d'écrire. Il n'a pas de moyen direct de connaître la mémoire physique qui lui est associée, d'autant que bien souvent, celle-ci est gérée par une MMU intermédiaire. Et d'ailleurs, les x86 ne servent pas qu'à fabriquer des PCs.

  3. #3
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Hello,

    J'avais fait un petit prog sous DOS pour connaitre la taille de la RAM

    - Passage en mode FLAT
    - Boucle :
    - Lire un octet en RAM
    - le modifier
    - verifier si la modif a marchee (RAM OK)
    - replacer sa valeur d'origine
    - aller voir 64Ko plus loin
    - si c'est bon, boucler, sinon plus de RAM

    Ca marchait du temps ou les PC se contentaient de 4 ou 8Mo de RAM

    Aujourd'hui, il faut compter aussi avec les cartes graphiques.
    Par exemple, sur mon PC, la plage de cette RAM va de E8000000h a
    EFFFFFFFh et de FEB80000h a FEBFFFFFh
    (merci a windows pour ces infos )

    a+ Francois

  4. #4
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Oui, l'interruption 12h, mais c'est valable uniquement sur PC, c'est obsolète et autant que je me souvienne, ça ne prend pas en compte la mémoire étendue.
    La derniere fois que j'ai regarde (ouille, il y 10 ans? ) il y avait d'autres methodes -- je ne sais plus si c'est avec une interruption ou une autre maniere -- qui permettent de relever ces informations, jusqu'a avoir une map de la memoire avec les zones de memoire, les zones reservees (les BIOS ont un temps reserve 1k ou 2 en fin de la zone des 64K pour stocker des infos), les zones mappees sur des devices PCI,...

    Je regarderais dans le code de Linux pour voir comment il fait ca,... les commentaires devraient fournir des mots cles utiles pour retrouver les references si l'objectif n'est pas de la pure curiosite et qu'un retour a celles-ci est necessaire.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #5
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 69
    Points : 89
    Points
    89
    Par défaut
    effectivement il existe des tables écrites par le bios dans la RAM afin de données des info sur ça configuration (c'est d'ailleurs sur ces tables que s'appuient WMI et MIBs SNMP). Ce sont des standards connu (ACPI et SMBIOS)
    supportés par la quasi-totalité des PC

    Tu devrais y trouver ton bonheur :

    ACPI : http://www.acpi.info/spec.htm
    SMBIOS : http://www.dmtf.org/standards/smbios/

    concernant la ram SMBIOS te fournira les informations attendu (même bien plus)

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    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 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Citation Envoyé par DegubError Voir le message
    concernant la ram SMBIOS te fournira les informations attendu (même bien plus)
    Citons également DMI pour être exhaustifs, si l'on peut l'être.

    http://en.wikipedia.org/wiki/Desktop...ment_Interface

  7. #7
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 69
    Points : 89
    Points
    89
    Par défaut
    à noter que DMI est un sous ensemble de SMBIOS, décrit donc dans le doc de SMBIOS

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Sinon, je sais que GRUB peut éventuellement communiquer la taille de la RAM aux kernels qu'il boote.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Il existe plusieurs façon de faire cela :

    D'abord par les interruptions du BIOS notamment la 15 sous fonctions 88h-8Ah-E802h-E820h et E881.

    Ensuite par PNP en attaquant les ports d'entrées sorties qui vont bien.

    Dans la NVRAM a l'adresse 0x30 et 0x31 par les ports 0x70 et 0x71

    Il est possible aussi de faire un petit programme qui ecrit dans la mémoire jusqu'aux limites au risque de déclencher un handler sur faute d'écriture. C'est risqué mais ça marche.


    ....A suivre y a vraiment bcp de solutions

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/09/2006, 10h16
  2. [WebForms]Comment connaître la taille d'un fichier à uploader ?
    Par WELCOMSMAIL dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 02/05/2006, 15h27
  3. Réponses: 7
    Dernier message: 19/12/2005, 08h54
  4. Réponses: 2
    Dernier message: 14/09/2005, 23h11
  5. Réponses: 3
    Dernier message: 28/06/2005, 09h07

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