Cours
Architecture des machines et systèmes d'exploitation
Un programme Python n'est qu'un texte : pour qu'il s'exécute, il faut une machine et un système d'exploitation. Ce chapitre ouvre le capot.
D'abord l'architecture de von Neumann, commune à tous les ordinateurs depuis , et la façon dont le processeur déroule des instructions machine très simples.
Puis les circuits combinatoires, briques électroniques qui réalisent les fonctions booléennes.
Enfin le système d'exploitation : ses fonctions, les commandes de base du terminal et la gestion des droits d'accès aux fichiers.
1. Le modèle de von Neumann
1.1 Les constituants
En , John von Neumann décrit l'architecture encore utilisée aujourd'hui.
| Constituant | Rôle |
|---|---|
| processeur (CPU) | exécute les instructions |
| mémoire vive (RAM) | cases numérotées par une adresse, qui contiennent données et instructions ; elle est volatile |
| entrées-sorties | clavier, souris, écran, disque, réseau, capteurs et actionneurs : les périphériques |
| bus | fils qui relient ces éléments : adresses, données, commandes |
Le processeur contient lui-même trois parties.
| Partie du processeur | Rôle |
|---|---|
| unité de commande | lit les instructions, les décode, pilote le reste |
| unité arithmétique et logique (UAL) | effectue les calculs et les comparaisons |
| registres | quelques cases très rapides : R0, R1…, et le compteur de programme PC, qui contient l'adresse de la prochaine instruction |
1.2 Le cycle d'exécution
Un processeur actuel effectue plusieurs milliards de cycles par seconde : c'est sa fréquence, exprimée en GHz.
1.3 Monoprocesseur et multiprocesseur
Une architecture monoprocesseur exécute une instruction à la fois.
Une architecture multiprocesseur (ou multicœur) réunit plusieurs processeurs qui partagent la mémoire et exécutent des programmes en parallèle.
Les processeurs des téléphones et des ordinateurs actuels ont de à cœurs. Les cartes graphiques en comptent des milliers, spécialisés dans les calculs répétitifs.
2. Le langage machine
2.1 Des instructions très simples
Le processeur ne comprend qu'un langage machine : des instructions codées en binaire, chacune très élémentaire. On les écrit lisiblement en assembleur.
| Instruction | Effet |
|---|---|
LOAD R0, [10] | copie le contenu de la case mémoire dans le registre R0 |
STORE [11], R1 | écrit R1 dans la case |
ADD R1, R1, R0 | R1 R1 R0 |
SUB R0, R0, #1 | R0 R0 (le # annonce une valeur immédiate) |
JMP 5 | saute à l'instruction d'adresse |
JNZ R0, 2 | saute à l'adresse si R0 , sinon continue |
HALT | arrêt |
Une ligne Python comme s = s + n devient plusieurs instructions machine : charger s et n dans des registres, additionner, ranger le résultat.
C'est le compilateur, ou l'interpréteur, qui fait la traduction.
2.2 Dérouler une séquence
Dérouler un programme, c'est suivre à chaque étape PC, les registres et la mémoire.
Exemple : calculer , avec dans la case et le résultat dans la case .
0 LOAD R0, [10] ; R0 = n
1 LOAD R1, [11] ; R1 = 0
2 ADD R1, R1, R0 ; R1 = R1 + R0
3 SUB R0, R0, #1 ; R0 = R0 - 1
4 JNZ R0, 2 ; si R0 ≠ 0, retour en 2
5 STORE [11], R1
6 HALT
Pour : après les deux chargements, R0 et R1 .
Tour 1 : R1 , R0 , saut. Tour 2 : R1 , R0 , saut. Tour 3 : R1 , R0 , pas de saut. La case reçoit .
Le bloc ci-dessous est un petit processeur simulé en Python. Il n'est pas nécessaire de lire la fonction executer en détail : change la valeur de la case dans memoire, ou modifie le programme, et observe le déroulement.
Essaie avec memoire = {10: 0, 11: 0} : que se passe-t-il, et pourquoi ? La réponse est dans l'exemple résolu, question b.
3. Les circuits combinatoires
Le processeur est construit avec des portes logiques : des circuits électroniques à transistors qui réalisent and, or, not (et aussi xor, nand) sur des tensions représentant et .
| Circuit | Ce qu'il fait |
|---|---|
| demi-additionneur | additionne deux bits : somme a xor b, retenue a and b |
| additionneur complet | additionne deux bits et une retenue ; chaîné ou fois, il additionne des entiers |
| comparateur | indique si deux nombres sont égaux |
| décodeur d'instructions | active les bons circuits selon le code de l'instruction |
Toute l'UAL est faite ainsi : calculer, c'est faire circuler des bits dans des portes.
Vérifie quelques lignes à la main : , qui s'écrit , soit somme et retenue .
4. Le système d'exploitation
4.1 Ses fonctions
| Il gère… | C'est-à-dire |
|---|---|
| le processeur | lancer les programmes (les processus), partager le temps de calcul entre eux |
| la mémoire | attribuer à chaque processus sa zone, l'isoler des autres |
| les fichiers | organiser disques et dossiers en arborescence, lire et écrire |
| les périphériques | pilotes du clavier, de l'écran, du réseau, de l'imprimante |
| les utilisateurs et la sécurité | comptes, mots de passe, droits d'accès |
| l'énergie et l'interface | mise en veille ; interface graphique ou ligne de commande |
4.2 Libre ou propriétaire
Les systèmes libres sont développés par des communautés et des entreprises. Ils font fonctionner la majorité des serveurs, des supercalculateurs et des téléphones.
Le choix engage le coût, la transparence, la possibilité de vérifier la sécurité, et la dépendance à un éditeur.
4.3 La ligne de commande
Le terminal permet de piloter le système par des commandes textuelles. Il est indispensable sur les serveurs, qui n'ont pas d'écran, et pour automatiser des tâches.
| Commande | Effet |
|---|---|
pwd | affiche le dossier courant (print working directory) |
ls puis ls -l | liste le contenu, puis avec les détails : droits, taille, date |
cd nsi, cd .., cd / | entre dans nsi, remonte d'un niveau, va à la racine |
mkdir tp1 | crée un dossier |
cp a.py b.py | copie un fichier |
mv a.py tp1/ | déplace, ou renomme |
rm a.py, rm -r tp1 | supprime un fichier, ou un dossier et tout son contenu |
cat a.py | affiche le contenu d'un fichier |
touch a.py | crée un fichier vide |
python3 a.py | exécute un programme |
whoami, man ls | utilisateur courant, manuel d'une commande |
Voici une session typique. Lis-la ligne par ligne, en imaginant l'arborescence.
$ pwd
/home/ana
$ mkdir nsi
$ cd nsi
$ touch tp1.py
$ ls
tp1.py
$ cp tp1.py tp2.py
$ ls
tp1.py tp2.py
$ cd ..
$ pwd
/home/ana4.4 Droits et permissions
Chaque fichier a un propriétaire et un groupe. Le système distingue trois catégories d'utilisateurs, et trois droits.
| Catégorie d'utilisateurs | Lettre |
|---|---|
| le propriétaire | u |
| le groupe | g |
| les autres | o |
| Droit | Lettre | Signification |
|---|---|---|
| lecture | r | lire le contenu |
| écriture | w | modifier |
| exécution | x | exécuter un programme, ou entrer dans un dossier |
La commande ls -l affiche par exemple :
-rwxr-xr-- 1 ana eleves 1204 sept. 13 notes.txt
On modifie les droits avec chmod, de deux façons.
chmod g+w notes.txt # ajoute l'écriture au groupe
chmod o-r notes.txt # retire la lecture aux autres
chmod u+x script.py # rend le fichier exécutable par sa propriétairechmod 754 notes.txt # rwx r-x r--
chmod 644 notes.txt # rw- r-- r--
chmod 700 notes.txt # rwx --- ---L'utilisateur root, l'administrateur, a tous les droits. On n'utilise ses pouvoirs (sudo) que pour administrer la machine.
Et dans l'autre sens ? Ce bloc retrouve les neuf lettres à partir du nombre. Essaie , , .
5. Exemple résolu pas à pas
Correction · Question a
Au départ : PC , R0 , R1 , case , case .
| Instruction | PC après | R0 | R1 |
|---|---|---|---|
LOAD R0, [10] | 1 | 2 | 0 |
LOAD R1, [11] | 2 | 2 | 0 |
ADD R1, R1, R0 | 3 | 2 | 2 |
SUB R0, R0, #1 | 4 | 1 | 2 |
JNZ R0, 2 (saut) | 2 | 1 | 2 |
ADD R1, R1, R0 | 3 | 1 | 3 |
SUB R0, R0, #1 | 4 | 0 | 3 |
JNZ R0, 2 (pas de saut) | 5 | 0 | 3 |
STORE [11], R1 | 6 | 0 | 3 |
HALT | arrêt |
La case contient . Tu peux le vérifier avec le processeur simulé.
Correction · Question b
R0 vaut au départ : ADD laisse R1 à , puis SUB donne R0 .
JNZ saute, car .
R0 ne repassera par qu'après avoir fait le tour de toutes les valeurs représentables : c'est une boucle quasi infinie.
Il faudrait tester R0 avant d'additionner.
Correction · Question c
La ligne attendue : -rwxrw---- 1 ana eleves … projet.py.
La commande : chmod 760 projet.py, car rwx , rw- et --- .
Correction · Question d
Gestion des fichiers : lire projet.py sur le disque, après avoir vérifié qu'Ana en a le droit.
Gestion des processus et de la mémoire : créer le processus Python, lui allouer de la mémoire, partager le processeur.
Gestion des périphériques : afficher la sortie à l'écran.
À retenir
Révise ce chapitre avec KlarIA
Tuteur qui t'explique pas à pas, quiz pour t'entraîner, flashcards pour mémoriser. Gratuit.
Créer mon compte gratuitement→