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 :

Adressage en 32 bits


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 Adressage en 32 bits
    Bonjour à tous,

    Je développe un OS depuis un certain temps et je suis toujours confronté à un problème.
    Quand on dit que l'on ne peut adresser que 4GB avec un processeur 32bit classique, c'est 4GB de RAM ou 4GB en comptant la RAM et toutes les adresses qui renvoie vers les disques dur, périphérique,...
    Sinon, si vous avez des bon cours sur la gestions de la mémoire, de la pagination, sur l'IDT, ou sur le développement des drivers, merci de m'indiquer les liens.

    Merci d'avance

  2. #2
    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
    4 Go, c'est pour la RAM.
    Pour en savoir plus sur les sujets qui t'intéressent, tu peux toujours jeter un coup d'oeil sur ma page.
    Sinon, je te recommande le site / forum suivant :http://www.osdev.org/

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 375
    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 375
    Points : 23 634
    Points
    23 634
    Par défaut
    Citation Envoyé par mmaximum Voir le message
    Quand on dit que l'on ne peut adresser que 4GB avec un processeur 32bit classique, c'est 4GB de RAM ou 4GB en comptant la RAM et toutes les adresses qui renvoie vers les disques dur, périphérique,...
    Il n'y a pas d'adresse « qui renvoient vers les disques durs » à proprement parler. Un disque dur est un périphérique qui se pilote au même titre que tout le reste. La mémoire swap n'est qu'une couche d'abstraction, qui provoque une interruption au niveau du processeur pour qu'il puisse exécuter du code qui va faire une opération de sauvegarde/rechargement automatique de manière transparente pour le programme interrompu.

    Cependant, cela signifie bien que ta mémoire soit physique ou virtuelle, l'espace total adressable simultanément ne pourra pas dépasser 4 Go, ce qui reste beaucoup ! Il faut donc paginer, d'une manière ou d'une autre.

    Maintenant, en ce qui concerne le pilotage des périphériques proprement dit, les processeurs Intel proposent des instructions IN/OUT spéciales qui se distinguent de l'adressage de la RAM classique mais au final, électroniquement, le tout est réinjecté sur le même bus, donc cet espace sera quand même réservé au final sur les mêmes 4 Go, mais il est négligeable par rapport au reste.

    En revanche, pour tout ce qui est PCI, il y a bien un bus distinct de 32 ou 64 bits, mais il n'est pas visible directement. Pour le peu que j'en sais, cela se pilote par paquets (un peu comme avec de l'IP) que l'on rédige en mémoire, et qui contiennent une entête de configuration et une charge utile. Le paquet est ensuite émis en une fois.

  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
    Quand on dit qu'un processeur 32 bits peut adresser 4GB, il s'agit de la taille de l'espace d'adressage logique, en gros ce qui est accessible simultanément. Mais dans la plupart d'entre eux, une adresse logique est transformée en une adresse physique et cette transformation peut former des adresses de plus de 32 bits de large (recherche pagination et PEA dans le cas du X86).

    Dans le cas des X86, il faut ajouter la segmentation. Même si les OS courant ne l'utilisent pas (ou utilisent les registres de segments comme artifice pour avoir des registres supplémentaires, par exemple pour pointer vers des données spécifiques aux threads), elle donne une couche de transformation supplémentaire permettant de considérer que les adresses logiques y font 46 bits, mais ces 46 bits sont d'abord transformés en adresses sur 32 bits puis en adresses physiques.

    Pour complèter ce qu'écrivait Obsidian, il y a deux techniques pour l'adressage des périphériques. La première est de leur donner des adresses normales (le processeur doit cependant savoir qu'il y a des périphériques derrières pour désactiver les caches, sinon...; c'est le cas par exemple pour la mémoire vidéo; l'avantage est que ça permet à l'OS d'utiliser les mécanismes de gestion de mémoire pour contrôler l'accès aux périphériques), soit leur donner un espace d'adressage particulier (c'est ce que permettent les instructions in et out du X86), auxquels cas ils n'empiètent pas sur l'espace physique d'adressage (contrairement à ce qu'écrivait Obsidian; même si c'est les mêmes bus qui sont utilisés -- je ne me souviens plus de ces détails -- il y a un signal supplémentaire indiquant qu'il s'agit d'une instruction d'IO).

    La remarque au sujet du signal supplémentaire me rappelle une dernière chose: certains processeurs sortent des signaux indiquant leur état interne (par exemple leur mode -- ring 0 à 3 pour les X86 --, s'il s'agit d'un accès à des données ou au programme, ...) qu'on peut utiliser pour faire des MMU pour ceux qui n'en n'ont pas ou pour démultiplier les espaces mémoires (séparer complètement le programme des données -- ça se fait plutôt sur des processeurs plus petits et en embarqué où le programme est de toute manière en ROM).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

Discussions similaires

  1. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25
  2. Main icon (16 bits)
    Par DR dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/09/2002, 08h23
  3. Cherche l'algo crc 16 bits
    Par icepower dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 21/08/2002, 13h27
  4. Debugger 16-32 bits
    Par Mat dans le forum Assembleur
    Réponses: 4
    Dernier message: 28/06/2002, 11h34
  5. Lire 1 bit d'un fichier en C
    Par Anonymous dans le forum C
    Réponses: 3
    Dernier message: 23/05/2002, 18h31

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