Partage
  • Partager sur Facebook
  • Partager sur Twitter

Emplacement registres mémoire

    12 mars 2020 à 13:45:02

    Bonjour,

    ayant récemment fait l'acquisition d'un ouvrage portant sur l'informatique avec une section dédiée au hardware (Architecture et technologie des ordinateurs), je me retrouve confronté à une notion que je trouve un peu floue.

    Je cite le passage qui m'intrigue:

    "Un registre mémoire est une cellule mémoire ayant une fonction particulière. Dans la mémoire centrale on trouve deux types de registres, le registre d'adresse qui contient l'adresse d'une cellule mémoire et le registre mot qui contient le contenu d'un mot mémoire."

    N'ayant jamais entendu parler de ces registres, j'ai donc entrepris quelques recherches sur leur fonctionnement.

    La seule correspondance que j'ai trouvé semble être le registre d'adresse mémoire (memory address register: MAR) et le registre tampon mémoire (memory buffer register: MBR / memory data register: MDR), il est précisé sur la page wikipedia anglaise des registres processeur que ceux-ci sont situés à l'extérieur du processeur dans des puces séparées sans affirmer cependant qu'ils se trouvent en mémoire centrale comme cela est expliqué dans l'extrait.

    Quels sont les noms corrects de ces registres ?

    Où sont-ils réellement situés ?

    Merci d'avance pour vos réponses.

    -
    Edité par Me1Yie 12 mars 2020 à 13:48:26

    • Partager sur Facebook
    • Partager sur Twitter
      12 mars 2020 à 18:02:46

      Bonjour,

      Je suis loin d'être un expert dans le domaine.

      Le texte que tu nous donne me fais penser à ça :

      Sur l'image nous voyons bien l'adresse à gauche et la zone mémoire à droite. Durant mes cours nous avons étudier les registres sous cette forme notamment avec les notions de pointeurs mais ça remonte un peu trop pour que je m'en rappelle correctement.

      • Partager sur Facebook
      • Partager sur Twitter

      Call me Spaceman

        13 mars 2020 à 18:14:37

        Je pense qu'ici on parle de registre du processeur et  vu son nom ben il se trouve à l'intérieur de celui ci.
        Sur le x86 il y'a 8 registre manipulable (8 de plus sur sa version 64 bits) sans parler des registre spécifiques pour le FPU , les instructions SSE et autre.

        Donc :
        "Quels sont les noms corrects de ces registres ?"
        Ben registre , ils sont appelé toujours comme ça , mais c'est aussi un mot fourre tout (tu verra le mot registre pour les I/O notamment , mais c'est totalement différent).

        Où sont-ils réellement situés ?
        A 99% sur le processeur pour des question de rapidité , il y'a bien quelque proc qui le mette en mémoire, mais tu trouvera toujours dans l'informatique des procs un peu exotique ;)

        edit:
        On relisant ton post ,tu aurait du donner plus de contexte parce que :
        "Un registre mémoire est une cellule mémoire ayant une fonction particulière. Dans la mémoire centrale on trouve deux types de registres, le registre d'adresse qui contient l'adresse d'une cellule mémoire et le registre mot qui contient le contenu d'un mot mémoire."
        Si cette citation est dans un chapitre appelé RAM tout cela à un sens :)
        Le fonctionnement de la RAM est particulière, elle possède effectivement un memory address register: MAR , et donc elle permet de pointer une adresse qu'on veut lire.
        Et celle ci se trouve bien en RAM.
        D'ailleurs la plupart des RAM grâce a ce registre peuvent être en mode burst , en gros l'adresse actuelle et les suivante seront rapide à lire.
        (il faut savoir que modifier le MAR et le temps qu'on point la bonne adresse coûte plusieurs cycle , mais cela  peut coûter qu'un cycle de lire les adresse suivantes )

        (comme je l'ai dit le mot registre est un mot générique et donc utilisé sur plusieurs choses ).

        -
        Edité par HelbaSama 14 mars 2020 à 6:35:54

        • Partager sur Facebook
        • Partager sur Twitter
          14 mars 2020 à 4:02:11

          Salut,
          Je ne suis pas un expert non plus en matière de processeurs. J'en ai tout de même connu quelques uns.
          Ce qui se trouve hors du processeur dans des puces séparées sont peut-être appelés registres, mais de mon point de vue, ça n'en est pas.
          Les seuls registres qui soient dignes de ce nom doivent se trouver à l'intérieur du processeur.
          Il y a bien des zones particulières de la RAM que certains appellent registres.
          Mais il faut comprendre que leur temps d'accès est nettement plus long que pour les registres du processeur.
          Dépendamment des processeurs, il y a différents types de registres.
          Le premier, et le plus ancien, est le registre d'adresse du programme, appelé en anglais "program counter", désigné par la lettre P.
          Il contient l'adresse de l'instruction courante. Il est incrémenté à la fin de chaque instruction (voire au milieu).
          Quand on fait un saut (jump) en mémoire, tout ce qu'on fait est de changer la valeur de ce registre.
          Sur les nouveaux processeurs, il y a un registre de référence pour les instructions et un autre pour les données.
          Les compilateurs traduisent les programmes en binaire en supposant qu'ils vont s'exécuter à partir de l'adresse zéro, et leur données commencent également à partir de l'adresse zéro.
          À l'aide des registres de référence, on peut déplacer un programme en mémoire sans devoir changer toutes les adresses. Même chose pour les données qu'ils utilisent.
          Il y a un registre pour la longueur de la zone de mémoire accessible par le programme (segment).
          Après, il y a des registres tout usage qui peuvent contenir soit des adresses, soit des données.
          Certains processeurs ont des registres pour l'incrémentation des adresses.
          Tous ces registres sont accessibles de façon directe ou indirecte par les programmes.
          Il y a des registres associés à des équippements, mais ils ne sont pas vraiment considérés comme tels.
          Il y a peut-être des registres spéciaux pour les mémoires "cache" qui fonctionnent sur un principe tout à fait différent (que je ne connais pas)
          (on appelle ça mémoire associative)
          Donc, de mon point de vue, tous les registres se trouvent dans le processeur.
          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            14 mars 2020 à 6:41:44

            Sans vouloir faire mon chieur , pour le moment je pense que les réponses sont Hors sujet , le mot registre laisse à interprétation , et dans l’architecture des ordi , le mot registre est souvent associé aux procs , mais si on relis bien la phrase du PO :

            "Un registre mémoire est une cellule mémoire ayant une fonction particulière. Dans la mémoire centrale on trouve deux types de registres, le registre d'adresse qui contient l'adresse d'une cellule mémoire et le registre mot qui contient le contenu d'un mot mémoire."
            Le PO aurait du parler du contexte , mais ça parle clairement du fonctionnement de la RAM (comment elle récupère une valeur , vu que la RAM c'est adresse + data ).

            Donc ici , ça n'a rien n'a voir avec les registre du processeurs ;)

            "Les compilateurs traduisent les programmes en binaire en supposant qu'ils vont s'exécuter à partir de l'adresse zéro, et leur données commencent également à partir de l'adresse zéro."
            Non pas forcément , tu peux configurer le compilateur en donnant où commence l'adresse et encore heureux , sinon tout les appel de fonction et les saut absolu ne marcherai pas (principalement en embarquer ).

            -
            Edité par HelbaSama 14 mars 2020 à 6:57:10

            • Partager sur Facebook
            • Partager sur Twitter
              14 mars 2020 à 13:50:48

              Merci pour vos réponses.

              J'ai trouvé une définition plus complète des termes évoqués dans le glossaire du livre:

              "Registre mot : registre fonctionnant comme tampon pour toute information lue ou écrite en mémoire."

              "Registre d'adresse: registre de la mémoire centrale qui contient l'adresse où stocker, ou chercher, une information."

              Ces deux registres semblent effectivement correspondre à ceux que j'ai trouvé sur Wikipédia (MBR/MDR et MAR).

              Il est également à nouveau précisé qu'ils se situent en dehors du processeur, car la définition se trouve dans la section "registres de la mémoire" du glossaire, distincte de celle dédiée aux registres de CPU. Il seraient donc présents à l'intérieur même de la mémoire vive.

              Il est également indiqué que lors d'une opération de lecture de la mémoire, on place l'adresse mémoire à lire dans le registre d'adresse et le mot mémoire associé se retrouve ensuite dans le registre mot. Pour l'écriture c'est un peu le même procédé sauf qu'il est également nécessaire de placer la valeur à écrire en mémoire dans le registre mot.

              En faisant une recherche avec les noms réels de ces registres ("memory data register" / "memory buffer register" et "memory address register"), je trouve cependant de nombreux schémas contradictoires qui les situent à l'intérieur du processeur : exemple 1, exemple 2

              Je pense que wikipedia et le livre donnent la bonne information et qu'il s'agit éventuellement d'erreurs liées à la dénomination confuse de "registre".

              Qu'en pensez-vous ?

              -
              Edité par Me1Yie 14 mars 2020 à 13:52:20

              • Partager sur Facebook
              • Partager sur Twitter
                14 mars 2020 à 15:03:00

                Ce qui est sur ,c'est que oui le mot registre est confus , parce qu'il peut dire beaucoup de chose !

                Mais si on lit bien les pages wikipedia :
                https://en.wikipedia.org/wiki/Memory_address_register
                https://en.wikipedia.org/wiki/Memory_buffer_register

                Il y'a bien deux registres (non manipulable par le programmeurs ) pour pouvoir lire et écrire sur la RAM , donc à l'intérieur du CPU (en gros cela permet de pointer et d'indiquer les datas ).
                • Partager sur Facebook
                • Partager sur Twitter
                  15 mars 2020 à 11:27:43

                  Les registres sont forcement associés à un processeur. En théorie c'est interne (physiquement dans le processeur). Sur certains vieilles architectures, les registres étaient externes car un registre interne coute plus cher. Et donc on les stockait à la base de la RAM.

                  Sur l'architecture intel x86 par exemple, les registres sont stockés dans le processeur. Tu as des registres 8bits, 16bits, 32 et maintenant 64 bits. Par exemple l'adresse CS:SI est composé de 2 registres : Code Segment et Segment index. Ce sont des registres d'adresse. 

                  Tu as les registres ax,bx,cx qui sont des registres généraux. (eax/rax pour les version 32 et 64 bits, ah / al pour du 8 bits/ax pour du 16 bit). 

                  Les instructions de ton processeur utilisent soit des registres add ax,1 par exemple, soit des adresses mémoire directement. Simplement utiliser des registres est plus rapide. 

                  Chaque processeur à des registres différents : un Z80 n'a pas les mêmes registres qu'un x86, qui sont différents d'un ARM.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 mars 2020 à 11:51:16

                    "Les registres sont forcement associés à un processeur."
                    Si on parle du mot registre en lui meme , pas forcément , tu trouvera certaine doc qui en parlera comme des I/O par exemple :
                    https://wiki.superfamicom.org/registers
                    Mais ce n'est pas les seuls qui utilisait ce terme là ;)

                    "Tu as les registres ax,bx,cx qui sont des registres généraux. (eax/rax pour les version 32 et 64 bits, ah / al pour du 8 bits/ax pour du 16 bit). "
                    Historiquement non le x86 ne proposait pas des registre généraux , d'ailleurs ax était l’accumulateur (cela est particulièrement visible pour le mul/div par exemple).

                    "Par exemple l'adresse CS:SI est composé de 2 registres : Code Segment et Segment index. Ce sont des registres d'adresse. "
                    De plus je ne suis pas sur que le x86 soit le meilleur exemple de parlé de registre , c'est un processeur qui se coltine pas mal de vieux truc , et avoir des registres d'adresse est bien spécifique a ce proco (sauf in on parle des proc des années 80) la plupart des procs moderne autre que le x86 ne font plus aucune différence entre accu/index/adresse/autre et sont tous généraux.
                    surtout que le fonctionnement du x86 en interne est a des années lumière de la façon de comment on le programme  (retro compatiblité oblige)

                    Mais ça reste encore hors sujet , le PO ne parlait pas de registre manipulable par le programmeur , mais de registre interne au proco pour gérer la RAM (les registre MAR et MDR)

                    -
                    Edité par HelbaSama 15 mars 2020 à 12:00:19

                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 mars 2020 à 12:08:24

                      @HelbaSama : Effectivement, tu as des registres particuliers. Par exemple tu as les registres GPIO. Ou quand tu utilises une puce sur un BUS SPI, tu as également des registres. Après un registre c'est juste une 'case mémoire' avec un rôle particulier dans ce cas. 

                      ==> Le mot 'registre' dépend beaucoup du contexte. (microprocesseur, microcontrolleur, FPGA, ... ).

                      L'archi x86 n'est pas le meilleur exemple, mais ça reste une des archi les plus utilisées. Après l'exemple reste valable pour plein d'autre processeurs. Tu as des processeurs qui ont un bus adresse et un bus données séparés alors aussi. (Harvard vs Von Neumann). Donc c'est toujours compliqué de généraliser.Le CS:SI est un moyen d'accéder à la mémoire de manière indirecte pour lever les limitations de largeur de bus. (640k is enough :-) )

                      Si tu veux aller plus loin, le mot registre est utilisé en électronique : registre à décalage par exemple. Ca représente juste un système pour stocker des données. Mais son livre porte sur l'architecture des ordinateurs et l'informatique. 

                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 mars 2020 à 12:27:25

                        J'avais bien lu les pages wikipédia qui concernent ces registres avant de poster @HelbaSama ^^

                        Mais comme je l'ai précisé au début, dans l’article dédié aux registres cpu, les liens vers ces deux pages figurent dans une section dont l'intitulé précise qu'ils sont à l'extérieur du processeur... Même wikipédia donne des informations contradictoires (pas du tout, voir edit):

                        "Registers related to fetching information from RAM, a collection of storage registers located on separate chips from the CPU"

                        Il faut également savoir que le livre que je suis en train de lire a subi de nombreuses rééditions depuis sa parution initiale, en 1989 (la dernière est de 2018).

                        Par conséquent, il peut s'agir d'une information datant d'une époque où les processeurs externalisaient davantage leurs fonctions (le passage se trouve pourtant dans le chapitre d'introduction à l'informatique)...

                        En fait, je crois qu'il me faudrait une ou plusieurs sources d'informations fiables :D

                        edit: je me sens stupide, je crois que j'ai mal traduit la phrase en anglais, c'est de la RAM dont il est question après la virgule

                        -
                        Edité par Me1Yie 15 mars 2020 à 12:37:27

                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 mars 2020 à 12:38:29

                          "Le CS:SI est un moyen d'accéder à la mémoire de manière indirecte pour lever les limitations de largeur de bus. (640k is enough :-) )"
                          Oui mais tu vois les utilisateurs du M68000 n'avait pas ce souci ;)
                          (on plus d’être plus performant que le x86 :D )

                          @Me1Yie Si le livre date de 1989 avec des MAJ , il est fort probable que quelque petite erreur sont resté.
                          Cela reste une info fiable mais qui date , si tu veux un lien sur l’architecture des ordi , tu as ce très bon lien : https://fr.wikibooks.org/wiki/Fonctionnement_d%27un_ordinateur

                          -
                          Edité par HelbaSama 15 mars 2020 à 12:39:36

                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 mars 2020 à 12:49:55

                            @Helbasama : je suis pas un fan des x86 non plus ! le 68k 16/32bits avec toute l'interface de l'époque (Midi, serial) et même possibilité de mettre un disque dur. La super interface TOS (un windows avant l'époque). Atari était franchement au top à l'époque.

                            (Amiga ça pue des fesses) <= Le vieux troll de base. 

                            Bref tout ça pour dire. Oui en informatique on se coltine le poids de l'histoire ....

                            • Partager sur Facebook
                            • Partager sur Twitter
                              15 mars 2020 à 12:58:23

                              C'est justement ce que je lisais avant d'acheter mon "Architecture et technologie des ordinateurs" @HelbaSama (il est très bien mais je trouve qu'il évolue un peu trop souvent et j'avais envie d'un format papier pour le confort).

                              Je ne me rappelle pas y avoir lu quoi que ce soit au sujet de ces deux registres :\ (c'est en partie ce qui m'a intrigué).

                              • Partager sur Facebook
                              • Partager sur Twitter
                                15 mars 2020 à 13:06:29

                                Amiga vs Atari ST , vieux débat en effet :')

                                "Bref tout ça pour dire. Oui en informatique on se coltine le poids de l'histoire ...."
                                Oui je suis totalement d'accord , je tente souvent de le rappeler vu qu'on l'oublie souvent (surtout les plus jeunes qui ont une bonne image du x86...)

                                "Je ne me rappelle pas y avoir lu quoi que ce soit au sujet de ces deux registres :\ (c'est en partie ce qui m'a intrigué)."
                                difficile d’être exhaustive ,et puis c'est pas un élément central de la compréhension d'un ordinateur
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 mars 2020 à 11:44:48

                                  Ce ne sont peut-être pas des éléments centraux dans la compréhension d'un ordinateur, mais j'ai quand même envie de comprendre comment ils fonctionnement étant donné qu'ils interviennent dans tous les accès mémoire ^^

                                  Après de nombreuses recherches complémentaires, je n'ai finalement trouvé que des informations indiquant qu'ils sont situés à l'intérieur du processeur.

                                  sources: lien1, lien2

                                  C'est donc, sans aucun doute, une erreur du livre. De plus, les noms des registres ne sont pas tout à fait exacts (registre mot > registre tampon mémoire).

                                  -
                                  Edité par Me1Yie 16 mars 2020 à 11:47:16

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    16 mars 2020 à 13:03:19

                                    Un registre n'est pas forcement interne. Pour un gars qui code sur un 6502 (oui ça existe encore), la mémoire basse ou "mémoire rapide" est accessible directement en une opération. Ils disposent donc de 256 registres généraux. Ces registres sont physiquement à l' exterieur du processeur.

                                    Pour un mec qui ne code que sur architecture x86, les registres sont internes. Accéder à la RAM est bien moins rapide. 

                                    Après te prends pas la tête pour retenir tous les registres de tous les processeurs, ça n'apporte rien à la compréhension. L'idée générale, c'est qu'un registre c'est une mémoire. Tu as des registres généraux et des registres avec une fonction définie. 

                                    Si tu veux aller plus loin, il y a des trucs assez géniaux. 

                                    http://koyoteproject.free.fr/about.php

                                    Tu peux aussi créer ton propre processeur en Verilog et le simuler. Tu vas voir que c'est pas si compliqué que ça et c'est très très intéressant. J'ai eu un TP dans ce genre, j'ai bien aimé.

                                    https://github.com/Arlet/verilog-6502

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Emplacement registres mémoire

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown