solaire a écrit :
Commençons par des définitions:
-Un CPU n'est pas un microprocesseur -Un CPU est l'ensemble des unités d'éxécution (en gros ce ne sont que des ensembles de porte logiques).
-Un microprocesseur est constitué en gros de deux choses:
CPU+MMU=microprocesseur
-MMU=contrôleur
|
MMU = Memory Management Unit : c'est uniquement l'unité qui sert à gérer les accès mémoire. Elle sert entre autre à convertir les addresses logiques utilisées à l'intérieur des programmes en adresses physiques utilisées pour accéder aux barettes mémoire; comme tu en parles par la suite.
Mais je suis quasiment certain que le terme CPU désigne habituellement tout le microprocesseur, et pas seulement l'ensemble des unités d'exécutions. Tout fait partie d'un bloc qui n'est pas vraiment séparable et qu'on appelle CPU. Enfin bon, ce n'est qu'un problème de terminologie.
solaire a écrit :
-Ensuite,la MMU (qui est sur le silicium sur le processeur) lit les instructions dans la mémoire vive et c'est elle qui déduit quelles sont les instructions à effectuer ,celles à effectuer elle les envoie au CPU
-Le CPU les éxécute ,la MMU récupère le résultat du "calcul" déduit ce qu'il faut envoyer à la mémoire vive et renvoie des "infos" à la mémoire vive infos qui sont donc enregistrées dans la mémoire vive.
|
D'accord pour le principe, sauf que ce n'est pas le MMU qui s'occupe de cela.
En gros, un CPU schématique est basé sur ce qu'on appelle une machine de Gluskov qui est composée de deux structures :
- une partie opérative : c'est elle qui travaille réellement sur les données, elle effectue des opérations.
- une partie contrôle : en fonction de différentes informations reçues de l'extérieur et de la partie opérative, elle donne des ordres à cette dernière.
Bon, voyons comment cela est implémenté dans un microprocesseur, il y a essentiellement 4 parties :
- la partie opérative comprend 3 éléments : les différentes unités d'exécution (ALU ici), de quoi stocker les données sur lesquelles on travaille (registres), des ports d'entré/sortie.
- la partie contrôle comprend 2 éléments importants : le "Program counter" (PC) est le registre contenant l'adresse de l'instruction qui devra être exécutée après celle en cours d'exécution. L'Instruction Register (IR) contient l'instruction en cours d'exécution. Je parle bien d'une instruction Assembleur (ASM) ici, que le programmeur a encodé (ou généré par le compileur).
Bon, le controlleur charge un instruction de la mémoire dans le registre IR (à partir de l'adresse située dans PC) et PC est incrémenté de 1. Ensuite, il doit la décoder et exécuter l'instruction. Typiquement, une instruction va demander plusieurs opérations de la part de la partie opérative. Le controlleur décompose pour cela l'instruction ASM en micro-instructions (µ-ops) qu'elle va faire exécuter par la partie opérative l'une après l'autre. Le controlleur a donc un registre de µops qui lui permet de savoir où il en est de l'exécution de l'instruction ASM.
Une fois que cette instruction est exécutée, le controlleur va chercher en RAM l'instruction pointée par l'adresse située dans le PC, et continue donc l'exécution du programme.
Un tel µprocesseur simple est présenté dans le schéma suivant:
On voit bien les différents éléments (les pointillés séparent le µProc à doite de l'extérieur à gauche): l'ALU qui fait les opérations, les registres IR et PC, le registre MA qui sert juste à pointer des adresses mémoire de données à aller chercher, la RAM (et pas ROM comme il est écrit, c'est une erreur), deux registres de travail accessibles par le programmeur (A et X) et un registre caché au programmeur (S) qui est utilisé comme "mémoire cache".
En dessous, on voit la partie contrôle, qui comprent son registre de µ-ops et des entrées (IR et des flags, donnants l'état de l'ALU et le résultat de comparaison pour les instructions conditionnelles) et on voit des sorties de contrôle qui sont envoyées vers la partie opérative au dessus.
Bon, pour un CPU de PC, c'est évidement autrement plus compliqué.
L'idée de base est toujours la même, mais ici, on effectue beaucoup d'opérations à la fois, à différents stades d'avancement.
Dans ce cas-ci, une majeure différence est que le contrôlleur n'est plus une unité qui supervise l'ensemble des opérations d'au dessus. Elle est située au début du pipeline, et transforme les instructions ASM en une ou plusieurs (parfois bcp) µ-ops (appelées macro-ops chez AMD). Ensuite, ces µ-ops sont envoyées au travers de sheduler/dispatcher aux unités d'exécutions, qui vont elles-mêmes s'occuper de faire les opérations correspondants à ces µ-ops.
Pour la suite, tu peux lire ces articles, qui détaillent plus ce qui se passe dans un CPU récent. Mais je trouve que comprendre le fonctionnement d'une architecture plus simple permet de plus facilement se représenter le flux de données dans un CPU actuel.
http://www.hardware.fr/articles/249/page1.html
http://www.hardware.fr/articles/398/page1.html
solaire a écrit :
Imaginons un système multiprocesseur
et bien alors deux MMU lisent les mêmes instructions dans la mémoire vive et donnent les mêmes instructions à effectuer à leurs deux CPU respectifs
Alors blème le travail est fait deux fois au lieux d'être divisé en deux.
|
Bon, pas du tout.
Il faut bien se rendre compte que quand on a plusieurs CPUs, le système d'exploitation alloue des process différents à chaque CPU.
Les CPUs travaillent donc dans un espace d'adressage différent, c'est à dire qu'ils n'accèdent jamais à la même zone de mémoire vive, et donc n'exécute jamais les même opérations.
PS: en fait, ce n'est pas tout à fait vrai, si un programme est composée de plusieurs taches différentes, séparées (cela est fait par le programmeur, l'OS ne sait pas faire cette séparation lui même), les CPU peuvent exécuter chacun une tâche du même programme. Ils pourront donc accéder aux même données dans le RAM, mais ce n'est pas pour cela qu'ils exécuteront le même code.
solaire a écrit :
Maintenant un système multicore:
exemple POWER4=MMU+CPU+CPU
La MMU lit les instructions dans la mémoire vive de la même façon qu'une puce monocore (core=CPU le core n'est pas un microprocesseur) d'un système uniprocesseur,simplement la MMU du POWER4 est conçue comme si "Elle traitait 64 unités d'éxécution au lieu de 32 unités" (Un PPC possède 32 unités d'éxécutions ou 64 enfin je sais plus je crois que c'est 32 en entier et 32 en flottant peu importe) C'est pour cela en partie que le contrôlleur du G5 n'est pas le même que celui du POWER4 mais le CPU si.
|
non, pas du tout:
le multi-core, c'est comme le multi-processeur, tu prends deux CPU complets (avec unités d'exécution, unités de controlle...) et tu les mets ensemble sur le même morceau de silicum. La seule chose qui est commune aux deux core est ce qui est nécessaire pour communiquer avec le monde extérieur au travers d'un bus quelconque.
Le controlleur du G5 est en effet un peu différent de celui du POWER4+ essentiellement pour pouvoir supporter (et donc décoder) les instructions Altivec.
PS: les PPC n'ont pas 32 unités d'exécution !!! Aucun CPU au monde n'a autant d'unités, sauf peut-être les processeur vectoriel très spécifique qu'on trouve dans les Cray ou dans l'Earth Simulator de NEC. Tu dois confondre avec le nombre de registre non ? Il y en a 32 sur ces CPU. (32 registres généraux, il y en a en plus pour l'Altivec)
Bon voilà, c'était long, j'espère que c'est pas trop brouillon et que quelqu'un retirera quelque chose du temps que j'ai passé à ça 