Elements d’architecture¶
Historique¶
Besoin de calculer, d’effectuer des opérations répétitives de plus en plus complexes qu’un humain est apte à décrire, mais pas à effectuer efficacement.
-1000 | boulier (Chine) | mémorisation des nombres aide pour effectuer additions |
1640 | Pascaline progrès ultérieurs |
mémorise un nombre effectue l’addition (propagation retenue) addition, multiplication |
1740 | machines à tisser | motif programmé sur carte perforée |
1940 | machines Zuse | calculs programmables |
Au cours du 19è siècle et du début du 20è siècle, nombre de machines spécialisées de plus en plus complexes sont construites (factorisation).
- Idée fondamentale : si une machine est capable d’effectuer un certain nombretrès réduit d’opérations élémentaires choisies selon l’état d’une mémoire, et que ces opérations peuvent elles-même modifier le contenu de la mémoire, cette machine peut effectuer n’importe quelle opération complexe.
NB/ analogie avec le développement des smartphones versatiles.
Machine de Von Newmann¶
image
cycle de Von Newmann¶
Un compteur noté PC contient l’adresse de l’instruction à effectuer par le processeur.
- Lire l’instruction à l’adresse PC
- Exécuter l’instruction
- Ajouter 1 à PC
- recommencer à 1.
Ce cycle très simple opérant sur une mémoire qui contient à la fois instructions et données permet d’effectuer n’importe quelle opération, y compris les plus complexes.
exemple¶
On considère l’état de mémoire suivant, en exécuter les instructions.
1 -- GET 8
2 -- PUT 10
3 -- GET 9
4 -- PUT 8
5 -- GET 10
6 -- PUT 9
7 -- JUMP 11
8 -- 18
9 -- 14
10 -- 0
11 -- STOP
Avec un processeur au jeu d’instructions plus évolué, on pourrait réduire ce programme à
1 -- SWAP 3 4
2 -- STOP
3 -- 18
4 -- 14
5 -- END
langages, compilateurs¶
On appelle assembleur le langage constitué des instructions directement exécutées par le processeur (rendues humainement lisibles en donnant à chacune un nom).
Afin d’éviter l’écriture fastidieuse de programmes comme ci-dessus, très vite on a utilisé l’ordinateur pour générer les suites d’instructions machine permettant d’effectuer des tâches usuelles : naissance du couple langage de programmation/compilateur.
Le compilateur est un programme qui transforme une donnée constituée d’instructions complexes facilement compréhensibles par un humain, en suite d’instructions machines directement exécutables par le processeur.
Par exemple, le langage C permet d’écrire
int main() {
int a,b;
a = 3;
b = 5;
while(b!=0) {
int q,r;
q = a / b;
r = a % b;
a = q;
b = r;
}
return a;
}
ce que le compilateur gcc transforme en
.section __TEXT,__text,regular,pure_instructions
.globl _main
.align 4, 0x90
_main:
Leh_func_begin1:
pushq %rbp
Ltmp0:
movq %rsp, %rbp
Ltmp1:
movl $3, -12(%rbp)
movl $5, -16(%rbp)
jmp LBB1_2
LBB1_1:
movl -12(%rbp), %eax
movl -16(%rbp), %ecx
cltd
idivl %ecx
movl %eax, -20(%rbp)
movl -12(%rbp), %eax
movl -16(%rbp), %ecx
cltd
idivl %ecx
movl %edx, -24(%rbp)
movl -20(%rbp), %eax
movl %eax, -12(%rbp)
movl -24(%rbp), %eax
movl %eax, -16(%rbp)
LBB1_2:
movl -16(%rbp), %eax
cmpl $0, %eax
jne LBB1_1
movl -12(%rbp), %eax
movl %eax, -8(%rbp)
movl -8(%rbp), %eax
movl %eax, -4(%rbp)
movl -4(%rbp), %eax
popq %rbp
ret
Leh_func_end1:
.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
EH_frame0:
Lsection_eh_frame:
Leh_frame_common:
Lset0 = Leh_frame_common_end-Leh_frame_common_begin
.long Lset0
Leh_frame_common_begin:
.long 0
.byte 1
.asciz "zR"
.byte 1
.byte 120
.byte 16
.byte 1
.byte 16
.byte 12
.byte 7
.byte 8
.byte 144
.byte 1
.align 3
Leh_frame_common_end:
.globl _main.eh
_main.eh:
Lset1 = Leh_frame_end1-Leh_frame_begin1
.long Lset1
Leh_frame_begin1:
Lset2 = Leh_frame_begin1-Leh_frame_common
.long Lset2
Ltmp2:
.quad Leh_func_begin1-Ltmp2
Lset3 = Leh_func_end1-Leh_func_begin1
.quad Lset3
.byte 0
.byte 4
Lset4 = Ltmp0-Leh_func_begin1
.long Lset4
.byte 14
.byte 16
.byte 134
.byte 2
.byte 4
Lset5 = Ltmp1-Ltmp0
.long Lset5
.byte 13
.byte 6
.align 3
Leh_frame_end1:
.subsections_via_symbols
Architecture générale¶
Le processeur, au centre, est connecté par les communications à la mémoire et à diverses interfaces.
- cpu
- carte-mère : bus et contrôleurs
- interfaces :
- mémoire
- cache de niveaux 1, 2, 3
- RAM
- ROM
- stockage
- disque dur
- lecteur DVD
- périphériques d’entrée
- clavier, souris
- scanner
- port ethernet
- périphériques de sortie
- écran
- carte son
- imprimante
- port ethernet
- mémoire
Quelques détails¶
Depuis les années 50, le fonctionnement des machines est entièrement binaire, c’est-à-dire codé à l’aide de 0 et de 1. En effet,
- on peut tout faire avec ce système
- c’est le plus simple à manier électroniquement (courant ou pas).
On appelle bit un chiffre binaire, qui vaut donc 0 ou 1.
On appelle mot un groupe de bits : les mots de 8 bits sont appelés octets, la machine opère souvent sur des mots de 32 ou de 64 bits.
processeur¶
circuit électronique très complexe constitué de transistors (3 pattes, l’une commande le passage ou non du courant entre les deux autres)
Des groupes de transistors constituent des unités effectuant des opérations précises sur les instructions : unités arithmétiques, logiques, de contrôle, d’entrée-sortie...
horloge qui cadence la progression des opérations, pour que les tâches soient effectuées en synchronisation (ex: attendre la propagation d’une retenue).
Fréquence en Hertz.
mémoire¶
Grande liste de bits, organisés en mots, puis en blocs, un peu comme un grand dossier avec des tiroirs, des classeurs, des cahiers, des pages. Chaque mot a une adresse.
Une suite de mots peut représenter des instructions, des programmes, des images,...
Taille en octets.
- mémoire RAM
- de l’ordre du Go
- rapide (dizaine de cycles pour y accéder), on peut y lire et y écrire
- elle perd son contenu quand on éteint la machine
- mémoire cache
- de l’ordre du Mo
- extrèmement rapide, utilisée par la processeur pour les intructions et données en cours de traitement
bus de communication¶
ensemble de fils parallèles par lesquels transitent le courant constituant les informations
- bus de contrôle
- bus de données
Remarque : avec ces principes, il n’y a pas d’obstacle à faire un ordinateur en lego fonctionnant avec des billes, ou avec un liquide dans des canaux. La vitesse de propagation des électrons permet d’atteindre les vitesses de l’ordre du milliard d’instructions par seconde.