KlarIA
💻 NSI (spécialité)1ereCours

Architecture des machines et systèmes d'exploitation

📖

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 19451945, 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 19451945, John von Neumann décrit l'architecture encore utilisée aujourd'hui.

ConstituantRô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-sortiesclavier, souris, écran, disque, réseau, capteurs et actionneurs : les périphériques
busfils qui relient ces éléments : adresses, données, commandes

Le processeur contient lui-même trois parties.

Partie du processeurRôle
unité de commandelit les instructions, les décode, pilote le reste
unité arithmétique et logique (UAL)effectue les calculs et les comparaisons
registresquelques cases très rapides : R0, R1…, et le compteur de programme PC, qui contient l'adresse de la prochaine instruction
Modèle de von Neumann

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 44 à 1616 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.

InstructionEffet
LOAD R0, [10]copie le contenu de la case mémoire 1010 dans le registre R0
STORE [11], R1écrit R1 dans la case 1111
ADD R1, R1, R0R1 \leftarrow R1 ++ R0
SUB R0, R0, #1R0 \leftarrow R0 1- 1 (le # annonce une valeur immédiate)
JMP 5saute à l'instruction d'adresse 55
JNZ R0, 2saute à l'adresse 22 si R0 0\neq 0, sinon continue
HALTarrê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 n+(n1)++1n + (n - 1) + \cdots + 1, avec nn dans la case 1010 et le résultat dans la case 1111.

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 n=3n = 3 : après les deux chargements, R0 =3= 3 et R1 =0= 0.

Tour 1 : R1 =3= 3, R0 =2= 2, saut. Tour 2 : R1 =5= 5, R0 =1= 1, saut. Tour 3 : R1 =6= 6, R0 =0= 0, pas de saut. La case 1111 reçoit 66.

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 1010 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 00 et 11.

CircuitCe qu'il fait
demi-additionneuradditionne deux bits : somme a xor b, retenue a and b
additionneur completadditionne deux bits et une retenue ; chaîné 3232 ou 6464 fois, il additionne des entiers
comparateurindique si deux nombres sont égaux
décodeur d'instructionsactive 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 : 1+1+1=31 + 1 + 1 = 3, qui s'écrit 112\overline{11}^{\,2}, soit somme 11 et retenue 11.

4. Le système d'exploitation

4.1 Ses fonctions

Il gère…C'est-à-dire
le processeurlancer les programmes (les processus), partager le temps de calcul entre eux
la mémoireattribuer à chaque processus sa zone, l'isoler des autres
les fichiersorganiser disques et dossiers en arborescence, lire et écrire
les périphériquespilotes 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'interfacemise 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.

CommandeEffet
pwdaffiche le dossier courant (print working directory)
ls puis ls -lliste 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 tp1crée un dossier
cp a.py b.pycopie un fichier
mv a.py tp1/déplace, ou renomme
rm a.py, rm -r tp1supprime un fichier, ou un dossier et tout son contenu
cat a.pyaffiche le contenu d'un fichier
touch a.pycrée un fichier vide
python3 a.pyexécute un programme
whoami, man lsutilisateur 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/ana

4.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'utilisateursLettre
le propriétaireu
le groupeg
les autreso
DroitLettreSignification
lecturerlire le contenu
écriturewmodifier
exécutionxexé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étaire

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 600600, 755755, 777777.

5. Exemple résolu pas à pas

Correction · Question a

Au départ : PC =0= 0, R0 =0= 0, R1 =0= 0, case 10=210 = 2, case 11=011 = 0.

InstructionPC aprèsR0R1
LOAD R0, [10]120
LOAD R1, [11]220
ADD R1, R1, R0322
SUB R0, R0, #1412
JNZ R0, 2 (saut)212
ADD R1, R1, R0313
SUB R0, R0, #1403
JNZ R0, 2 (pas de saut)503
STORE [11], R1603
HALTarrêt

La case 1111 contient 3=2+13 = 2 + 1. Tu peux le vérifier avec le processeur simulé.

Correction · Question b

R0 vaut 00 au départ : ADD laisse R1 à 00, puis SUB donne R0 =1= -1.
JNZ saute, car 10-1 \neq 0.
R0 ne repassera par 00 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 =7= 7, rw- =6= 6 et --- =0= 0.

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