ajout cm3

This commit is contained in:
Francois Lesueur 2022-09-12 13:01:03 +02:00
parent d165c2befc
commit b56cc66a5d
3 changed files with 107 additions and 2 deletions

View File

@ -23,7 +23,7 @@ Le programme prévisionnel est le suivant :
* CM :
- [CM1](cm1-caracteres.md) : Codage des caractères
- [CM2](cm2-nombres.md) : Codage des entiers et réels
- CM3 : Architecture d'un ordinateur
- [CM3](cm3-archi.md) : Architecture d'un ordinateur
- CM4 : Calcul booléen
- CM5 : Histoire de l'informatique et des ordinateurs
- CM6 : Histoire du libre, de l'open-source et du captif

105
cm3-archi.md Normal file
View File

@ -0,0 +1,105 @@
CM3 Architecture - Notes de cours
=================================
J'ai quoi dans un ordinateur ?
------------------------------
- Carte mère
- CPU
- RAM
- Cartes d'extension
- Disques
[Architecture de Von Neumann](https://fr.wikipedia.org/wiki/Architecture_de_von_Neumann) :
- Une unité arithmétique et logique : calcul
- Une unité de contrôle : séquençage
- De la mémoire : volatile (RAM), permanente (disque), contenant à la fois du code et des données
- Des Entrées/Sorties : bus de communication (PCI-e, USB, SATA, Mémoire...), périphériques, monde extérieur
Parlons du CPU
--------------
Un CPU c'est quoi ?
- Un ensemble de cœurs de calcul (1 à ~16)
- De la mémoire cache (différents niveaux plus ou moins partagés entre les cœurs)
- Packagés ensemble
- Soudé ou connecté (via un socket) sur la carte-mère
- (On parle de SoC si le CPU est lui-même packagé avec RAM et périphériques)
Un cœur (core) = un _pipeline_ (chaîne de traitement)
- Lié au temps de propagation/stabilisation du signal en sortie
- Concept : découper la chaîne en plusieurs sous-chaînes plus courtes (exemple Fetch, Decode, Execute)
- La fréquence / vitesse d'horloge = le temps d'une étape du pipeline
- Pourquoi s'arrêter là ?
- Par exemple 10 sous-chaînes, 10 fois plus de traitement !
- Jusque 31 chez Intel à une époque, aujourd'hui plutôt une quinzaine mais avec un cadre plus complexe
- La limite : les branchements / le code non-linéaire. Si on a mal exécuté, il faut vider le pipeline et reprendre la bonne chaîne (temps perdu, évidemment)
- Et donc de la prédiction, de la réorganisation (out-of-order) et de l'entremêlage (hyper-threading) pour
- faire le bon choix le plus souvent possible
- limiter l'impact d'un mauvais choix
- => Complexité + attaques hardware de la famille [Spectre](https://fr.wikipedia.org/wiki/Spectre_(vuln%C3%A9rabilit%C3%A9))
Évolution :
- Loi de Moore : ~ doublement de la puissance tous les 18 mois
- Jusqu'au début des années 2000 : par amélioration architecturale et augmentation de la fréquence
- Depuis : par amélioration architecturale et augmentation du nombre de cœurs (fréquence stagne)
- => Exécution parallèle nécessaire pour tirer profit des architectures modernes
Quelques éléments qui caractérisent un CPU :
- Marque/Modèle (ce qui implique son architecture)
- Jeu d'instructions (architecture) / nombre de bits (32 ou 64 aujourd'hui)
- Fréquence (rythme d'exécution des instructions)
- Nombre de cœurs physiques
- Nombre de cœurs logiques (hyper-threading)
- Longueur du pipeline
Quelques exemples d'architectures :
- x86(-64) pour PC/Mac, CPUs conçus par Intel et AMD
- ARM (nombreuses versions) pour smartphones, SBC (Raspberry) et Mac modernes (Apple Silicon)
- AVR pour de nombreux Arduino, conçus par Atmel
Un peu de mémoire
-----------------
Du plus rapide et plus petit au plus lent et plus gros (on parle de [hiérarchies mémoires](https://fr.wikipedia.org/wiki/Hi%C3%A9rarchie_de_m%C3%A9moire)), avec quelques ordres de grandeur :
- Des registres :
- À l'intérieur de l'unité de calcul du CPU
- C'est de là que sont faits les calculs
- Exemple x64 : 16 registres généraux de 64 bits : 1ko (1 kilooctet = 1024 octets)
- De la mémoire cache :
- Sur le silicium du CPU mais séparé de l'unité de calcul
- Plusieurs niveaux de cache (L1 à L3)
- Quelques MO (jusque 20aine), les plus rapides liée à un cœur, les plus loins partagés (1 mégaoctet = 1024 kilooctets)
- Vitesse de l'ordre de 0,5-1 To/s
- De la mémoire vive (RAM) :
- Sur la carte mère, séparé du CPU
- Quelques Go (environ 4 Go sur un portable de base) (1 gigaoctet = 1024 mégaoctets)
- Vitesse de l'ordre de 5-50 GO/s
- De la mémoire de stockage (disque dur) :
- Périphérique branché sur la carte mère (SATA, SAS, ...)
- Quelques To (1 téraoctet = 1024 gigaoctets)
- Vitesse de l'ordre de 100 Mo/s (disque dur), 500 Mo/s (SSD)
Couches d'abstraction / Bas et haut niveau
------------------------------------------
Découpage en couches :
- Matériel / _Hardware_
- Système d'exploitation / _OS_
- Logiciels / _Software_
- Encapsulation (poupées russes) :
- Virtualisation (VMWare, Virtualbox, ...) : un logiciel qui simule un matériel
- Conteneurisation (Docker, LXC, ...) : un logiciel qui simule un système d'exploitation
- Des langages s'exécutant dans une machine virtuelle dédiée : Java (la JVM), C# (.Net Framework), ...
Similairement des langages :
- Binaire
- Assembleur
- C
- Java, Python

View File

@ -5,7 +5,7 @@ Nous partitionnons classiquement en informatique les fichiers entre fichiers tex
Dans ce TP, vous allez concevoir et analyser un système d'encodage du binaire vers du "texte", ainsi que le décodage associé.
> Si vous souhaitez approfondir les notions après le TD, les pages Wikipedia associées : [fichier texte](https://fr.wikipedia.org/wiki/Fichier_texte), [fichier binaire](https://fr.wikipedia.org/wiki/Fichier_binaire), [conversion binaire/texte](https://fr.wikipedia.org/wiki/Conversion_du_binaire_en_texte).
> Si vous souhaitez approfondir les notions après le TP, les pages Wikipedia associées : [fichier texte](https://fr.wikipedia.org/wiki/Fichier_texte), [fichier binaire](https://fr.wikipedia.org/wiki/Fichier_binaire), [conversion binaire/texte](https://fr.wikipedia.org/wiki/Conversion_du_binaire_en_texte).
> Ce TP est à réaliser en binôme. Un compte-rendu devra être déposé sur Moodle, en format PDF uniquement. Un seul compte-rendu par binôme suffira (pensez bien à mettre les 2 noms sur le document !)