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 :

Plusieurs questions (Mémoire, bus et périphériques)


Sujet :

Assembleur

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 28
    Points : 29
    Points
    29
    Par défaut Plusieurs questions (Mémoire, bus et périphériques)
    Bonjour,

    Je suis entrain de lire quelques tutoriels pour pouvoir développer un petit OS, et il y'a un point que je ne comprends pas:

    Il est dit qu'il ya deux méthodes pour les accès aux périphériques:

    Soit utiliser directement les ports (pour les anciens périphériques), auquel cas on utilise le bus correspondant.

    Soit utiliser la mémoire directement, car certains périphériques sont mapés directement en mémoire et dans les basses adresses.



    cat /proc/iomem

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    00000000-0009efff : System RAM
    0009f000-0009ffff : reserved
    000a0000-000bffff : Video RAM area
    000c0000-000cebff : Video ROM
    000cf000-000d09ff : Adapter ROM
    000d0a00-000d3fff : pnp 00:0b
    000f0000-000fffff : reserved
      000f0000-000fffff : System ROM
    00100000-77ecffff : System RAM
      00100000-0031f5d4 : Kernel code
      0031f5d5-0043f2ef : Kernel data
      00496000-00540b0f : Kernel bss
    77ed0000-77ed2fff : ACPI Non-volatile Storage
    77ed3000-77edffff : ACPI Tables
    77ee0000-77efffff : reserved
    78000000-7fffffff : reserved
      78000000-7fffffff : pnp 00:01
    88000000-8801ffff : 0000:00:05.0
    e0000000-efffffff : 0000:00:05.0
    f0000000-f3ffffff : PCI MMCONFIG 0 [00-3f]
      f0000000-f3ffffff : reserved
        f0000000-f3ffffff : pnp 00:0a
    fb000000-fbffffff : 0000:00:05.0
    fc000000-fcffffff : 0000:00:05.0
    fd700000-fd7fffff : PCI Bus 0000:01
    fd800000-fd8fffff : PCI Bus 0000:01
    fd900000-fd9fffff : PCI Bus 0000:03
    fda00000-fdafffff : PCI Bus 0000:04
    fdb00000-fdbfffff : PCI Bus 0000:04
    fdc00000-fdcfffff : PCI Bus 0000:03
    fdd00000-fddfffff : PCI Bus 0000:02
    fde00000-fdefffff : PCI Bus 0000:02
      fdef0000-fdefffff : 0000:02:00.0
        fdef0000-fdefffff : tg3
    fe024000-fe027fff : 0000:00:10.1
      fe024000-fe027fff : ICH HD audio
    fe02c000-fe02cfff : 0000:00:0f.0
      fe02c000-fe02cfff : sata_nv
    fe02d000-fe02dfff : 0000:00:0e.0
      fe02d000-fe02dfff : sata_nv
    fe02e000-fe02e0ff : 0000:00:0b.1
      fe02e000-fe02e0ff : ehci_hcd
    fe02f000-fe02ffff : 0000:00:0b.0
      fe02f000-fe02ffff : ohci_hcd
    fec00000-ffffffff : reserved
      fec00000-fec00fff : pnp 00:0b
      fec80000-fecbffff : pnp 00:01
      fee00000-feefffff : pnp 00:0b
        fee00000-fee00fff : Local APIC
      fefe0000-fefe01ff : pnp 00:01
      feff0000-feff03ff : HPET 0
      fefff000-feffffff : pnp 00:0b
      fff80000-fff80fff : pnp 00:0b
      fff90000-fffbffff : pnp 00:0b
      fffed000-fffeffff : pnp 00:0b
      ffff0000-ffffffff : pnp 00:0b
    En fait j'ai plusieurs questions:

    - Je ne vois pas du tout pourquoi ils disent que certains périphériques sont mapés en basses adresses, sur le iomem j'ai l'impression qu'ils sont mapés dans toute la mémoire?

    - Quelles sont les adresses réservées aux processus utilisateur?

    - Il y'a combien de bus en tous sur une architecture pc? Je ne comprends pas? Sur l'article que je lis, ils disent que le processeur est relié à trois bus, Bus mémoire, Bus entrée sortie et c'est lui sur lequel sont envoyées les demandes des basses adresses (périphériques) et enfin le bus port entrée sortie (pour les anciens périphériques)... moi je dis, mais où sont passés tous les autres bus? Bus de données, Bus d'adresses et de controle, PCI, USB...

    - Auriez vous un lien ou je peux trouver un plan clair d'une carte mère avec les différentes laisons (bus,...) et où sont représentés les différents composants (CPU, PIC, PUCE BIOS, MMU,...)

    Merci beaucoup

  2. #2
    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
    le CPU ne voit que 3 bus.
    adresses
    données
    controle

    les autres bus périphériques sont très differents car non reliés au CPU directement, ils passent par les bridges.

    les ports pci, isa, etc, sont pas reelement mappés en mémoire, ils sont la mémoire.

    autrement dit, leur configuration permet de definir une plage d'adresses sur le bus d'adresses, comme s'il s'agissait de mémoire.

    cependant, les ports d'entrée sorties restent en vigueur pour ce qui est de la communication avec les controleurs presents sur les cartes.

    d'un coté, nous avons les ports mappés en mémoire qui ne sont en fait que des remplacement de la ram par des peripheriques, et de l'aute, nous avons les controleurs de périphériques qui sont contrôlés par le CPU grace aux ports.

    le port ISA est le plus simple, il réplique les bus d'adresse, de données et de controle du CPU (dans une certaine limite).
    le port PCI est different car il necessite un controleur PCI dont la norme est floue, et très peu respectée, voire passant par des contrôleurs proprietaires closed source (bravo la cotation boursière), dont la doc est introuvable, et dont la comprehension est proche du coma ethylique.
    la suite est pire, usb, agp, pcie, c'est de pire en pire, de plus en plus closed source, et de plus en plus propriétaire, si bien qu'il n'y à que les grosses entreprises qui sont en mesure de se payer la doc, et donc pouvoir se targuer de faire du code compatible machin chose. le business avant tout.

    mais franco, je te le dis, si tu compte coder un OS, ce genre de probleme n'est qu'un grain de sable, et la route est très longue. très très longue, et ton os ne sera utilisé que par ... 1 seule personne, toi même, ne compte pas faire THE os que tout le monde attendait, c'est purement impossible en l'etat actuel de la liberté informatique.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 28
    Points : 29
    Points
    29
    Par défaut
    Je commence par la fin, quand je dis développer un OS, le but c'est juste d'apprendre et donc:

    - Il sera tout petit, sans interface graphique.
    - Gestion de mémoire/processus/FS la plus simple possible
    - Le minimum de drivers possible
    - Je ne compte le donner à personne
    - Je ne compte pas tout réécrire mais partir de quelque chose d'existant, et donc dans un premier temps le but c'est juste de comprendre le code de quelqu'un d'autre

    Mon second but dans tout ca: c'est de comprendre un peu mieux l'architecture pc, les entrailles d'un OS, pour enfin pouvoir bien maitriser l'os que j'utilise tous les jours (GNU/Linux) et pouvoir si possible y apporter ma contribution

    Bon retour aux questions,

    Tu dis que le CPU ne voit que trois bus et que les autres périphériques passent par des bridges, mais comment sont connectés ces derniers (les bridges) au CPU? Est ce que c'est le bus des ports? Car dans ce que je lis ils disent que chaque port est en fait juste une adresse envoyée sur ce bus

  4. #4
    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
    sur les PC la configuration est de ce type:


    lorsque le CPU veu acceder à la mémoire, il positione le bit I/O à 0, lorsqu'il veu acceder aux ports (in, out), il positionne le bit I/O à 1.

    le bit I/O est un bit du bus de controle, comme R/W (read /write, etc...)

    les adresses sont envoyées sur le bus d'adresse, que ce soit pour acceder aux ports ou à la mémoire.
    et les données passent par le bus de données, que ce soit en lecture ou en ecriture.

    pour conclure, c'est tres simple, il ne faut pas s'imaginer que c'est de la magie, c'est en général la logique et la simplicité qui est autours de l'architecture PC.

    bon courage, je ne saurais trop te conseiller le site de fasm, et l'utilisation de fasm pour compiler, executer, etc.


    il y a osdev.org aussi qui est pas mal fourni pour le codage d'os.
    consulte la partie wiki, tu sera comblé.

    et si ce n'est pas dejà fait, apprend l'anglais technique (qui ressemble beaucoup au français technique).

    voilà.

Discussions similaires

  1. Réponses: 17
    Dernier message: 11/10/2012, 16h56
  2. Plusieurs questions sur Samba sous Ubuntu
    Par Niktou dans le forum Réseau
    Réponses: 12
    Dernier message: 12/02/2006, 15h45
  3. [Py2exe] Plusieurs questions...
    Par Arthur17 dans le forum Py2exe
    Réponses: 4
    Dernier message: 17/11/2005, 22h41
  4. J'ai plusieur question pr windows 2000
    Par Guixx dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 10/09/2005, 18h23
  5. Réponses: 4
    Dernier message: 11/09/2004, 16h38

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