NSI Première • Programme français, lycées de Montréal
Exercices corrigés de NSI : architectures matérielles, systèmes et réseaux
Voici une série d'exercices corrigés de NSI pour la classe de Première, sur les architectures matérielles, les systèmes d'exploitation et les réseaux du programme français. Elle s'adresse aux élèves des lycées français de Montréal, le Lycée Marie de France et le Collège Stanislas.
Elle couvre la numération binaire et hexadécimale, le complément à deux et le débordement (exercice 1), les portes logiques et le demi-additionneur (exercice 2), le modèle de von Neumann et le cycle d'instruction (exercice 3), le langage machine lu en assembleur (exercice 4), le système de fichiers, les commandes Linux et les permissions (exercices 5 et 13), le rôle du système d'exploitation (exercice 6), l'adresse IP, le masque de sous-réseau et le routage (exercice 7), le protocole du bit alterné (exercice 11) et l'encapsulation des données dans le modèle en couches TCP/IP (exercice 12). Les problèmes font construire un circuit de vote majoritaire (exercice 14) et multiplier par décalages de bits (exercice 15).
Le fil de la série : une suite de bits n'a aucune valeur en soi, elle n'en a une que pour une CONVENTION donnée, et tout ce que fait un ordinateur se ramène à des portes logiques et au cycle lire, décoder, exécuter. Le système d'exploitation n'est pas une interface : c'est le programme qui distribue les ressources entre des programmes qui ne se connaissent pas. Trois pièges sont désignés nommément dans le corrigé : lire une suite de bits sans se demander quelle convention s'applique, croire que deux adresses qui se ressemblent sont sur le même réseau, et vouloir accélérer un processeur qui, en réalité, attend (exercices 8 et 10).
La partie D traite deux points du programme de Première : le rôle des capteurs et des actionneurs, avec une interface programmée sur une carte micro:bit et testée contre son cahier des charges (exercice 16), et la différence entre systèmes d'exploitation libres et propriétaires (exercice 17). La mémoire virtuelle, le cache et le découpage en sous-réseaux, traités dans les parties B et C, sont signalés comme des approfondissements.
Série autocorrigéeTape tes réponses et vérifie-les question par question : la page te dit juste ou faux avant d'ouvrir la correction. Avec un compte, chaque bonne réponse du premier coup rapporte des points, et tes réponses justes restent remplies quand tu reviens.
•Conversion binaire : divisions successives par 2, les restes se lisent du dernier au premier. Hexadécimal : regrouper les bits par quatre depuis la droite.
•Complément à deux sur n bits : inverser tous les bits puis ajouter 1. L'intervalle va de −2n−1 à 2n−1−1.
•Débordement : additionner deux nombres de même signe et obtenir le signe opposé.
•Demi-additionneur : la somme est un OU exclusif, la retenue est un ET. Un additionneur complet ajoute la retenue entrante.
•Modèle de von Neumann : mémoire, unité de commande, unité de calcul, entrées-sorties, reliés par un bus. Le programme est rangé comme une donnée.
•Cycle d'instruction : lire, décoder, exécuter. Le compteur ordinal s'incrémente seul, sauf lors d'un saut qui le remplace.
•Chemin absolu : commence à la racine. Chemin relatif : part du répertoire courant. Le point est le répertoire courant, le point-point son parent.
•Permissions rwx par groupes de trois : propriétaire, groupe, autres. Sur un répertoire, x signifie TRAVERSER, pas exécuter.
•Deux machines sont sur le même sous-réseau si le ET avec le masque donne la même adresse de réseau. Un /n laisse 232−n adresses, dont deux réservées.
•Approfondissement, hiérarchie mémoire : registre 0,3 ns, cache 1 ns, mémoire vive 80 ns, mémoire flash 50 µs, disque 8 ms. Le temps moyen est dominé par les échecs de cache.
•Un CAPTEUR transforme une grandeur physique en donnée (bouton, accéléromètre, thermomètre) ; un ACTIONNEUR transforme une donnée en action (écran, haut-parleur, moteur). Un programme embarqué tourne dans une boucle sans fin : lire, décider, commander.
•Logiciel libre : quatre libertés, utiliser, étudier, redistribuer, modifier ; étudier et modifier exigent le code source. Libre parle de la licence, pas du prix : libre ne veut pas dire gratuit.
Partie A : Les bases (/50)
Exercice 1 : Binaire, hexadécimal et complément à deux
Un ordinateur ne connaît que des suites de bits. Tout le reste, entiers positifs, entiers négatifs, adresses, couleurs, est une CONVENTION d'interprétation de ces suites, et c'est la convention qu'il faut connaître. Le schéma ci-dessous représente l'octet et les deux programmes qui le lisent.
a) Convertissez 45 en binaire sur 8 bits, puis en hexadécimal. Détaillez la méthode des divisions successives et la vérification.
b) La suite 11010011 est lue par deux programmes différents, l'un qui l'interprète comme un entier naturel, l'autre comme un entier relatif en complément à deux. Donnez les deux valeurs.
c) Écrivez moins 45 en complément à deux sur 8 bits. Détaillez la construction, puis vérifiez en additionnant 45 et son opposé.
d) Donnez l'intervalle des entiers représentables sur 8 bits en complément à deux, et le nombre de valeurs. Pourquoi l'intervalle n'est-il pas symétrique ?
e) Un programme calcule 100 plus 50 sur 8 bits signés. Quel résultat obtient-il ? Comment s'appelle ce phénomène et comment le détecte-t-on ?
Voir la correction
Réponses
a)45 = 00101101 = 0x2D
b)211 ou −45 selon la convention
c)Inverser puis ajouter 1 : 11010011
d)De −128 à 127 : 256 valeurs
e)100 + 50 donne −106 : débordement
a)
Divisions successives par 2 : 45=2×22+1, 22=2×11+0, 11=2×5+1, 5=2×2+1, 2=2×1+0, 1=2×0+1. On lit les restes du dernier au premier : 101101, donc 00101101 sur 8 bits. Vérification : 32+8+4+1=45. En hexadécimal, on regroupe les bits par quatre depuis la droite : 0010 et 1101, soit 2 et D, donc 0x2D. Vérification : 2×16+13=45.
b)
Comme entier naturel, 11010011 vaut 128+64+16+2+1=211. Comme entier relatif en complément à deux, le bit de poids fort valant 1, le nombre est négatif : sa valeur est 211−256=−45. On peut aussi le retrouver en inversant tous les bits, ce qui donne 00101100 soit 44, puis en ajoutant 1 pour obtenir 45, et en mettant le signe moins. La même suite de huit bits vaut donc 211 ou moins 45 selon la seule convention retenue, et rien dans la mémoire ne dit laquelle est la bonne.
c)
On part de 45, soit 00101101. On inverse tous les bits : 11010010. On ajoute 1 : 11010011. C'est bien la suite de la question b, ce qui confirme le résultat. Vérification par addition : 00101101+11010011 donne 100000000 sur neuf bits ; le neuvième bit sort de la largeur du registre et est perdu, il reste 00000000, c'est-à-dire zéro. C'est exactement l'intérêt du complément à deux : la soustraction se fait avec le circuit d'addition, sans matériel supplémentaire.
d)
L'intervalle est de −128 à +127, soit 28=256 valeurs. Il n'est pas symétrique parce que le zéro occupe une place du côté positif : les 256 combinaisons se répartissent en 128 valeurs dont le bit de poids fort vaut 0, à savoir 0 à 127, et 128 valeurs dont ce bit vaut 1, à savoir −128 à −1. Le côté positif perd donc une place au profit du zéro. Conséquence pratique : l'opposé de −128 n'est pas représentable, et le calculer redonne −128, ce qui surprend toujours.
e)
100+50=150, qui dépasse 127 : le résultat ne tient pas. En binaire, 01100100+00110010=10010110, dont le bit de poids fort vaut 1 : lu en complément à deux, cela donne 150−256=−106. Le programme obtient donc moins 106 en additionnant deux nombres positifs. Le phénomène s'appelle le DÉBORDEMENT. On le détecte à un signe caractéristique : additionner deux nombres de même signe et obtenir un résultat de signe opposé est impossible en arithmétique exacte, donc c'est la signature du débordement. Les processeurs disposent d'ailleurs d'un indicateur dédié, que les langages de haut niveau choisissent le plus souvent d'ignorer.
Coche ici les exercices faits ou à revoir : un compte gratuit, sans mot de passe, retient tes coches et tes réponses justes d'une visite à l'autre, te dit quel chapitre attaquer ensuite et te permet de demander l'exercice qui te manque. Crée ton espace, un courriel suffit.
Exercice 2 : Portes logiques et demi-additionneur
Le schéma montre le circuit qui additionne deux bits. Il ne contient que deux portes, et pourtant tout le calcul d'un processeur se construit à partir de lui.
a) Dressez la table de vérité complète du circuit : les quatre couples possibles de a et b, et les valeurs de S et de R correspondantes.
b) Vérifiez que ce circuit calcule bien l'addition de deux bits. Interprétez les colonnes S et R.
c) Donnez les tables de vérité des portes ET, OU et NON, puis exprimez le OU exclusif à l'aide de ces trois portes.
d) Ce circuit ne suffit pas pour additionner deux nombres de 8 bits. Expliquez ce qui manque et décrivez le circuit complet, dit additionneur complet.
e) Combien de portes ET, OU et NON faut-il pour un additionneur 8 bits construit à partir d'additionneurs complets, en admettant qu'un additionneur complet demande 9 portes élémentaires ? Que devient ce nombre pour un additionneur 64 bits ?
Voir la correction
Réponses
a)S = OU exclusif, R = ET
b)S somme, R retenue
c)OU exclusif avec ET, OU, NON
d)Additionneur complet : retenue entrante
e)72 puis 576 portes
a)
Table de vérité. Pour a valant 0 et b valant 0 : S vaut 0 et R vaut 0. Pour a valant 0 et b valant 1 : S vaut 1 et R vaut 0. Pour a valant 1 et b valant 0 : S vaut 1 et R vaut 0. Pour a valant 1 et b valant 1 : S vaut 0 et R vaut 1. La colonne S est bien celle d'un OU exclusif, qui vaut 1 quand exactement une des deux entrées vaut 1 ; la colonne R est celle d'un ET, qui vaut 1 seulement quand les deux valent 1.
b)
L'addition binaire de deux bits donne : 0+0=0, 0+1=1, 1+0=1, et 1+1=10 en binaire, c'est-à-dire 0 de somme et 1 de retenue. C'est exactement le contenu de la table. La colonne S est le chiffre des unités du résultat, la colonne R est la RETENUE qui doit être reportée sur la colonne suivante, exactement comme dans une addition posée en base dix.
c)
La porte ET vaut 1 seulement si les deux entrées valent 1. La porte OU vaut 1 dès qu'au moins une entrée vaut 1. La porte NON inverse son entrée unique. Le OU exclusif s'écrit alors : a ET NON b, OU bien NON a ET b. Autrement dit, on prend le OU des deux cas où les entrées diffèrent. Une autre écriture, plus compacte, est le ET du OU et du NON du ET : (a OU b) ET NON(a ET b), qui se lit « au moins un des deux, mais pas les deux ».
d)
Il manque la prise en compte de la retenue ENTRANTE, celle produite par la colonne précédente. Le demi-additionneur additionne deux bits ; pour additionner deux nombres, chaque colonne doit en additionner TROIS : les deux bits du rang et la retenue venue du rang inférieur. Le circuit complet, appelé additionneur complet, s'obtient en chaînant deux demi-additionneurs : le premier additionne a et b, le second additionne leur somme et la retenue entrante ; la retenue sortante est le OU des deux retenues produites. On construit ensuite un additionneur de 8 bits en chaînant 8 additionneurs complets, la retenue sortante de chacun devenant la retenue entrante du suivant.
e)
Pour 8 bits, il faut 8 additionneurs complets, soit 8×9=72 portes élémentaires. Pour 64 bits, 64×9=576 portes. Le nombre croît linéairement avec la largeur, ce qui est très raisonnable ; en revanche le TEMPS de calcul croît lui aussi linéairement, puisque chaque retenue doit être calculée avant la suivante. C'est ce délai en cascade, et non le nombre de portes, qui a conduit à inventer des additionneurs à anticipation de retenue, plus gourmands en portes mais nettement plus rapides.
Exercice 3 : Le modèle de von Neumann et le cycle d'instruction
Le schéma donne l'organisation qui, depuis 1945, structure tous les ordinateurs à programme enregistré. Son idée décisive tient en une phrase : le programme est rangé dans la même mémoire que les données.
a) Donnez le rôle de chacun des quatre blocs, en une phrase, puis dites ce que transporte le bus.
b) Énoncez les trois phases du cycle d'exécution d'une instruction, dans l'ordre, et dites quel bloc travaille pendant chacune.
c) Quelle est l'idée centrale du modèle, et quelle conséquence pratique en tire-t-on ? Citez une application quotidienne de cette conséquence.
d) Le compteur ordinal contient l'adresse de la prochaine instruction. Décrivez ce qui lui arrive pendant un cycle ordinaire, puis pendant l'exécution d'un saut.
e) Un processeur fonctionne à 3 GHz et exécute en moyenne une instruction tous les 4 cycles d'horloge. Combien d'instructions exécute-t-il par seconde ? Combien de temps met-il à exécuter un programme de 12 milliards d'instructions ?
Voir la correction
Réponses
a)Mémoire, commande, calcul, entrées-sorties
b)Lire, décoder, exécuter
c)Programme enregistré en mémoire
d)Saut : adresse remplacée
e)750 millions par seconde : 16 s
a)
La MÉMOIRE conserve à la fois le programme et les données, sous forme de mots numérotés par des adresses. L'UNITÉ DE COMMANDE lit les instructions, les décode et pilote tous les autres blocs en conséquence. L'UNITÉ DE CALCUL effectue les opérations arithmétiques et logiques sur les données qu'on lui fournit. Les ENTRÉES-SORTIES relient la machine au monde, clavier, écran, disque, réseau. Le bus transporte trois choses : les ADRESSES, qui disent où lire ou écrire, les DONNÉES, qui sont ce qu'on lit ou écrit, et les signaux de COMMANDE, qui disent s'il s'agit d'une lecture ou d'une écriture.
b)
Les trois phases sont, dans l'ordre : LIRE l'instruction en mémoire à l'adresse indiquée par le compteur ordinal, ce qui mobilise la mémoire et le bus ; DÉCODER cette instruction, ce qui mobilise l'unité de commande, qui détermine l'opération et les opérandes ; EXÉCUTER, ce qui mobilise l'unité de calcul pour un calcul, ou de nouveau la mémoire pour une lecture ou une écriture de donnée. Ce cycle se répète sans fin tant que la machine est allumée.
c)
L'idée centrale est que le PROGRAMME EST UNE DONNÉE : il est rangé dans la même mémoire que les données qu'il manipule, dans le même format de mots binaires. La conséquence pratique est qu'un programme peut en lire, en écrire, en produire un autre, et qu'il suffit de charger un nouveau contenu en mémoire pour changer ce que fait la machine, sans toucher au matériel. Application quotidienne : installer une application, ou faire une mise à jour, revient exactement à cela. Avant ce modèle, changer de calcul demandait de recâbler physiquement la machine, ce qui prenait des jours.
d)
Pendant un cycle ordinaire, le compteur ordinal est LU pour connaître l'adresse de l'instruction, puis INCRÉMENTÉ de la taille d'une instruction, si bien qu'il désigne déjà la suivante avant même la fin de l'exécution. Pendant un saut, l'exécution REMPLACE cette valeur par l'adresse de destination : le compteur ne pointe plus sur l'instruction suivante mais sur celle indiquée par le saut. C'est ce simple remplacement qui produit toutes les boucles et tous les branchements conditionnels d'un programme.
e)
À 3 GHz, le processeur exécute 3×109 cycles par seconde. À raison d'une instruction tous les 4 cycles, il exécute 3×109/4=7,5×108 instructions par seconde, soit 750 millions. Un programme de 12×109 instructions demande 12×109/(7,5×108)=16 secondes. Ce calcul suppose que le processeur ne s'arrête jamais, ce qui est faux en pratique : dès qu'une donnée manque en mémoire cache, il attend, et l'exercice 9 montre que cette attente dépasse largement le temps de calcul.
Exercice 4 : Lire un programme en langage machine
Voici un programme écrit dans un langage d'assemblage simplifié. LOAD charge une valeur dans un registre, ADD et SUB calculent, JNZ saute si le registre n'est pas nul, STORE écrit en mémoire, HALT arrête.
0: LOAD R0, #5
1: LOAD R1, #0
2: ADD R1, R1, R0
3: SUB R0, R0, #1
4: JNZ R0, 2
5: STORE R1, 100
6: HALT
a) Faites la trace complète de l'exécution : donnez les valeurs de R0 et R1 après chaque passage par l'instruction 4.
b) Quelle valeur est écrite à l'adresse 100 ? Que calcule ce programme, en une phrase ?
c) Combien d'instructions sont exécutées en tout ? Détaillez le décompte.
d) Écrivez l'équivalent de ce programme en Python, en quatre lignes.
e) On remplace la valeur initiale 5 par 1000. Combien d'instructions le programme exécute-t-il ? Écrivez un programme qui obtient le même résultat en un nombre d'instructions indépendant de la valeur initiale.
Voir la correction
Réponses
a)R1 : 5, 9, 12, 14, 15
b)15 : somme de 1 à 5
c)2+3×5+2=19
d)Boucle while en Python
e)3 004 instructions contre 7
a)
Au départ, R0 vaut 5 et R1 vaut 0. Premier passage en 4 : R1 vaut 0+5=5 et R0 vaut 4, donc on saute. Deuxième passage : R1 vaut 5+4=9 et R0 vaut 3, on saute. Troisième : R1 vaut 9+3=12 et R0 vaut 2, on saute. Quatrième : R1 vaut 12+2=14 et R0 vaut 1, on saute. Cinquième : R1 vaut 14+1=15 et R0 vaut 0, donc on NE saute pas et l'exécution continue en 5.
b)
La valeur écrite à l'adresse 100 est 15. Le programme calcule la somme des entiers de 1 à 5, c'est-à-dire 5+4+3+2+1=15. Plus généralement, il calcule la somme des entiers de 1 à la valeur initiale de R0.
c)
Décompte. Les deux instructions d'initialisation, en 0 et en 1, sont exécutées une fois : cela fait 2. Le corps de boucle, formé des instructions 2, 3 et 4, est exécuté 5 fois : cela fait 3×5=15. Les instructions 5 et 6 sont exécutées une fois : cela fait 2. Le total vaut 2+15+2=19 instructions. Le piège est de compter 4 tours au lieu de 5, en oubliant que le dernier tour s'exécute entièrement avant que le saut ne soit refusé.
d)
En Python : r0 = 5 ; puis r1 = 0 ; puis while r0 != 0 : r1 = r1 + r0 et r0 = r0 - 1 ; enfin memoire[100] = r1. Le rapprochement est instructif : une boucle while de Python n'est rien d'autre qu'un test suivi d'un saut conditionnel, et le compilateur produit exactement le programme de l'énoncé.
e)
Avec 1000 au lieu de 5, le total vaut 2+3×1000+2=3004 instructions. Pour obtenir le même résultat en un nombre d'instructions FIXE, on utilise la formule de la somme des premiers entiers, n(n+1)/2. Le programme devient : charger n dans R0, copier R0 dans R1, ajouter 1 à R1, multiplier R0 par R1, diviser par 2, écrire à l'adresse 100, arrêter. Cela fait 7 instructions quelle que soit la valeur de n, contre 3 004. Vérification pour n=1000 : 1000×1001/2=500500. C'est le même écart de nature qu'entre un algorithme linéaire et un algorithme constant : aucune accélération du processeur ne rattrape un changement de formule.
Exercice 5 : Le système de fichiers : chemins et commandes
Un système de fichiers est un arbre, exactement comme le document de l'exercice sur le Web. Voici une arborescence et les commandes qui la parcourent. Le répertoire courant est /home/ada/tp. Le schéma placé sous le tableau dessine la même arborescence.
Chemin
Nature
/
racine
/home
répertoire
/home/ada
répertoire personnel
/home/ada/tp
répertoire, courant
/home/ada/tp/tri.py
fichier
/home/ada/tp/donnees
répertoire
/home/ada/tp/donnees/notes.csv
fichier
/home/bob/partage
répertoire
a) Distinguez chemin absolu et chemin relatif. Donnez les deux chemins du fichier notes.csv depuis le répertoire courant.
b) Que signifient les notations point et point-point ? Écrivez le chemin relatif de /home/bob/partage depuis le répertoire courant.
c) Donnez la commande qui affiche le contenu du répertoire courant, celle qui crée un répertoire resultats, celle qui s'y déplace, et celle qui affiche le répertoire courant.
d) Un fichier a les permissions rw-r-----, son propriétaire est ada et son groupe est eleves. Décodez-les entièrement. Bob, qui n'appartient pas au groupe, peut-il le lire ?
e) Expliquez pourquoi le droit d'exécution sur un RÉPERTOIRE ne signifie pas la même chose que sur un fichier. Que se passe-t-il si on le retire à un répertoire ?
Voir la correction
Réponses
a)Absolu depuis /, relatif depuis le courant
b)../../bob/partage
c)ls, mkdir, cd, pwd
d)rw-, r--, --- : Bob ne lit pas
e)x sur un répertoire : traverser
a)
Un chemin ABSOLU part de la racine et commence donc par une barre oblique : il désigne le même fichier quel que soit le répertoire courant. Un chemin RELATIF part du répertoire courant et ne commence pas par une barre : il désigne des fichiers différents selon l'endroit d'où on l'écrit. Pour notes.csv, le chemin absolu est /home/ada/tp/donnees/notes.csv et le chemin relatif, depuis /home/ada/tp, est donnees/notes.csv. Le second est plus court et se déplace avec le projet ; le premier est robuste mais casse dès que l'arborescence change.
b)
Le point désigne le répertoire courant lui-même, le point-point désigne son répertoire PARENT. Depuis /home/ada/tp, il faut remonter deux fois pour atteindre /home, puis redescendre : le chemin relatif est ../../bob/partage. On vérifie en comptant les remontées : un point-point mène à /home/ada, deux mènent à /home, et il reste bob puis partage.
c)
Afficher le contenu du répertoire courant : ls, ou ls -l pour le détail avec les permissions. Créer un répertoire : mkdir resultats. S'y déplacer : cd resultats. Afficher le répertoire courant : pwd. Il faut retenir que cd est la seule de ces commandes qui change l'état du terminal ; les trois autres se contentent d'afficher ou de créer.
d)
Les neuf caractères se lisent par groupes de trois : le propriétaire, le groupe, les autres. Ici rw- pour le propriétaire ada, donc lecture et écriture mais pas exécution ; r-- pour le groupe eleves, donc lecture seule ; --- pour les autres, donc aucun droit. Bob n'étant ni le propriétaire ni membre du groupe, il relève de la troisième catégorie : il ne peut PAS lire le fichier. Il faut noter que les trois catégories sont exclusives et testées dans cet ordre : être propriétaire l'emporte sur être membre du groupe, même si le groupe a plus de droits.
e)
Sur un FICHIER, le droit d'exécution autorise à le lancer comme un programme. Sur un RÉPERTOIRE, il autorise à le TRAVERSER, c'est-à-dire à accéder à ce qu'il contient quand on en connaît le nom. Les deux sens n'ont rien à voir. Si on retire ce droit à un répertoire tout en laissant le droit de lecture, on obtient une situation déroutante : on peut lister les noms des fichiers qu'il contient, mais on ne peut ouvrir aucun d'eux, ni même savoir leur taille. Inversement, avec l'exécution mais sans la lecture, on peut ouvrir un fichier dont on connaît exactement le nom, sans pouvoir découvrir la liste. C'est ce second réglage qu'on utilise pour un répertoire de dépôt public.
Partie B : Problèmes et raisonnement (/50)
Exercice 6 : Ce que fait vraiment un système d'exploitation
Le système d'exploitation n'est pas l'interface graphique. C'est un programme, chargé au démarrage, dont la fonction est de distribuer les ressources de la machine entre des programmes qui ne se connaissent pas.
Approfondissement pour les questions d) et e) : la mémoire virtuelle et l'échange de pages sur le disque vont au-delà du programme de Première, qui demande d'identifier les fonctions d'un système d'exploitation et précise qu'« il ne s'agit pas d'une étude théorique des systèmes d'exploitation ». Les questions a) à c) sont au programme. Le schéma ci-dessous représente la machine et ses trois programmes.
a) Citez cinq ressources que le système d'exploitation distribue, et pour chacune un conflit qui surviendrait s'il ne le faisait pas.
b) Un programme ne parle jamais directement au disque : il demande au système. Expliquez les deux raisons de cette interdiction, l'une de sécurité, l'autre de portabilité.
c) Qu'appelle-t-on appel système ? Donnez trois exemples et expliquez ce qui se passe, du point de vue du processeur, au moment d'un appel système.
d) La machine dispose de 8 Gio de mémoire vive. Trois programmes en réclament respectivement 3, 4 et 3 Gio. Expliquez ce qui se passe, nommez le mécanisme employé, et dites pourquoi la machine devient soudain très lente.
e) Un accès à la mémoire vive coûte 80 ns, un accès au disque 8 ms. En reprenant la question d, calculez de quel facteur un accès ralentit, puis la durée d'un programme qui fait 106 accès si un accès sur mille tombe sur le disque.
Cinq ressources et leurs conflits. Le PROCESSEUR : sans arbitrage, un programme qui boucle monopoliserait la machine et tous les autres seraient gelés. La MÉMOIRE : sans arbitrage, deux programmes écriraient au même endroit et se détruiraient mutuellement. Les FICHIERS : sans arbitrage, deux écritures simultanées dans le même fichier produiraient un contenu incohérent. Les PÉRIPHÉRIQUES : sans arbitrage, deux programmes qui impriment mélangeraient leurs pages. Le RÉSEAU : sans arbitrage, deux programmes réclameraient le même numéro de port et les réponses arriveraient au mauvais destinataire.
b)
Raison de SÉCURITÉ : si un programme pouvait écrire directement sur le disque, il pourrait lire les fichiers de tous les utilisateurs, modifier le système lui-même et contourner toute permission. Passer par le système permet de vérifier, à chaque demande, que le programme a le droit de faire ce qu'il demande. Raison de PORTABILITÉ : il existe des dizaines de types de disques, chacun avec son protocole. Si chaque programme devait les connaître, il faudrait le réécrire à chaque nouveau matériel. Le système offre une interface unique, ouvrir, lire, écrire, fermer, et se charge de la traduire ; le programme fonctionne alors sans modification sur une machine qu'il ne connaît pas.
c)
Un appel système est la demande qu'un programme adresse au système d'exploitation pour obtenir un service qu'il n'a pas le droit d'accomplir lui-même. Trois exemples : ouvrir un fichier, allouer de la mémoire, envoyer des données sur le réseau. Du point de vue du processeur, l'appel provoque un changement de MODE : le processeur quitte le mode utilisateur, dans lequel les instructions privilégiées sont interdites, pour le mode noyau, dans lequel elles sont permises. Le contrôle passe à une adresse fixée à l'avance par le système, jamais choisie par le programme, ce qui est précisément ce qui rend le mécanisme sûr. À la fin du service, le processeur repasse en mode utilisateur et rend la main au programme.
d)
Les trois programmes réclament 3+4+3=10 Gio alors que la machine en a 8 : il en manque 2. Le système ne refuse pas pour autant : il utilise la MÉMOIRE VIRTUELLE et le mécanisme d'échange sur disque, souvent appelé pagination ou swap. Les pages de mémoire les moins récemment utilisées sont écrites sur le disque, libérant de la place en mémoire vive ; quand un programme y accède de nouveau, elles sont relues. La machine devient très lente parce qu'un accès qui coûtait 80 nanosecondes en coûte désormais 8 millisecondes quand la page est sur le disque, soit cent mille fois plus. Si les trois programmes travaillent simultanément, les pages sont échangées sans cesse dans les deux sens, phénomène appelé écroulement, et la machine passe plus de temps à déplacer des pages qu'à calculer.
e)
Le facteur de ralentissement vaut 8×10−3/(80×10−9)=100000. Pour 106 accès dont un sur mille tombe sur le disque : 999000 accès en mémoire coûtent 999000×80×10−9≈0,0799 s, et 1000 accès au disque coûtent 1000×8×10−3=8 s. Le total vaut environ 8,08 secondes, alors que sans aucun accès disque il aurait valu 106×80×10−9=0,08 s. Un accès sur mille suffit donc à multiplier la durée par plus de cent. C'est la raison pour laquelle ajouter de la mémoire vive à une machine qui échange transforme radicalement son comportement, alors qu'un processeur plus rapide ne changerait presque rien.
Exercice 7 : Réseau : adressage, masque et routage
Le schéma montre deux sous-réseaux reliés par un routeur. Chaque machine porte une adresse, et c'est le masque qui décide si deux machines peuvent se parler directement.
Approfondissement pour la question d) : le découpage d'un réseau en sous-réseaux va au-delà du programme de Première, qui demande de simuler ou de mettre en œuvre un réseau et de présenter le rôle de ses constituants. Lire un masque /24 et décider si deux machines sont sur le même réseau, comme en a), b), c) et e), est la pratique courante de ces simulations.
a) Que signifie la notation /24 ? Combien d'adresses le sous-réseau 192.168.1.0/24 contient-il, et combien sont utilisables par des machines ?
b) La machine 192.168.1.37 veut joindre 192.168.1.90. Montrez, en appliquant le masque, qu'elles sont dans le même sous-réseau, et dites par où passe le message.
c) La même machine veut joindre 192.168.2.15. Montrez qu'elles ne sont pas dans le même sous-réseau et décrivez le trajet complet du message.
d) On veut découper 192.168.1.0/24 en quatre sous-réseaux égaux. Donnez le nouveau masque, les quatre adresses de réseau et le nombre de machines par sous-réseau.
e) Une machine est configurée avec l'adresse 192.168.1.37 et le masque /16 alors que le routeur utilise /24. Décrivez précisément ce qui fonctionne encore et ce qui cesse de fonctionner.
Voir la correction
Réponses
a)/24 : 256 adresses, 254 utilisables
b)Même réseau : envoi direct
c)Réseau différent : passerelle
d)/26 : 4 réseaux de 62 machines
e)Masque /16 : le réseau voisin échoue
a)
La notation /24 signifie que les 24 premiers bits de l'adresse identifient le RÉSEAU, et que les bits restants identifient la machine dans ce réseau. Une adresse IPv4 comptant 32 bits, il reste 32−24=8 bits, soit 28=256 adresses. Deux ne sont pas attribuables à une machine : l'adresse de réseau, 192.168.1.0, et l'adresse de diffusion, 192.168.1.255. Il reste donc 256−2=254 adresses utilisables.
b)
Le masque /24 correspond à 255.255.255.0. En appliquant un ET bit à bit, l'adresse 192.168.1.37 donne le réseau 192.168.1.0, et 192.168.1.90 donne également 192.168.1.0. Les deux réseaux étant identiques, les machines sont sur le même sous-réseau : le message part DIRECTEMENT de l'une à l'autre, sans jamais passer par le routeur. C'est le calcul que fait toute machine avant chaque envoi, et c'est lui, et rien d'autre, qui décide de l'itinéraire.
c)
Pour 192.168.2.15, le même ET donne le réseau 192.168.2.0, différent de 192.168.1.0. Les machines ne sont donc pas sur le même sous-réseau. Le trajet complet : la machine émettrice envoie le message à sa PASSERELLE par défaut, c'est-à-dire à l'interface 192.168.1.254 du routeur ; le routeur constate que la destination appartient à 192.168.2.0/24, réseau auquel il est directement relié par son interface 192.168.2.254 ; il transmet le message sur cette interface, et celui-ci atteint 192.168.2.15. Le message a donc franchi un saut de routeur, ce que révélerait un compteur de sauts diminué de un.
d)
Pour quatre sous-réseaux, il faut emprunter 2 bits à la partie machine, puisque 22=4. Le nouveau masque est donc /26, soit 255.255.255.192. Les quatre adresses de réseau sont 192.168.1.0, 192.168.1.64, 192.168.1.128 et 192.168.1.192, car 232−26=26=64 adresses par sous-réseau. Chacun offre 64−2=62 adresses de machine. On vérifie le total : 4×62=248 machines contre 254 auparavant, la différence de 6 venant des six adresses de réseau et de diffusion supplémentaires. Découper coûte des adresses, et c'est le prix de la séparation.
e)
Avec un masque /16, la machine croit que tout le 192.168.0.0 forme un seul réseau local. Ce qui FONCTIONNE encore : joindre les machines de 192.168.1.0/24, puisqu'elles sont bien locales, et le calcul donne le même verdict. Ce qui CESSE de fonctionner : joindre 192.168.2.15. La machine conclut à tort que cette adresse est locale, donc elle n'envoie rien au routeur et cherche directement le destinataire sur son propre câble ; personne ne répond, et la connexion échoue par expiration de délai. Le symptôme est déroutant : la machine communique parfaitement avec ses voisins immédiats, et échoue sur une adresse qui semble pourtant plus proche que l'extérieur, lequel fonctionne d'ailleurs très bien puisqu'une adresse publique, elle, n'est pas dans 192.168.0.0/16 et part donc bien vers le routeur.
Exercice 8 : Cinq affirmations à corriger
Chacune des cinq affirmations suivantes est FAUSSE. Dites pourquoi et donnez l'énoncé correct.
1) « La suite de bits 11010011 vaut 211. »
2) « Sur 8 bits signés, on représente les entiers de moins 127 à 127. »
3) « Le système d'exploitation est l'interface graphique de l'ordinateur. »
4) « Deux machines dont les adresses commencent par 192.168 sont forcément sur le même réseau local. »
5) « Pour accélérer une machine qui rame parce qu'elle manque de mémoire, il faut un processeur plus rapide. »
Voir la correction
Réponses
1)211 ou −45
2)De −128 à 127
3)Système : arbitre des ressources
4)C'est le masque qui décide
5)Ajouter de la mémoire
1)
FAUX, ou plutôt incomplet. La suite vaut 211 si on l'interprète comme un entier NATUREL, et moins 45 si on l'interprète comme un entier relatif en complément à deux. Rien dans la mémoire ne dit laquelle des deux conventions s'applique : c'est le type déclaré dans le programme qui décide. Énoncé correct : une suite de bits n'a pas de valeur en soi, elle a une valeur POUR UNE CONVENTION donnée.
2)
FAUX. L'intervalle est de moins 128 à 127, soit 256 valeurs. Il est asymétrique parce que le zéro occupe une des 128 places du côté où le bit de poids fort vaut 0. Énoncé correct : sur n bits en complément à deux, on représente les entiers de −2n−1 à 2n−1−1.
3)
FAUX. L'interface graphique est un programme comme un autre, qui s'exécute par-dessus le système. Le système d'exploitation est le programme qui distribue le processeur, la mémoire, les fichiers, les périphériques et le réseau entre tous les programmes. Un serveur fonctionne parfaitement sans aucune interface graphique. Énoncé correct : le système d'exploitation gère les ressources et arbitre entre les programmes ; l'interface graphique n'est qu'un de ses clients.
4)
FAUX. C'est le MASQUE, et lui seul, qui définit le réseau local. Avec un masque /24, 192.168.1.37 et 192.168.2.15 sont sur deux réseaux différents et ne peuvent se parler qu'en passant par un routeur, malgré leurs deux premiers octets identiques. Énoncé correct : deux machines sont sur le même sous-réseau si et seulement si l'application du masque à leurs adresses donne la même adresse de réseau.
5)
FAUX. Quand une machine manque de mémoire, elle échange des pages avec le disque, et un accès passe de 80 nanosecondes à 8 millisecondes, soit cent mille fois plus. Le processeur, lui, attend : il est déjà inoccupé. Énoncé correct : quand le goulot est la mémoire, il faut ajouter de la mémoire vive, ou à défaut un disque à mémoire flash qui divise le coût de l'échange par cent ; un processeur plus rapide attendrait simplement plus vite.
Exercice 9 : La hiérarchie mémoire et le coût d'un accès
La frise place cinq niveaux de mémoire selon leur temps d'accès, sur une échelle où chaque graduation vaut dix fois la précédente. Les écarts sont si grands qu'ils ne s'imaginent pas sans une comparaison.
Approfondissement pour les questions d) et e) : le programme de Première demande de distinguer les rôles et les caractéristiques des constituants d'une machine, ce que font a), b) et c) ; le fonctionnement du cache par lignes et le calcul d'un temps d'accès moyen vont au-delà.
a) Relevez l'ordre de grandeur du temps d'accès de chacun des cinq niveaux. Quel facteur sépare le registre du disque ?
b) On ramène l'accès au registre à 1 seconde. Recalculez à cette échelle le temps d'accès des quatre autres niveaux et exprimez-les en unités parlantes.
c) Pourquoi les niveaux rapides sont-ils petits et les niveaux lents grands ? Donnez les deux raisons, l'une physique, l'autre économique.
d) Un programme parcourt un tableau de 10 millions d'entiers, soit dans l'ordre, soit dans un ordre aléatoire. Expliquez pourquoi le premier est plusieurs fois plus rapide, alors que le nombre d'accès est identique.
e) Un cache retient 95 pour cent des accès, les 5 pour cent restants allant en mémoire vive. En prenant 1 ns pour le cache et 80 ns pour la mémoire, calculez le temps d'accès moyen. Que devient-il si le taux de succès tombe à 80 pour cent ?
Voir la correction
Réponses
a)Facteur 2,7×107
b)4,4 min pour la mémoire, 309 jours pour le disque
c)Distance et coût
d)Lecture par blocs de 16 entiers
e)4,95 ns puis 16,8 ns
a)
Registre : de l'ordre de la nanoseconde, en pratique environ 0,3 ns. Cache : quelques nanosecondes, environ 1 ns pour le premier niveau. Mémoire vive : environ 80 ns, soit une centaine de nanosecondes. Mémoire flash : quelques dizaines de microsecondes, environ 50 µs. Disque à plateaux : quelques millisecondes, environ 8 ms. Le facteur entre le registre et le disque vaut 8×10−3/(0,3×10−9)≈2,7×107, soit près de vingt-sept millions.
b)
Le facteur d'échelle vaut 1/(0,3×10−9)≈3,33×109. Le cache, à 1 ns, devient 3,33 secondes. La mémoire vive, à 80 ns, devient 266,7 secondes, soit environ 4,4 minutes. La mémoire flash, à 50 µs, devient 1,67×105 secondes, soit environ 1,9 jour. Le disque, à 8 ms, devient 2,67×107 secondes, soit environ 309 jours, c'est-à-dire dix mois. Prendre une donnée dans un registre est aussi immédiat que la lire sur son bureau ; aller la chercher sur le disque revient à commander un livre qui arrivera dans dix mois.
c)
Raison PHYSIQUE : une mémoire rapide doit être proche du processeur, or la lumière parcourt 30 centimètres en une nanoseconde ; à quelques nanosecondes de budget, la mémoire doit tenir à quelques centimètres, ce qui limite sévèrement sa taille. S'y ajoute qu'une cellule rapide occupe beaucoup plus de transistors qu'une cellule lente. Raison ÉCONOMIQUE : le coût par octet varie dans le même rapport que la vitesse, de plusieurs ordres de grandeur. Une machine dont toute la mémoire serait aussi rapide qu'un cache serait techniquement possible et commercialement absurde. La hiérarchie est donc un compromis, pas une imperfection.
d)
Parce que la mémoire ne se lit pas octet par octet mais par BLOCS : un accès charge dans le cache une ligne entière, typiquement 64 octets, soit 16 entiers de 4 octets. Dans un parcours ordonné, un accès sur seize seulement va réellement en mémoire vive, les quinze suivants trouvant leur donnée dans le cache. Dans un parcours aléatoire, presque chaque accès tombe sur une ligne différente, donc chacun paie le prix fort. Le nombre d'accès du programme est identique, mais le nombre d'accès à la MÉMOIRE ne l'est pas, et c'est lui qui compte. C'est la raison pour laquelle deux algorithmes de même complexité peuvent différer d'un facteur dix en pratique.
e)
Avec 95 pour cent de succès : 0,95×1+0,05×80=0,95+4,00=4,95 ns. Avec 80 pour cent : 0,80×1+0,20×80=0,80+16,00=16,80 ns. Le temps moyen est multiplié par 16,80/4,95≈3,39 alors que le taux de succès n'a baissé que de 15 points. La raison est que le temps moyen est dominé par les ÉCHECS, cent fois plus coûteux : ce sont eux qu'il faut compter, jamais les succès. C'est exactement le même raisonnement que celui de l'exercice 6 sur l'échange de pages, avec des ordres de grandeur plus modestes.
Exercice 10 : Problème : diagnostiquer un poste lent
Un poste de la salle informatique est devenu très lent. Il porte un processeur à 2,4 GHz à 4 coeurs, 8 Gio de mémoire vive, un disque à plateaux, et il est relié au réseau du lycée en 100 Mbit/s. On veut trouver la cause avant de commander quoi que ce soit.
Approfondissement : ce diagnostic repose sur la mémoire virtuelle et l'échange sur disque de l'exercice 6, qui dépassent le programme de Première. Il se traite pourtant avec des proportions et des ordres de grandeur, et il reste un bon entraînement au raisonnement sur les constituants d'une machine. Le graphique ci-dessous reproduit l'écran de l'outil de surveillance.
a) Un outil de surveillance indique : processeur à 12 pour cent, mémoire à 99 pour cent, disque à 100 pour cent, réseau à 3 pour cent. Nommez le goulot et justifiez en une phrase.
b) Le poste échange 240 Mio par minute avec le disque. Sachant qu'une page fait 4 kio et qu'un accès disque coûte 8 ms, combien de pages sont échangées par minute et combien de temps le disque passe-t-il à les servir ? Le chiffre est-il cohérent avec l'indication à 100 pour cent ?
c) On propose trois achats : un processeur à 4 GHz, 16 Gio de mémoire supplémentaires, un disque à mémoire flash à 50 µs d'accès. Estimez l'effet de chacun sur le temps de la question b et classez-les.
d) Un logiciel de la salle charge en mémoire un fichier de 6 Gio pour n'en lire qu'une colonne. Proposez la correction logicielle et estimez la mémoire réellement nécessaire si la colonne représente un quinzième du fichier.
e) Rédigez en cinq lignes le diagnostic et la recommandation à remettre au responsable de la salle, en distinguant ce qui se corrige sans dépense de ce qui demande un achat.
Voir la correction
Réponses
a)Goulot : la mémoire
b)61 440 pages, 491,5 s par minute
c)Mémoire d'abord, flash ensuite
d)Lecture en flux : 400 Mio
e)Corriger le logiciel avant d'acheter
a)
Le goulot est la MÉMOIRE, et le disque n'en est que le symptôme. Un processeur à 12 pour cent signifie qu'il attend la plupart du temps ; une mémoire à 99 pour cent et un disque à 100 pour cent signifient que le système échange des pages en permanence, exactement le phénomène décrit à l'exercice 6. Le réseau, à 3 pour cent, est hors de cause.
b)
Deux cent quarante mébioctets font 240×1024=245760 kio, soit 245760/4=61440 pages par minute. À 8 ms par accès, cela demande 61440×8×10−3=491,5 secondes de disque par minute. Or une minute n'en compte que 60 : la demande dépasse la capacité d'un facteur 491,5/60≈8,2. Le chiffre est donc parfaitement cohérent avec un disque à 100 pour cent, et il dit même davantage : le disque est saturé huit fois, ce qui signifie que les programmes attendent en file et que la machine est effectivement inutilisable.
c)
Le processeur à 4 GHz ne change RIEN : il est déjà inoccupé à 88 pour cent, et l'accélérer ne ferait qu'augmenter son temps d'attente. Les 16 Gio de mémoire supprimeraient la cause : avec 24 Gio au total, plus aucune page ne serait échangée, le temps de disque tomberait à presque zéro et la machine retrouverait sa vitesse nominale. Le disque à mémoire flash ne supprimerait pas la cause mais diviserait le coût de chaque échange par 8×10−3/(50×10−6)=160 : les 491,5 secondes deviendraient 3,07 secondes par minute, soit environ 5 pour cent d'occupation, ce qui rendrait la machine de nouveau utilisable. Classement : la mémoire d'abord, parce qu'elle traite la cause ; la mémoire flash ensuite, parce qu'elle traite l'effet mais très efficacement ; le processeur en dernier, parce qu'il ne traite rien.
d)
La correction logicielle est de lire le fichier en FLUX, ligne par ligne, en ne conservant que la colonne utile, au lieu de tout charger en mémoire. Si la colonne représente un quinzième du fichier, la mémoire nécessaire tombe à 6/15=0,4 Gio, soit 400 Mio, plus un tampon de lecture de quelques mébioctets. On passe de 6 Gio à moins d'un demi-gibioctet, soit un facteur 15, sans acheter quoi que ce soit et sans changer le résultat produit. C'est de loin la meilleure des solutions envisagées jusqu'ici.
e)
Le diagnostic et la recommandation. Un, le poste n'est pas lent par manque de puissance de calcul : le processeur est inoccupé à 88 pour cent, et le remplacer serait une dépense inutile. Deux, la cause est un manque de mémoire vive, qui contraint le système à échanger 61 440 pages par minute avec le disque, soit huit fois plus que ce que celui-ci peut servir. Trois, sans aucune dépense, corriger le logiciel qui charge 6 Gio pour n'en lire qu'un quinzième ramènerait le besoin à 400 Mio et supprimerait probablement le problème à lui seul. Quatre, si la correction logicielle est impossible, porter la mémoire de 8 à 24 Gio traite la cause ; à défaut, un disque à mémoire flash divise le coût d'un échange par 160 et rend la machine utilisable sans la guérir. Cinq, ne rien commander avant d'avoir tenté la correction logicielle, qui est gratuite, réversible et bénéficie à tous les postes de la salle.
Partie C : les classiques (/50)
Exercice 11 : Le protocole du bit alterné
Sur une liaison qui peut perdre des trames, la machine A envoie des messages à la machine B. Chaque message porte un bit de contrôle, 0 pour le premier, puis alternativement 1, 0, 1. À la réception d'un message, B renvoie un acquittement portant le même bit. A n'envoie le message suivant qu'après avoir reçu l'acquittement attendu ; si rien n'arrive au bout de 100 ms, A renvoie le même message. Si B reçoit un message dont le bit est celui du dernier message déjà accepté, il le jette comme doublon, mais renvoie l'acquittement.
Un trajet d'une trame, dans un sens ou dans l'autre, dure 20 ms ; on néglige les temps de traitement. Le schéma ci-dessous représente la liaison.
a) A envoie trois messages M1, M2 et M3, sans aucune perte. Quels bits portent-ils ? Combien de trames circulent en tout ?
b) Cette fois, l'acquittement de M1 est perdu. Décrivez ce que fait A, puis ce que fait B en recevant de nouveau M1. Combien de trames sont émises en tout, trame perdue comprise, et combien de messages B transmet-il à son application ?
c) Que se passerait-il, dans la situation de la question b, si les messages ne portaient aucun bit de contrôle ?
d) Pourquoi un seul bit suffit-il, alors qu'on envoie des milliers de messages ?
e) Combien de temps dure l'envoi des trois messages sans perte ? Et avec la perte de la question b ? Combien de messages par seconde la liaison écoule-t-elle au mieux ?
Voir la correction
Réponses
a)Bits 0, 1, 0 : 6 trames
b)Renvoi, doublon jeté : 8 trames, 3 messages
c)Sans bit : M1 livré deux fois
d)Deux cas à distinguer : un bit
e)120 ms, puis 220 ms ; 25 messages/s
a)
M1 porte le bit 0, M2 le bit 1 et M3 le bit 0. Chaque message est suivi de son acquittement : 3 messages et 3 acquittements, soit 6 trames.
b)
A ne reçoit pas l'acquittement de M1 : au bout de 100 ms, il RENVOIE M1, toujours avec le bit 0. B, qui a déjà accepté un message de bit 0 et attend maintenant le bit 1, reconnaît un doublon : il le jette, mais renvoie l'acquittement 0, puisque c'est précisément la perte de cet acquittement qui a provoqué le renvoi. A reçoit enfin l'acquittement et passe à M2. Trames émises : 4 messages et 4 acquittements, dont un perdu, soit 8. B transmet exactement 3 messages à son application : M1, M2 et M3, sans doublon.
c)
B ne pourrait pas distinguer un renvoi de M1 d'un nouveau message : il transmettrait M1 DEUX fois à son application. Pour un virement bancaire ou une commande, cela signifie une opération exécutée deux fois, sans que personne ne s'en aperçoive.
d)
Parce que A n'envoie jamais un nouveau message tant que le précédent n'est pas acquitté. À tout moment, B n'a que deux cas à distinguer : c'est encore le message qu'il a déjà reçu, ou c'est le suivant. Deux cas se codent sur un bit. Il faudrait davantage de bits si A envoyait plusieurs messages d'avance sans attendre.
e)
Sans perte, chaque échange dure 20+20=40 ms : les trois messages prennent 3×40=120 ms. Avec la perte : M1 part à 0 ms, l'acquittement est perdu, le délai expire à 100 ms ; le renvoi arrive à 120 ms et son acquittement à 140 ms ; M2 et M3 prennent ensuite 40 ms chacun, d'où une fin à 220 ms. Au mieux, la liaison écoule 401000=25 messages par seconde : attendre chaque acquittement est sûr, mais lent.
Exercice 12 : Encapsulation : du fichier aux trames
Un fichier de 4 000 octets est envoyé sur Internet. La couche transport (TCP) le découpe en segments de 1 460 octets de données au plus, et ajoute à chacun un en-tête de 20 octets. La couche réseau (IP) ajoute un en-tête de 20 octets, et la couche liaison (Ethernet) ajoute 18 octets d'en-tête et de fin de trame. Le schéma ci-dessous représente une trame, sans échelle.
a) En combien de segments le fichier est-il découpé ? Combien d'octets de données le dernier contient-il ?
b) Quelle est la taille d'une trame pleine ? Et celle de la dernière trame ?
c) Combien d'octets circulent en tout sur le câble ? Quel est le surcoût des en-têtes rapporté aux 4 000 octets de données, en pour cent ?
d) Dans quel ordre les en-têtes sont-ils ajoutés à l'émission ? Quel en-tête un routeur lit-il pour choisir la direction d'un paquet ?
e) Dans un terminal à distance, chaque touche frappée part dans un segment contenant un seul octet de données. Quelle est la taille de la trame, et combien de fois le surcoût dépasse-t-il la donnée ?
Voir la correction
Réponses
a)3 segments, 1 080 octets au dernier
b)1 518 et 1 138 octets
c)4 174 octets, surcoût 4,35 %
d)TCP, IP, Ethernet ; le routeur lit IP
e)59 octets pour un octet utile
a)
14604000≈2,74 : deux segments pleins ne suffisent pas, il en faut 3. Les deux premiers portent 2×1460=2920 octets, le dernier 4000−2920=1080 octets.
b)
Une trame pleine mesure 1460+20+20+18=1518 octets. La dernière mesure 1080+58=1138 octets. Les 58 octets d'en-têtes sont les mêmes quelle que soit la quantité de données.
c)
Total : 2×1518+1138=4174 octets. Le surcoût vaut 3×58=174 octets, soit 4000174≈4,35 pour cent des données. Pour un gros fichier, découpé en trames pleines, les en-têtes restent une petite fraction.
d)
À l'émission, on descend les couches : l'application fournit les données, TCP ajoute son en-tête, puis IP, puis Ethernet, qui est donc à l'extérieur. C'est l'ENCAPSULATION, comme une lettre glissée dans une enveloppe, elle-même glissée dans un sac postal. Un routeur lit l'en-tête IP, qui porte l'adresse de destination, pour choisir la direction ; il retire l'enveloppe Ethernet et en remet une nouvelle pour le lien suivant, sans ouvrir le segment TCP.
e)
La trame mesure 1+58=59 octets pour un octet utile : le surcoût de 58 octets dépasse la donnée 58 fois. C'est pourquoi les protocoles regroupent volontiers plusieurs petits envois en un seul segment quand c'est possible : le coût d'un paquet ne dépend presque pas de ce qu'il transporte.
Exercice 13 : Droits en octal et enchaînement de commandes
Sous Linux, chaque groupe de trois droits rwx se code par un chiffre : r vaut 4, w vaut 2, x vaut 1, et l'on additionne. Le shell permet aussi de rediriger l'affichage d'une commande dans un fichier avec > ou >>, et de passer la sortie d'une commande en entrée de la suivante avec le tube |.
Le fichier notes.csv contient les six lignes du tableau ci-dessous, en-tête compris. Le schéma placé sous le tableau rappelle le codage des droits.
Contenu de notes.csv
nom;matiere;note
Ada;NSI;16
Bob;Maths;12
Eve;NSI;14
Lin;NSI;9
Noé;Physique;15
a) Écrivez rwxr-xr-- en octal. Quels droits donne la commande chmod 640 rapport.txt ?
b) Le fichier sauve.sh a les droits rw-r--r--. Que répond le système à ./sauve.sh ? Donnez la commande chmod en octal qui permet au seul propriétaire de l'exécuter, sans changer les autres droits.
c) On exécute echo a > f.txt, puis echo b >> f.txt, puis echo c > f.txt. Que contient f.txt ?
d) Qu'affiche cat notes.csv | grep NSI | wc -l ? Décrivez le rôle de chaque étape.
e) Un répertoire contient les fichiers a.txt, b.txt et c.txt. On exécute cp a.txt d.txt, puis mv b.txt e.txt, puis rm c.txt. Combien de fichiers contient-il, et lesquels ?
Voir la correction
Réponses
a)754 ; chmod 640 : rw-r-----
b)Permission denied : chmod 744
c)> écrase : f.txt contient c
d)3 lignes contiennent NSI
e)a.txt, d.txt, e.txt
a)
rwx vaut 4+2+1=7, r-x vaut 4+1=5, r-- vaut 4 : rwxr-xr-- s'écrit 754. chmod 640 donne 6 = rw- au propriétaire, 4 = r-- au groupe, 0 = --- aux autres : rw-r-----.
b)
Le système répond Permission denied : personne n'a le droit x. Il faut ajouter x au propriétaire seulement : rw- devient rwx, soit 7, et le reste ne change pas : chmod 744 sauve.sh, qui donne rwxr--r--. Le piège est d'écrire chmod 777, qui donne aussi le droit d'écriture à tout le monde.
c)
f.txt contient seulement c. La redirection > ÉCRASE le fichier : le premier echo écrit a, le second ajoute b grâce à >>, mais le troisième, avec >, remplace tout le contenu par c. Confondre > et >> est la manière la plus rapide de perdre un fichier de résultats.
d)
cat affiche les six lignes du fichier ; grep NSI ne laisse passer que les lignes contenant la chaîne NSI, celles d'Ada, d'Eve et de Lin ; wc -l compte les lignes reçues. L'affichage est 3. Chaque commande ne fait qu'une chose, et le tube | les assemble : c'est le principe de conception des outils Unix.
e)
cp crée une copie : a.txt reste et d.txt apparaît, soit 4 fichiers. mv renomme : b.txt disparaît et e.txt apparaît, toujours 4. rm supprime c.txt : il reste 3 fichiers, a.txt, d.txt et e.txt. Le piège est de croire que mv copie : il déplace.
Exercice 14 : Problème : le circuit de vote majoritaire
Trois juges a, b et c appuient chacun sur un bouton, qui vaut 1 s'ils acceptent et 0 sinon. Une lampe M doit s'allumer quand AU MOINS DEUX juges acceptent. On veut construire le circuit avec des portes ET et OU à deux entrées. Le schéma ci-dessous représente le dispositif.
a) Dressez la table de vérité de M pour les huit combinaisons de a, b et c. Combien de lignes allument la lampe ?
b) Justifiez que M = (a ET b) OU (a ET c) OU (b ET c). Combien de portes à deux entrées faut-il pour réaliser cette expression ?
c) Vérifiez l'expression pour a = 1, b = 0, c = 1, puis pour a = 0, b = 0, c = 1.
d) Écrivez une fonction Python majorite(a, b, c) en une seule instruction return, d'abord avec and et or, puis avec une somme.
e) Le jury compte maintenant cinq juges, et M s'allume à partir de trois acceptations. Combien la table de vérité a-t-elle de lignes, et combien allument la lampe ? Combien de termes ET à trois entrées l'expression analogue contient-elle ?
Voir la correction
Réponses
a)4 lignes sur 8
b)3 ET et 2 OU : 5 portes
c)1 puis 0
d)a + b + c >= 2
e)32 lignes, 16 allumées, 10 termes
a)
La lampe s'allume pour 011, 101, 110 et 111, c'est-à-dire quand deux ou trois boutons valent 1 : 4 lignes sur 8. Elle reste éteinte pour 000, 001, 010 et 100.
b)
« Au moins deux juges acceptent » signifie qu'il existe une PAIRE de juges qui acceptent tous les deux : la paire a et b, ou la paire a et c, ou la paire b et c. Chaque paire se teste par un ET, et l'existence d'une paire par un OU. Il faut 3 portes ET et 2 portes OU, car un OU à trois entrées se réalise avec deux OU à deux entrées : 5 portes au total.
c)
Pour 101 : a ET b vaut 0, a ET c vaut 1, b ET c vaut 0 ; le OU vaut 1, la lampe s'allume, et deux juges ont bien accepté. Pour 001 : les trois ET valent 0, donc M vaut 0, et un seul juge a accepté.
d)
return (a and b) or (a and c) or (b and c), ou, les boutons valant 0 ou 1, return a + b + c >= 2. La seconde écriture traduit directement l'énoncé et se généralise à n juges ; la première traduit le circuit.
e)
Avec cinq entrées, la table a 25=32 lignes. La lampe s'allume pour 3, 4 ou 5 acceptations : (35)+(45)+(55)=10+5+1=16 lignes, exactement la moitié, par symétrie. L'expression analogue teste chaque TRIO de juges : il y en a (35)=10, donc 10 termes ET à trois entrées. Le circuit grossit vite, alors que la version par somme, a + b + c + d + e >= 3, reste courte : un additionneur et un comparateur remplacent l'énumération.
Exercice 15 : Problème : multiplier par décalages
Décaler un nombre binaire d'un rang vers la gauche, en ajoutant un 0 à droite, le multiplie par 2 ; le décaler vers la droite le divise par 2 en jetant le dernier bit. En Python, ce sont les opérateurs << et >>. Les processeurs multiplient en combinant décalages et additions, ce qui est bien plus rapide que des additions répétées. On travaille sur des octets. Le schéma ci-dessous illustre les deux décalages sur l'exemple de 6.
a) Que valent 13 << 1, 13 << 3 et 104 >> 2 ? Écrivez 13 et 13 << 3 en binaire sur 8 bits.
b) On calcule 13 × 11 en écrivant 11 en binaire. Détaillez les décalages et les additions nécessaires, et vérifiez le résultat.
c) Le résultat de 13 × 11 tient-il sur un octet non signé ? Et celui de 13 × 25 ? Que contient l'octet dans ce second cas ?
d) Pour calculer 13 × 200, combien d'additions faut-il avec des additions répétées ? Et avec la méthode par décalages ?
e) −20 s'écrit 11101100 en complément à deux. Que donne un décalage à droite qui ajoute un 0 à gauche ? Et un décalage qui recopie le bit de signe ? Lequel divise correctement par 2 ?
Voir la correction
Réponses
a)26, 104, 26
b)104+26+13=143
c)143 tient ; 325 devient 69
d)200 additions contre 3 termes
e)118 faux, −10 juste : décalage arithmétique
a)
13 s'écrit 00001101. 13 << 1 vaut 26 ; 13 << 3 vaut 13×23=104, soit 01101000 : les trois bits 1 ont glissé de trois rangs vers la gauche. 104 >> 2 vaut 4104=26.
b)
11=10112=8+2+1, donc 13×11=13×8+13×2+13×1. On décale 13 de 3 rangs, 104, puis de 1 rang, 26, et on garde 13 : trois additions de termes, un par bit 1 de 11. 104+26+13=143, et l'on vérifie 13×11=143.
c)
Un octet non signé va jusqu'à 255 : 143 tient. 13×25=325 ne tient pas : l'octet ne garde que les 8 bits de poids faible, soit 325−256=69. Le produit est faux sans aucun message, exactement comme le débordement de l'exercice 1.
d)
Avec des additions répétées, il faut ajouter 13 deux cents fois : 200 additions. Avec les décalages, 200=110010002=128+64+8 contient trois bits 1 : trois termes à additionner, obtenus par des décalages de 7, 6 et 3 rangs. Le nombre d'opérations dépend du nombre de BITS du multiplicateur, au plus 8 sur un octet, et non de sa valeur.
e)
Avec un 0 ajouté à gauche : 01110110, qui vaut 118. Le nombre est devenu positif : c'est faux. En recopiant le bit de signe : 11110110, qui vaut 246−256=−10, bien la moitié de −20. Le décalage qui recopie le bit de signe, appelé décalage ARITHMÉTIQUE, est le seul correct pour les entiers signés ; Python applique d'ailleurs cette règle avec >>, puisque -20 >> 1 vaut -10.
Partie D : capteurs, IHM et systèmes libres (/20)
Exercice 16 : Capteurs, actionneurs et un niveau à bulle sur carte micro:bit
Une carte micro:bit porte deux boutons A et B, un accéléromètre, une matrice de 25 DEL, un haut-parleur et un capteur de température. On la programme pour en faire un niveau à bulle. L'instruction accelerometer.get_x() renvoie l'inclinaison de la carte selon l'axe gauche-droite, en milli-g : 0 à plat, une valeur positive quand la carte penche vers la droite, négative vers la gauche.
Cahier des charges : si la carte est à plat à moins de 50 milli-g près, l'écran affiche une coche ; sinon il affiche une flèche vers le côté qui penche. Un appui sur le bouton A prend la position actuelle comme nouvelle référence d'horizontale. Un élève a écrit le programme suivant. La carte est représentée ci-dessous, avant le programme.
from microbit import *
decalage = 0
while True:
if button_a.was_pressed():
decalage = accelerometer.get_x()
x = accelerometer.get_x() - decalage
if x < 50:
display.show(Image.YES) # une coche
elif x > 0:
display.show(Image.ARROW_E) # fleche vers la droite
else:
display.show(Image.ARROW_W) # fleche vers la gauche
sleep(100) # pause de 100 ms
a) Pour chacun des composants suivants, dites s'il s'agit d'un capteur ou d'un actionneur, et quelle grandeur il mesure ou commande : bouton A, accéléromètre, matrice de 25 DEL, haut-parleur, capteur de température.
b) Quels capteurs et quels actionneurs ce programme utilise-t-il ? En négligeant la durée des calculs, combien de fois par seconde lit-il l'accéléromètre ? Pourquoi la boucle while True, qui ne s'arrête jamais, n'est-elle pas ici une erreur ?
c) On n'a pas touché au bouton A, donc decalage vaut 0. Qu'affiche l'écran quand get_x() renvoie successivement 20, 300 et −400 ?
d) Montrez que le programme ne respecte pas le cahier des charges. Quelle branche n'est jamais exécutée ? Corrigez la condition du if.
e) Avec le programme corrigé, la carte est posée sur une table légèrement penchée : au repos, get_x() renvoie 120. On appuie sur A. Que vaut decalage ? Qu'affiche ensuite l'écran quand get_x() renvoie 150, puis 200 ?
Voir la correction
Réponses
a)Capteurs : bouton A, accéléromètre, capteur de température ; actionneurs : matrice de DEL, haut-parleur
b)Deux capteurs (bouton A, accéléromètre), un actionneur (écran) ; 10 lectures par seconde ; un système embarqué tourne sans fin
c)Coche, flèche droite, puis coche à tort pour -400
d)Le else n'est jamais exécuté ; condition corrigée : abs(x) < 50
e)decalage vaut 120 ; coche pour 150 (x=30), flèche droite pour 200 (x=80)
a)
Un CAPTEUR transforme une grandeur physique en donnée que le programme peut lire ; un ACTIONNEUR transforme une donnée du programme en action physique. Le bouton A est un capteur : il détecte un appui, grandeur tout ou rien. L'accéléromètre est un capteur : il mesure l'accélération, donc ici l'inclinaison de la carte par rapport à la verticale. Le capteur de température mesure une température. La matrice de 25 DEL est un actionneur : elle commande de la lumière, allumée ou non, DEL par DEL. Le haut-parleur est un actionneur : il produit un son. Le critère ne dépend pas de l'objet mais du SENS de l'information : vers le programme, c'est une entrée ; depuis le programme, c'est une sortie.
b)
Le programme lit deux capteurs, le bouton A et l'accéléromètre, et commande un seul actionneur, l'écran de DEL ; il n'utilise ni le haut-parleur, ni le bouton B, ni le capteur de température. Chaque tour se termine par sleep(100), une pause de 100 ms : en négligeant les calculs, la carte fait 1001000=10 tours, donc 10 lectures par seconde, ce qui suffit à suivre une main. La boucle while True est la forme normale d'un programme EMBARQUÉ : lire les capteurs, décider, commander les actionneurs, recommencer, tant que la carte est alimentée. On n'y cherche pas de variant, puisqu'on ne veut justement pas qu'elle se termine ; le variant sert à prouver la terminaison d'une boucle qui DOIT finir.
c)
Avec 20 : 20<50 est vrai, l'écran affiche la coche, ce qui est correct. Avec 300 : 300<50 est faux, puis 300>0 est vrai, l'écran affiche la flèche vers la droite, correct aussi. Avec −400 : −400<50 est VRAI, et l'écran affiche la coche, alors que la carte penche nettement vers la gauche. Le programme compare x à 50 comme si l'écart à l'horizontale était toujours positif.
d)
Le cahier des charges demande une flèche vers la gauche quand la carte penche à gauche au-delà de 50 milli-g. Or pour atteindre le else, il faudrait à la fois x≥50, pour sortir du if, et x≤0, pour sortir du elif : c'est impossible. La branche else, qui affiche la flèche vers la gauche, n'est JAMAIS exécutée, et toute inclinaison à gauche affiche une coche. « À plat à 50 près » veut dire que l'ÉCART à zéro est inférieur à 50, dans un sens comme dans l'autre : la condition correcte est abs(x) < 50, c'est-à-dire −50<x<50. Avec elle, −400 passe au elif, où −400>0 est faux, et l'écran affiche enfin la flèche vers la gauche. Un seuil sur une grandeur qui a un signe se teste presque toujours en valeur absolue.
e)
Au moment de l'appui, decalage prend la valeur lue, 120 : c'est l'ÉTALONNAGE, qui retient le zéro de la table. Ensuite, le programme ne compare plus la lecture brute mais l'écart à cette référence. Pour 150 : x=150−120=30, et ∣30∣<50, l'écran affiche la coche : la carte est à plat par rapport à la table. Pour 200 : x=200−120=80, ∣80∣≥50 et 80>0, l'écran affiche la flèche vers la droite. Sans étalonnage, 150 aurait donné une flèche, alors que la carte n'a presque pas bougé : une valeur de capteur n'a de sens que par rapport à son ZÉRO.
Le schéma de la solution résume l'IHM : des capteurs en entrée, un programme qui tourne sans fin, un actionneur en sortie, et un cahier des charges contre lequel on teste chaque branche.
Exercice 17 : Systèmes d'exploitation libres et propriétaires
Un lycée renouvelle les 30 postes d'une salle. Il hésite entre un système propriétaire, dont la licence coûte 150 dollars par poste, payée une seule fois, et une distribution GNU/Linux libre, téléchargeable sans frais, pour laquelle un prestataire propose un contrat d'assistance de 800 dollars par an pour toute la salle.
On rappelle qu'un logiciel est LIBRE quand sa licence garantit à chacun quatre libertés : l'utiliser pour tout usage, étudier son fonctionnement et l'adapter, en redistribuer des copies, et en distribuer des versions modifiées.
a) Combien de libertés définissent un logiciel libre ? Lesquelles exigent l'accès au code source, et pourquoi ?
b) Classez chacun de ces systèmes d'exploitation en libre ou propriétaire : Debian GNU/Linux, Windows, macOS, FreeBSD.
c) Un élève affirme : « libre, ça veut dire gratuit ». Réfutez-le par deux exemples, un logiciel gratuit mais propriétaire, et un logiciel libre mais payant.
d) Calculez le coût des licences propriétaires pour la salle. Au bout de combien d'années complètes le coût cumulé du contrat d'assistance dépasse-t-il celui des licences ? Que conclure sur l'argument du prix ?
e) Un autre élève objecte que publier le code source d'un système le rend moins sûr, puisque les attaquants peuvent le lire. Que lui répondre ? Donnez enfin une raison, propre à l'enseignement de l'informatique, de faire travailler les élèves sur un système libre.
Voir la correction
Réponses
a)Quatre libertés ; étudier et modifier exigent le code source
b)Debian et FreeBSD libres ; Windows et macOS propriétaires
c)Faux : un gratuiciel est gratuit et propriétaire, une distribution Linux sous abonnement est libre et payante
d)4500 dollars de licences ; l'assistance les dépasse à partir de la 6e année ; le prix ne départage pas
e)Un code public s'audite et se corrige par tous ; un système libre se lit, s'étudie et s'installe partout
a)
Quatre libertés : utiliser, étudier, redistribuer, modifier et redistribuer ses modifications. ÉTUDIER le fonctionnement d'un programme et le MODIFIER exigent le code source : un fichier exécutable n'est qu'une suite d'instructions machine, illisible et presque impossible à adapter, alors que le code source est le texte écrit par les programmeurs. C'est pourquoi une licence libre impose de fournir le code source avec le programme. Libre et propriétaire sont donc des mots de DROIT : ils décrivent ce que la licence permet, pas la manière dont le logiciel est fabriqué ni son prix.
b)
Debian GNU/Linux est libre : son noyau Linux et ses outils GNU sont sous licence libre, et tout son code source est publié. FreeBSD est libre aussi, sous une licence BSD. Windows est propriétaire : sa licence autorise à l'utiliser, mais interdit d'en étudier le code, qui n'est pas fourni, de le modifier et de le redistribuer. macOS est propriétaire, pour les mêmes raisons. La question ne se tranche pas au prix ni à la popularité, mais à la lecture de la licence.
c)
Un logiciel peut être GRATUIT et PROPRIÉTAIRE : c'est un gratuiciel, qu'on télécharge sans rien payer mais dont la licence interdit d'étudier le code, de le modifier ou de le redistribuer ; beaucoup de pilotes et d'applications mobiles sont dans ce cas. Un logiciel peut être LIBRE et PAYANT : certaines distributions Linux pour entreprises sont vendues par abonnement, avec l'assistance, alors que leur code reste libre et que l'acheteur garde les quatre libertés. L'affirmation de l'élève confond le PRIX, qui est une question commerciale, et la LICENCE, qui est une question de droits. Le mot anglais free, qui veut dire à la fois libre et gratuit, entretient la confusion.
d)
Les licences coûtent 30×150=4500 dollars, une seule fois. Le contrat d'assistance coûte 800 dollars par an : 800×5=4000 dollars au bout de cinq ans, encore moins que les licences, et 800×6=4800 dollars au bout de six ans, davantage. Le coût cumulé de l'assistance dépasse donc celui des licences à partir de la SIXIÈME année. Sur cinq ans, le choix libre est un peu moins cher ; au-delà, il l'est un peu plus. Le prix ne départage pas vraiment les deux solutions, et ce n'est pas lui qui définit le libre : l'argument sérieux est ailleurs, dans les droits que donne la licence.
e)
La sécurité ne repose pas sur le secret du code. Un code source public peut être relu par tous, chercheurs, entreprises, administrations, et une faille trouvée peut être corrigée et vérifiée par n'importe qui ; un code fermé n'est audité que par son éditeur, et ses failles, que les attaquants trouvent quand même en analysant l'exécutable, restent corrigées à son seul rythme. Le libre n'est pas sans faille, mais il n'est pas moins sûr par principe. Pour l'enseignement, un système libre permet d'aller voir comment il fonctionne, de lire ses sources, de l'installer sur autant de postes qu'on veut et d'en garder la maîtrise : c'est pour cela que le programme de Première demande que les élèves utilisent un système d'exploitation libre.
Il manque quelque chose dans cette série ?Un type d'exercice que ton prof donne, un énoncé qui te bloque, une erreur repérée : dis-le-moi, je lis chaque demande.
L'envoi passe par ton espace gratuit : c'est ce qui me permet de te répondre et de te prévenir quand l'exercice est ajouté. Un courriel suffit, pas de mot de passe. Crée ton espace.
Pas envie de créer un compte ? Écris-moi directement.
Contactez-moi pour une première séance. C'est le chapitre de NSI où les élèves de Première décrochent le plus, parce qu'il ne ressemble à rien de ce qu'ils ont vu avant ; il se rattrape très bien en quelques séances.