Aller au contenu principal

Introduction à l'informatique · L1 · Section 2/7

Matériel vs logiciel

Progression

Points d’expérience : XPSérie de jours consécutifs : · —Progression du module : — / —compris

#Matériel vs logiciel

#Prérequis

Savoir qu'un ordinateur manipule des 0 et des 1 (voir la page représentation). Aucune connaissance en électronique n'est requise.

#Objectifs d'apprentissage

  • Décrire la chaîne complète d'une instruction, du transistor au programme.
  • Situer CPU, caches, RAM, SSD et réseau dans une hiérarchie de latences.
  • Expliquer le rôle du système d'exploitation : abstraire, arbitrer, isoler.
  • Relier chaque couche à son socle formel (calcul booléen, graphes, logique).
  • Prévoir les conséquences d'une panne à chaque niveau de la pile.

#Matériel (hardware)

Le matériel rassemble les composants physiques qui manipulent des signaux électriques. La mémoire vive (RAM) contient les instructions et les données du programme en cours ; le processeur (CPU) lit une instruction, la décode, l'exécute avec ses unités fonctionnelles (ALU pour l'arithmétique entière, FPU pour les flottants), puis passe à la suivante, plusieurs milliards de fois par seconde. Cette boucle « charger, décoder, exécuter » suit le modèle de von Neumann : programme et données partagent la même mémoire.

Le stockage (SSD, disques) garde les informations durablesment. Une RAM est volatile : tout disparaît à l'extinction. Un SSD est persistant mais environ un million de fois plus lent à répondre. Entre CPU et RAM s'intercalent des caches (L1, L2, L3) : de très petites mémoires qui retiennent les données récemment utilisées.

#Du transistor au calcul booléen

Sous le CPU, il n'y a plus de « programme » : il y a des portes logiques, et sous elles des transistors qui laissent ou non passer le courant. Le niveau matériel le plus bas s'exprime donc dans un formalisme mathématique précis, l'algèbre de Boole. Une algèbre de Boole est la donnée d'un ensemble EE, de deux éléments distingués 0\mathbf{0} et 1\mathbf{1}, de deux opérations binaires (produit et somme) et d'une opération unaire (complément), qui vérifient idempotence, associativité, commutativité, distributivité et absorption.

L'exemple fondateur est l'ensemble B={0,1}\mathbb{B} = \{0,1\} muni du et (produit), du ou (somme) et du non (complément) :

xxyyxyx \wedge yxyx \vee y
0000
0101
1001
1111

Ces trois opérations sont exactement les AND, OR et NOT des circuits — c'est pourquoi l'algèbre de Boole est le langage dans lequel on décrit un additionneur, un registre ou une unité arithmétique. Une fonction booléenne à kk variables est entièrement déterminée par sa table de vérité, qui comporte 2k2^{k} lignes et donc 2k2^{k} bits de résultat ; il y a par conséquent 2(2k)2^{(2^{k})} fonctions booléennes distinctes à kk variables. Pour k=2k = 2, cela fait 24=162^{4} = 16 fonctions : c'est exactement la table complète des fonctions de {0,1}2\{0,1\}^{2} dans {0,1}\{0,1\} que présente le cours, où figurent le et (\wedge), le ou (\vee), le ou exclusif (\oplus), l'implication (\Rightarrow), la réciproque (\Leftarrow), leurs négations (nand, nor) et les projections. Toutes ne sont pas utiles séparément : le NAND et le NOR suffisent à eux seuls à reconstruire toutes les autres, ce qui explique qu'une seule famille de portes puisse bâtir un processeur entier.

Pourquoi cette couche compte pour un programmeur. Le débordement d'entier vu dans représentation n'est pas une abstraction : c'est l'arithmétique modulo 2k2^{k} que l'additionneur binaire réalise physiquement, la retenue finale sortant du circuit sans être conservée. Comprendre la couche booléenne, c'est comprendre pourquoi la limite est là où elle est.

#Logiciel (software)

Le logiciel est l'ensemble des instructions et des données qui circulent sur ce matériel inertes sans lui. Il s'organise en couches :

  • Le firmware et les pilotes traduisent les particularités d'un périphérique (carte graphique, carte réseau, clavier) en une interface commune que le reste du système comprend.
  • Le système d'exploitation (OS) alloue le CPU entre les programmes, isole leur mémoire, gère les fichiers et contrôle l'accès aux périphériques via des appels système (open, read, send).
  • Les bibliothèques (NumPy, OpenSSL, SDL) factorisent des fonctionnalités récurrentes : chiffrement, calcul matriciel, affichage.
  • Les applications (navigateur, tableur, jeu) orchestrent le tout pour l'utilisatrice et l'utilisateur.

Quand une application affiche du texte, elle appelle une bibliothèque graphique, qui appelle un pilote vidéo, qui programme la carte graphique via le bus PCIe. La chaîne s'enclenche parce que chaque couche respecte le contrat de la précédente.

#Frontière matériel / logiciel

L'OS fournit des abstractions communes : fichiers pour le stockage (peu importe le modèle de disque), sockets pour le réseau (peu importe la carte), processus pour l'exécution concurrente et isolée. Grâce à eux, changer de matériel n'impose pas de réécrire les applications. En retour, l'OS arbitre : deux processus ne croisent jamais physiquement le même disque sans passer par lui.

#Le socle formel de chaque couche

Chaque étage de cette pile n'est pas seulement une commodité d'ingénierie : il repose sur un objet mathématique précis. Reconnaître lequel aide à savoir où chercher quand une couche se comporte mal.

Domaine informatiqueOutil formel sous-jacent
Circuits imprimésCalcul booléen (algèbre de Boole)
RéseauxThéorie des graphes
Bases de donnéesLogique
Compilation des langagesThéorie des langages et des automates
Compression de donnéesThéorie des langages et des automates
Preuves de programmesInduction
Efficacité des algorithmesComplexité
Classes de problèmesCalculabilité
Programmation fonctionnelleλ\lambda-calcul
SécuritéCryptographie
ImagesGéométrie algorithmique
Systèmes distribuésλ\lambda-calcul, calculabilité

#Exemple : la couche « base de données »

Le cas des bases de données relationnelles illustre bien ce que « socle formel » veut dire. L'objet manipulé est une relation, c'est-à-dire un sous-ensemble d'un produit cartésien E1×E2××EnE_1 \times E_2 \times \dots \times E_n : un ensemble de nn-uplets, où nn est l'arité. Un spectacle se décrit ainsi par le quadruplet (nom, compagnie, type, lieu), chaque composante portant un nom plutôt qu'un numéro.

Un système de gestion de base de données (SGBD) n'est rien d'autre qu'une couche logicielle posée sur cet objet, qui expose un langage de requêtes — SQL — et sait exécuter efficacement les opérations ensemblistes sur les relations :

  • sélection σ\sigma : ne garder que les lignes vérifiant une condition (par exemple les spectacles dont le type est « danse ») ;
  • projection π\pi : ne garder que certaines colonnes (les noms et compagnies des spectacles joués à l'Opéra) ;
  • jointure : fusionner deux relations partageant un attribut (les compagnies qui se produisent en novembre).

Le programmeur écrit π(σ(Spectacle))\pi(\sigma(\text{Spectacle})) en SQL; le moteur choisit comment l'exécuter. C'est exactement le contrat d'abstraction décrit plus haut : l'interface est le langage de requêtes, l'implémentation est l'ensemble des structures d'index et d'algorithmes de jointure — et elle peut changer sans que la requête change.

#Hiérarchie mémoire et localité

Taille des données
Localité d’accès
Cache L1
1 ns
81.3%
Cache L2
4 ns
9.7%
Cache L3
10 ns
7.5%
RAM
100 ns
1.5%
SSD (NVMe)
150.0 µs
0.0%
Réseau (LAN)
100.0 ms
0.0%
Latence moyenne estimée
3 ns
Somme pondérée des latences par la distribution d’accès (hit/miss) selon la taille et la localité.
Conseils:
  • Favorisez la localité (parcours séquentiels, structures contiguës).
  • Réduisez la taille de travail active pour rester dans les caches.
  • Regroupez les E/S pour amortir les accès SSD/réseau plus lents.

Les caches exploitent deux régularités des programmes : la localité spatiale (si on lit une adresse, ses voisines suivent souvent) et la localité temporelle (une donnée une fois lue est souvent relue peu après). En pratique : parcourir un tableau ligne par ligne (dans l'ordre contigu en mémoire) est nettement plus rapide qu'en zigzag, et regrouper dans une structure les champs utilisés ensemble améliore les taux de succès en cache.

#Exercice

Pour chacun de ces symptômes, identifiez la couche fautive probable parmi : matériel, pilote, OS, application.

  1. L'écran affiche des artefacts colorés après quelques minutes de jeu.
  2. Le programme plante avec « fichier introuvable » alors que le fichier existe.
  3. La machine s'éteint brutalement sous forte charge, sans message d'erreur logiciel.
  4. Le curseur ne bouge plus alors que la souris est reconnue dans les réglages.
  5. Un compteur d'identifiants passe brutalement de 4 294 967 295 à 0 dans une base de données.
  6. Un routeur choisit un chemin qui traverse deux fois le même nœud, alors qu'un chemin plus court existe.

#Éléments de correction

  1. Pilote ou carte graphique surchauffant : le rendu est fautif avant l'application elle-même.
  2. Application : le chemin construit est erroné ( mauvais répertoire courant, nom mal orthographié) ; l'OS a bien signalé l'état réel.
  3. Matériel : coupure thermique ou alimentation insuffisante, la panne est sous la couche logicielle.
  4. Pilote ou application capturant la souris : le matériel fonctionne (la détection passe), le flot des événements est bloqué plus haut.
  5. Matériel (arithmétique de la couche booléenne) relayé par la couche logicielle : l'identifiant est un entier 32 bits non signé, et 2322^{32} motifs sont épuisés. La couche supérieure n'a pas anticipé la limite ; c'est un débordement d'entier, pas un bug de requête.
  6. Socle formel de la couche réseau : le calcul de chemin relève de la théorie des graphes, et l'algorithme utilisé n'a pas la propriété d'optimalité attendue (ou le graphe contient un cycle mal pris en compte). Le diagnostic se fait sur l'algorithme, pas sur le câblage.

#Ce qu'il faut retenir

Reliez chaque couche logicielle à une ressource matérielle : un pilote GPU programme la carte graphique, un socket traverse la carte réseau, un appel read atteint le contrôleur du SSD. Reliez ensuite chaque domaine à son socle formel : le calcul booléen décrit les circuits, les graphes décrivent les réseaux, la logique décrit les bases de données. Les trois rôles de l'OS tiennent en trois verbes : abstraire, arbitrer, isoler. Et gardez les ordres de grandeur en tête : la latence domine pour RAM et SSD, le débit pour le réseau, la fréquence et l'IPC pour le CPU.