Qu'est-ce qu'un programme — ses liens avec le CPU, la mémoire et le stockage

Cet article fait partie du cours Les bases de l'informatique, qui construit depuis zéro les connaissances informatiques pratiques indispensables pour programmer et faire du vibe coding.
Un programme est une suite d'instructions : quand tu l'exécutes, il est chargé en mémoire et le CPU les effectue une à une. Des schémas montrent pourquoi l'enregistrement seul ne l'exécute pas, à partir du partage des rôles entre les trois composants.

Cet article porte sur ce qui se passe dans l'ordinateur quand un programme s'exécute.

Enregistrer un fichier et l'exécuter sont deux événements distincts dans l'ordinateur.

Cette différence s'explique par ce dont chacun des trois composants — CPU, mémoire et stockage — a la charge.

  • Un programme est une suite d'instructions : l'exécuter avance ligne par ligne depuis le haut
  • Le partage des rôles entre CPU, mémoire et stockage, et ce qui disparaît quand tu coupes l'alimentation
  • Pourquoi l'enregistrement seul ne l'exécute pas — l'écriture ne va pas plus loin que le stockage
  • Ce que le « exécute ce fichier » d'une procédure transmet à l'environnement d'exécution

Un programme est une série d'instructions, et l'exécuter avance depuis le haut

Un programme (program) rassemble les instructions que tu veux faire effectuer à l'ordinateur, rangées dans l'ordre où elles sont effectuées.

Le texte lisible par un humain est le code source (source code), et les effectuer une à une depuis le haut, c'est l'exécution (run / execute).

Les trois lignes alignées à gauche du schéma sont le contenu de app.js, et le CPU n'en reçoit jamais qu'une à la fois.

Une ligne qui ne fait que mémoriser une valeur n'affiche rien.

Quand la troisième ligne se termine, l'exécution elle-même se termine, et les valeurs mémorisées en chemin ne subsistent pas.

Si une instruction en cours de route ne peut pas être effectuée, l'exécution se termine là.

Dans les trois lignes suivantes, le nom gokei du milieu n'est écrit nulle part.

console.log("Affichage du total");
gokei();
console.log("Terminé");

« Ça s'est arrêté sur une erreur » signifie que l'exécution s'est terminée avant d'atteindre la dernière ligne.

La première ligne s'affiche bien, la ligne du milieu produit le texte de l'erreur, et la dernière n'est jamais lue.

Un programme est une suite d'instructions effectuées depuis le haut

Un programme, c'est ce que tu veux faire faire, écrit dans l'ordre.

L'exécuter, c'est effectuer cette suite une à une depuis le haut, et si une ligne en cours de route ne peut pas être effectuée, l'exécution se termine sans que les lignes suivantes soient lues.

De quoi le CPU, la mémoire et le stockage ont-ils chacun la charge

L'« ordinateur » du schéma précédent est fait de trois composants aux rôles différents.

Le CPU (Central Processing Unit) effectue les instructions une à une, la mémoire (memory) ne contient les éléments que pendant l'exécution, et le stockage (storage) conserve ce qui s'y trouve même quand l'alimentation est coupée.

Le partage des rôles entre CPU, mémoire et stockage
CPUprocesseurMémoireRAMStockageSSD / disqueExécute une à uneles instructionsGarde l'exécutionet ses valeursConserve lesfichiersRien ne subsisteEffacéConservé« Mémoireinsuffisante » ici« Espace disqueinsuffisant » ici
À gauche le composant, au centre ce dont il a la charge, à droite s'il subsiste quand l'alimentation est coupée. La colonne de droite est l'indice pour lire les messages d'avertissement.
Un fichier unique se découpe en instructions qui arrivent au CPU une à une
app.js dansle stockageInstruction 1Instruction 2Instruction 3Le CPU les exécuteune à uneMémoire
Le fichier app.js du stockage, à gauche, est un seul fichier. Une fois chargé en mémoire, il se découpe en instructions, et le CPU, à droite, les reçoit une à une depuis le haut.

Un fichier unique du stockage devient une suite d'instructions dans la mémoire, et le CPU n'en reçoit qu'une seule à la fois.

Les valeurs intermédiaires d'un calcul sont elles aussi placées en mémoire, et le fichier du stockage n'est pas réécrit pendant l'exécution.

Dans un seul ordinateur, les trois composants se répartissent ainsi.

Les trois composants à l'intérieur de ton ordinateur
Ton ordinateur
Stockage
  • Le fichier app.js que tu as enregistré
  • Subsiste tel quel même quand l'alimentation est coupée
Mémoire
  • Le contenu de app.js une fois chargé
  • Les valeurs mémorisées en chemin, comme 150 et 200
  • Tout disparaît quand l'alimentation est coupée
CPU
  • Ne reçoit que l'instruction qu'il effectue en ce moment
  • Il ne détient plus les instructions terminées
L'extérieur, c'est ton ordinateur. Le stockage conserve les fichiers enregistrés, et la mémoire ne contient que ce qui s'exécute en ce moment.

Seul le contenu se déplace ; le fichier app.js du stockage, lui, reste où il est.

Ce qui entre en mémoire, c'est uniquement ce qui s'exécute en ce moment et ses valeurs intermédiaires.

Cette distinction apparaît aussi dans la façon de lire les avertissements de l'ordinateur.

« Mémoire insuffisante » concerne la mémoire : supprimer des fichiers ne l'augmente donc pas, en général.

« Espace disque insuffisant » concerne le stockage, et là, supprimer des fichiers en libère.

Conserver et exécuter se font à deux endroits différents

Le stockage est l'endroit où les fichiers sont conservés, la mémoire celui où se trouve ce qui s'exécute en ce moment, et le CPU est ce qui effectue ces instructions une à une.

Ce que tu as écrit dans le stockage subsiste quand l'alimentation est coupée, et ce qui était en mémoire disparaît.

Pourquoi enregistrer un fichier ne suffit pas à l'exécuter

Enregistrer, c'est écrire les caractères du code source dans le stockage.

Ils sont écrits dans le dossier de my-app, l'application de réservation que tu construis.

Où le fichier se place dans le stockage quand tu l'enregistres
Stockage
my-app (le dossier de l'app de réservation en cours)
  • app.js — le code source que tu as enregistré
  • Réenregistrer change le contenu de ce fichier
Autres dossiers
  • Fichiers photo et documents
  • Les fichiers qui ne s'exécutent pas restent là eux aussi
L'extérieur, c'est le stockage. my-app est le dossier de l'application de réservation que tu construis, et le fichier app.js enregistré y entre.

Le CPU ne va jamais lire de lui-même un fichier placé là.

Quand tu as seulement enregistré, aucune instruction n'a encore été effectuée.

ÉtapeStockageMémoireÉcran
Enregistrer seulementapp.js est écritRien n'y entreRien ne s'affiche
Enregistrer et exécuterapp.js est inchangéChargé et démarre350 s'affiche

La ligne « enregistrer seulement » s'arrête au stockage : comme rien n'entre en mémoire, le CPU ne reçoit aucune instruction.

Rien ne se passe à l'écran parce que tu n'as pas demandé l'exécution.

Quand tu relances l'exécution, l'ancien contenu de la mémoire est jeté et le nouveau fichier est chargé.

Ce que tu as corrigé s'exécute au moment de ce rechargement.

C'est pour cette raison qu'une procédure te dit de relancer l'exécution.

Enregistrer n'est pas appliquer

Enregistrer ne va pas plus loin que l'écriture des caractères dans le stockage.

Un programme en cours d'exécution continue avec le contenu tel qu'il était au chargement : même si tu corriges le fichier, le résultat à l'écran ne change pas tant que tu n'as pas relancé l'exécution.

« Exécute ce fichier » veut dire le remettre à l'environnement d'exécution

L'environnement d'exécution (runtime ; logiciel qui lit le code source et fait effectuer les instructions par le CPU) est ce qui charge le fichier en mémoire et délivre les instructions au CPU.

Le « exécute ce fichier » d'une procédure, c'est remettre le fichier à cet environnement d'exécution.

La seule chose que tu tapes toi-même est la ligne tout à gauche.

Cette ligne apparaît dans les procédures sous cette forme.

# Exécuter du code source JavaScript (Node.js)
node app.js

# Exécuter du code source Python
python app.py

Cette ligne est une commande (command ; instruction en texte qui indique à un logiciel ce qu'il doit faire).

Le début est le nom de l'environnement d'exécution, la suite le nom du fichier de code source, séparés par un espace.

Ce que contient une seule ligne de commande
Une commande (node app.js)
Le début — nom de l'environnement d'exécution
  • node — lit le code source JavaScript
  • python — lit le code source Python
La suite — le fichier que tu remets
  • app.js — le nom du fichier de code source enregistré
  • L'environnement d'exécution le charge depuis le stockage
  • Un nom court défini à l'avance remplace parfois le nom du fichier
L'extérieur est la ligne de commande, et les deux éléments à l'intérieur sont le début et la suite. Les commandes des procédures se lisent en les découpant en ces deux parties.

Le début te dit quel environnement d'exécution est nécessaire, la suite quel fichier sera chargé.

L'écran où tu tapes cette ligne est traité dans l'article « Qu'est-ce qu'un environnement de développement » de ce cours.

Même quand le langage change, la lecture reste la même : le début est le logiciel qui reçoit, la suite est ce que tu lui remets.

Il y a un autre point où le libellé des procédures diffère.

La façon dont les choses se terminent après la demande d'exécution se divise en deux.

Après la demande d'exécution, il y a deux fins possibles
Demanderl'exécutionVa jusqu'à ladernière ligneRésultat affiché,retour à l'inviteUne instructionattend sans finNe finit pasavant l'arrêt
Une même demande se divise en une branche haute et une branche basse. La branche du haut est un programme qui se termine à la dernière ligne, celle du bas un programme qui ne se termine pas tant que tu ne l'arrêtes pas.

La branche du bas est le type de programme qu'une procédure te dit de laisser démarré.

Certains environnements d'exécution rechargent le fichier automatiquement à chaque enregistrement.

Même dans ce cas, l'écran ne change qu'une fois le nouveau fichier chargé.

Demander l'exécution, c'est remettre un fichier

« Exécute ce fichier » signifie : remets le fichier au logiciel appelé environnement d'exécution.

Tu le remets avec une ligne comme node app.js, et certains programmes vont jusqu'à la dernière ligne puis se terminent, tandis que d'autres ne se terminent pas tant que tu ne les arrêtes pas.

QUIZ

Vérification des connaissances

Répondez à chaque question une par une.

Question 1Quand tu as seulement enregistré le code source, dans quel composant ce fichier est-il conservé ?

Question 2Que fait un ordinateur quand il « exécute un programme » ?

Question 3Dans la commande node app.js, à quoi renvoie le node du début ?