Du programme au processus
Comprendre ce qui se passe réellement lorsqu’un programme fonctionne.
Objectifs
À la fin de cette leçon, vous saurez :
- expliquer le cheminement d'un programme jusqu'au matériel ;
- distinguer programme, fichier exécutable et processus ;
- comprendre la différence entre compilation et interprétation ;
- décrire les rôles du CPU, de la RAM et du stockage.
🔗 Pour vous rafraîchir la mémoire : lecture de fichiers et aide (
cat,grep,man)
Le schéma global
Utilisateur
↓
Programme
↓
Système d'exploitation
↓
CPU / RAM / disque / réseau
C'est la chaîne complète que vous saurez raconter à la fin de ce cursus. Chaque couche s'appuie sur la précédente : l'utilisateur est devant le terminal, le programme est ce qui tourne, le système d'exploitation réserve les ressources, le matériel exécute.
Qu'est-ce qu'un programme, exactement ?
Un programme est une suite d'instructions. Dans une application web, elles seront écrites dans des fichiers texte : le code source.
Trois états successifs :
code source (texte lisible)
↓
binaire (instructions comme la machine parle)
↓
processus (programme en cours d'exécution, en mémoire)
- Le code source est lisible par un humain.
- Le binaire est la traduction en instructions machine exécutables.
- Le processus est une instance vivante : le binaire, chargé en mémoire, en cours d'exécution, avec son état (variables, fichier courant, position dans le programme).
Compilation et interprétation
Deux familles de transformation :
Compilation : le code source est traduit intégralement en binaire, une fois, avant d'être exécuté.
compilateur
code source ────────────→ programme exécutable → processus
Interprétation : un autre programme (l'interpréteur) lit le code source ligne par ligne et exécute l'action correspondante à la volée.
interpréteur
code source ──────────→ instructions exécutées directement
Les noms changent, mais le principe est le même : rendre les instructions compréhensibles par la machine.
node mon-script.js # Node.js est un interpréteur JavaScript
Que fait la machine ?
Trois composants sont à distinguer :
| Composant | Rôle | Si on le coupe |
|---|---|---|
| CPU | exécute les instructions | rien ne tourne |
| RAM | mémoire vive : données et instructions d'un processus en cours | tout s'efface |
| Stockage (disque) | conserve les fichiers de façon permanente | les fichiers deviennent inaccessibles |
La RAM est volatile : ce qui y vit disparaît quand le processeur s'arrête ou que le programme se termine. Le stockage est persistant mais beaucoup plus lent. Le processus vit en RAM ; le code source vit sur le disque, sous forme de fichier.
Le système d'exploitation, arbitre des ressources
Le noyau Linux (le cœur du système d'exploitation) fait tout le petit travail invisible :
- il charge un programme dans la RAM ;
- il lui alloue du CPU par petits bouts de temps ;
- il isole un processus des autres : il ne peut pas écraser la mémoire d'un voisin ;
- il relie le programme aux périphériques (disque, réseau, terminal) par des ponts standards.
Le programme ne parle jamais directement au matériel : il demande au système, qui vérifie puis autorise ou refuse.
Exercice
- Ouvrez un éditeur et écrivez un fichier
mon-script.jscontenantconsole.log("salut système");, puis exécutez-le avecnode: identifiez la marche de chaque couche. - Quelle couche a chargé le binaire en RAM ? Quel programme a lu le code source ?
- Trouvez la commande qui, dans la leçon précédente, vous a permis de localiser
node(cherchez dans vos souvenirs de la leçon sur l'exploration).
Résumé
- Utilisateur → programme → système d'exploitation → matériel.
- Code source, binaire et processus sont trois états distincts.
- La compilation traduit avant ; l'interprétation traduit pendant.
- Le CPU exécute, la RAM vit, le disque conserve.
- Le système d'exploitation arbitre tout : aucun programme ne parle au matériel sans passer par lui.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Réponses détaillées
Exercice 1. La chaîne complète :
vous tapez : node mon-script.js
↓
début du processus node
↓
Node.js lit mon-script.js sur le disque
↓
Node écrit sur stdout
↓
le terminal affiche : salut système
Le terminal affiche le texte reçu du processus par le canal de sortie standard ; le "salut" n'est jamais sur le disque.
Exercice 2. Le système d'exploitation charge le processus en RAM : c'est lui qui décide. Node, lui, a lu le code source depuis le fichier .js. RAM: le contenu du processus ; disque : le contenu du fichier.
Exercice 3. which node. La localisation remonte à la position du programme dans le stockage : pour Node comme pour toutes les commandes.