capes informatique - diu-eil

27
Capes Informatique Polycopié d’exercices - Système Version prof. Ne pas distribuer.

Upload: others

Post on 20-Jun-2022

16 views

Category:

Documents


0 download

TRANSCRIPT

Table des matières
1 Linux ligne de commande, Arborescence 4 1.1 Arborescence de fichiers : chemins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 Droits posix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Linux ligne de commande, Arborescence 7 2.1 Le manuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 Gestion de la mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3 Linux : autres commandes utiles 14 3.1 Commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.1 Afficher du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.1.2 Commandes pour fouiller le texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.1.3 Éditer/modifier un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.1.4 Chercher des fichiers dans un répertoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.1.5 Archiver/compresser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4 Ordonnancement et contrainte 17 4.1 Section critique et deadlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.2 Ordonnancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.1 À priorités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5 Algorithmes d’ordonnancement statique, tests d’ordonnançabilité 22 5.1 Un bout de cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 5.2 Ordonnancement à priorité fixe avec affection de priorité RM . . . . . . . . . . . . . . . . . . . . . 22 5.3 Earliest deadline first (EDF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6 Programmation d’un générateur de questionnaire 26 6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 6.2 Lecture de la liste des questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 6.3 Sécurisation des solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 6.4 Comparaison des résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Capes informatique Lyon1 (NSI) - Système https:/// 2/27
Ce cahier Ce cahier d’exercices a été réalisé pour l’enseignement Système du Capes Informatique, proposé par l’université Lyon1.
Il peut être librement distribué (License CC-BY-SA 4.0).
Intervenants Les personnes suivantes ont été impliquées dans l’écriture de ces exercices et des supports associés, et l’enseignement correspondant :
— 2018/2019 : Laure Gonnord, Nicolas Louvet, Fabien Rico.
http://master-info.univ-lyon1.fr/CAPES/
1.1 Arborescence de fichiers : chemins
FIGURE 1.1 – Arborescence et chemin sous Linux
La figure 1.1 résume les concepts à retenir.
— Chemin absolu d’un fichier : c’est le nom "complet" du fichier, donné par son chemin d’accès depuis la racine. Exemple, sous Unix : /rep/fic1.c.
— Répertoire de travail (répertoire courant) : répertoire sur lequel un utilisateur est positionné à un mo- ment donné. Ce répertoire est nommé “.”
— Chemin relatif d’un fichier : référence d’un fichier à partir du répertoire de travail.
— Répertoire personnel (sous Unix) : répertoire sur lequel est positionné un utilisateur suite à son authenti- fication. Ce répertoire est nommé “˜” (tilde). On parle aussi de “home utilisateur” ou de “racine person- nelle”. Sous Unix c’est souvent un sous-répertoire de /home.
EXERCICE #1 Ï Chemins (TD) La figure 1.2 représente l’arborescence présente dans un ordinateur sous Unix :
(Les fichiers sont en grisé, les autres noeuds sont des répertoires). Supposons que vous êtes l’utilisateur alan. Donner des commandes sucessives pour :
Q.1.1) - Vous placer dans votre répertoire d’accueil
Q.1.2) - Y créer un répertoire nommé TP.
Q.1.3) - Faire une copie du fichier hosts.conf dans le répertoire TP. Puis la renommer myhosts.conf.
Solution. On peut par exemple :
cd mkdir TP cp /etc/hosts.conf TP/ mv TP/hosts.conf TP/myhosts.conf
Capes informatique Lyon1 (NSI) - Système https:/// 4/27
/
FIGURE 1.3 – Arborescence à réaliser
EXERCICE #2 Ï Navigation relative et absolue - TD ou TP Donner les commandes ou réaliser les manipulations suivantes :
Q.2.1) - Réaliser la hiérarchie de répertoires et de fichiers décrite dans la figure 1.3
Si ce n’est pas le cas, effectuer les modifications nécessaires (à l’aide des commandes mv et mkdir?)
Q.2.2) - Se placer dans le répertoire TP2. Pour copier un fichier vers le répertoire TP1, vous pouvez au choix (réaliser chacune de ces manipulations) :
— utiliser le chemin relatif (du répertoire TP1 par rapport à où je suis, ie TP2) : cp nomfichier ../TP1/
— utiliser le chemin absolu du répertoire TP1 : cp nomfichier /home/moi/Systeme/TP1/
— utiliser le raccourci de votre home : cp nomfichier ˜/Systeme/TP1/
Q.2.3) - Se placer à la racine de votre répertoire personnel. Sans se déplacer, et en s’inspirant des manipula- tions précédentes :
— copier un des fichiers du répertoire /etc/dpkg dans le répertoire TP2.
— lister le contenu du répertoire TP1.
— déplacer les fichiers qui n’ont rien à faire de TP1 vers /tmp.
1.2 Droits posix
EXERCICE #3 Ï Droits sous unix Sur le système considéré, il y a 4 utilisateurs :
— fontaine qui fait partie du groupe prof et user ;
— elise qui fait partie des groupes etu et user ;
— hippolyte qui fait partie du groupe prof.
— root qui est l’administrateur et fait parti du groupe root
Q.3.1) - Représentez les possibilités d’accès des 4 utilisateurs aux fichiersvisioneurPDF,sujet.pdf,correction .pdf et notes.ods.
drwxr-x--x 27 root user /bin/ -rwsr-xr-x 1 root etu /bin/visioneurPDF drwxr-xr-x 80 root user /home/ drwxr-x--x 10 fontaine prof /home/fontaine/ drwx--x--- 4 fontaine prof /home/fontaine/prive/ -rw-r-x--- 1 fontaine prof /home/fontaine/sujet.pdf -rw-r--r-- 1 hippolyte prof /home/fontaine/prive/correction.pdf -rw-rw---- 1 fontaine prof /home/fontaine/prive/notes.ods
Attention, pour les fichiers vous devez tenir compte des droits des répertoires et sous répertoires.
Capes informatique Lyon1 (NSI) - Système https:/// 5/27
fontaine r-x rw- r-- rw- elise r-x --- --- ---
hyppolyte r-x r-x rw- rw- root rwx rwx rw- rw-
Il faut noter plusieurs choses :
— root a forcement le droit read et write. De plus, il a le droit d’exécution sur tous les fichiers exécu- tables (c’est à dire qu’il a le droit d’exécution si l’un des groupes a le droit d’exécution).
— Pour accéder à un fichier, un utilisateur doit avoir le droit d’accéder à tous les répertoires du chemin qui permet d’allez à ce fichier. Cela signifie avoir le droit d’exécution sur les répertoires. Donc par exemple Élise ne peut pas lire le fichier correction.pdf car ce dernier se trouve dans le répertoire /home/fontaine/prive/ qui ne lui est pas accessible.
— hyppolyte a accès aux fichiers correction.pdf et notes.ods cat il a accès au répertoire /home/ fontaine/prive/. Mais, il ne peut ni faire de ls (qui demande le droit de lecture du répertoire), ni changer le nom ou effacer le fichier (qui demande le droit d’écrire dans le répertoire).
— Comme le setuid bit du fichier visioneurPDF est actif (le « s » dans la colonne du propriétaire), cela signifie qu’un utilisateur qui exécute ce fichier le fait comme s’il était le propriétaire (donc root ). Cela signifie que les droit utilisé seront ceux de root et que par exemple, cette visionneusePDF pourra lire les fichiers correction.pdf et sujet.pdf même si c’est elise qui l’utilise.
Capes informatique Lyon1 (NSI) - Système https:/// 6/27
2.1 Le manuel
man (pour manual) est une commande disponible sur les systèmes d’exploitation de type Unix. Elle permet d’obtenir de l’aide sur la plupart des programmes disponibles sur le système, mais aussi sur les fonctions du langage C, et de certaines bibliothèques. Pour l’invoquer, la commande est :
man nom_de_la_commande
Par exemple,
man du
permet d’obtenir le manuel de la commande du. Une fois que la page manuel est affichée, les touches de déplacement permettent de naviquer dedans. Pour
quitter (revenir à la ligne de commande), il suffit de taper Q . Il y a beaucoup de subtilités que l’on passe ici sous silence, mais vous pouvez maintenant faire man man pour en apprendre plus sur man !
EXERCICE #1 Ï Man
Voici ci-dessous un extrait de la page de manuel de la commande ls.
NAME ls -list directory contents
SYNOPSIS ls [OPTION]... [FILE]...
DESCRIPTION List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
Mandatory arguments to long options are mandatory for short options too.
-c with -lt: sort by, and show, ctime (time of last modification of file status
information); with -l: show ctime and sort by name; otherwise: sort by ctime,
newest first
-h, --human-readable with -l and/or -s, print human readable sizes (e.g., 1K 234M 2G)
--si likewise, but use powers of 1000 not 1024
-l use a long listing format
-r, --reverse reverse order while sorting
-R, --recursive list subdirectories recursively
Capes informatique Lyon1 (NSI) - Système https:/// 7/27
-s, --size print the allocated size of each file, in blocks
-S sort by file size, largest first
-t sort by modification time, newest first
-u with -lt: sort by, and show, access time; with -l: show access time and sort
by name; otherwise: sort by access time, newest first
Q.1.1) - Quelles options de ls utiliser pour lister le contenu du répertoire courant dans l’ordre inverse de l’ordre alphabétique?
Solution. Par défaut, ls range par ordre alphabétique, donc -r suffit à avoir l’ordre inverse de l’ordre alphabétique.
Q.1.2) - Quelles options utiliser pour lister le contenu du répertoire par ordre de date de dernière modifica- tion, avec les fichiers modifiés le plus récemment à la fin?
Solution. -t permet de lister par ordre de modification, avec les modifications les plus récentes au début ; on ajoute donc -r pour renversé : en combinant, -rt
Q.1.3) - Quelles options pour ranger les fichiers par ordre de taille décroissante?
Solution. Juste -S.
2.2 Gestion de la mémoire
EXERCICE #2 Ï Version compliquée De façon similaire à la mémoire des processeurs INTEL PENTIUM, la table 2.1 représente une mémoire paginée :
— Chaque adresse est codée sur 9 bits.
— Une adresse de 9 bits correspond à 1 mot mémoire de 32 bits
— Chaque page contient 8 mots mémoires (1 ligne du tableau 2.1).
— Il y a 2 niveaux d’indirection (table de répertoires de page et table de pages).
— Une adresse logique est composée de 9 bits, de gauche à droite : 3 pour le répertoire de pages, 3 pour la page et 3 pour le décalage dans la page.
— Dans les tables de pages, pour chaque page, 7 bits sont utilisés pour détailler les propriétés de la page :
1. pour signaler l’existence de la page
2. pour signaler la présence de la page en mémoire
3. pour signaler le droit d’écriture
4. pour signaler le droit d’exécution
5. pour signaler le « copy-on-write »
6. pour le bit d’accès
7. pour le dirty bit
— Dans les tables de répertoire de pages, seul le premier bit d’information est utilisé (celui de l’existence du répertoire correspondant).
On considère 2 processus, la table des répertoires de pages du processus 1 est à l’adresse 0o01 et celle du processus 2 à l’adresse 0o17.
Q.2.1) - Quel est la capacité d’adressage ?
Capes informatique Lyon1 (NSI) - Système https:/// 8/27
Solution. — 1 page = 8*32 bits = 32octets
— 1 table de page = 8 pages (car 3 bits de décalage) = 256o
— la table de répertoire de pages = 8 tables de pages = 2048o = 2kio
La taille de l’espace d’adressage est 2kio
Q.2.2) - Pour chacun des deux processus, que contient la case d’adresse 0b101111001.
Solution. — Pour le proc 1, c’est l’adresse 23.1 et cela contient 42.
— Pour le proc 2, c’est l’adresse 10.1 et cela contient 17.
explication L’adresse en octale (3 bits donnent un chiffre de 0 à 7) est o571, cela signifie qu’on recherche « la case numéro 1 de la page numéro 7 du répertoire de page numéro 5 du processus ». Pour le processus 1, on lit :
— 01.5 (page physique 01, case 5) et on trouve 1100000.33 ce qui signifie que le bit d’existence (1er bit) est 1 et le répertoire de page est à l’adresse physique 33.
— 33.7 (page physique 33, case 7) = 1110011.23 (existence, présence, écriture, bit accès et ditry bit sont à 1), la page est à l’adresse physique 23.
— 23.1 = 42.
Avec un raisonnement identique, pour le second processus nous obtenons : 17.5 = 1100000.13 7→ 13.7 = 1110000.20 7→ 20.1 = 17 (existe, présent et modifiable).
Q.2.3) - Que se passe-t-il si le processus 1 essaye de lire la valeur de la case 0b101101101
Solution. — 0b101101101 = 0o555.
— 01.5 = 1100000.33 7→ 33.5 = 0001111.31 n’existe pas (1er bit à 0).
Donc, la table de page n’existe pas, c’est un SEGFAULT.
Q.2.4) - Même question si le processus 2 tente d’exécuter le code de l’adresse 0b000001011
Solution. — 0b000001011 = 0o013
— 17.0 = 1100000.16 7→ 16.1 = 1101000.06 (existe present, non modifiable et executable) 7→ 06.3 = 159
L’opération codée par le code 159 est exécuté. De plus, le bit d’accès correspondant est mis à 1 donc la case 16.1 devient 1101010.06
Q.2.5) - Que remarque-t-on pour l’adresse 0b101010000 du processus 1 et l’adresse 0b000101000 du proces- sus 2 ? Dans quelle cas cela peut-il arriver ?
Solution. — Processus 1 : 0b101010000 = 0o520 et 01.5 = 1100000.33 7→ 33.2 = 1110010.14 7→ 14.0 = 197
— Processus 2 : 0b000101000 = 0o050 et 17.0 = 1100000.16 7→ 16.5 = 1110000.14 7→ 14.0 = 197
C’est la même adresse physique, c’est donc une page partagée et tout ce qui y sera écrit par l’un des processus pourra être lu par l’autre.
C’est un partage d’une page modifiable et non exécutable (pas de code donc). C’est donc une zone d’échange entre processus. Ce genre de partage peut venir d’une demande explicite (shm_...) ou découler de l’implémentation d’un canal de communication (un pipe par exemple).
Q.2.6) - Mêmes questions pour l’adresse 0b000011111 des 2 processus. Que se passe-t’il si l’un des processus écrit à cette adresse.
Solution. — Processus 1 : 0b000011111 = 0o037 et 01.0 = 1100000.11 7→ 11.3 = 1110110.37 7→ 37.7 = 0
— Processus 2 : 0b000011111 = 0o037 et 17.0 = 1100000.16 7→ 16.3 = 1110110.37 7→ 37.7 = 0
C’est encore une page partagée. La différence avec la question précédente c’est que :
Capes informatique Lyon1 (NSI) - Système https:/// 9/27
— C’est la même adresse logique,
— C’est une page avec copy-on-write.
La page n’est pas réellement partagée. Ce sont 2 pages théoriquement différentes qui pour le mo- ment contiennent les mêmes valeurs. Dès qu’un processus écrit sur l’une d’entre elles, elle est co- piée en mémoire.
Par exemple, cela provient d’un fork, la mémoire n’est pas réellement copiée mais partagée de cette façon et ensuite, lorsque c’est nécessaire, il y a réellement une copie.
Cela peut aussi venir d’un autre système utilisant le copy-on-write. Par exemple, pour gagner du temps lorsque beaucoup de pages remplies de 0 sont demandées (certains systèmes le font sys- tématiquement par sécurité), c’est une seule page spéciale qui est fournie et ce n’est que lors de l’utilisation que la page est réellement allouée.
Capes informatique Lyon1 (NSI) - Système https:/// 10/27
Informatique, Formation des enseignants Capes informatique Exercices #2 – 2019
EXERCICE #3 Ï Version simple De façon similaire à la mémoire des processeurs, la table 2.1 représente une mémoire paginée :
— Chaque adresse est codée sur 6 bits (2 chiffres entre 0 et 8).
— Une adresse de 6 bits correspond à 4 octets (4 caractères).
— Chaque page contient 8 mots mémoires (1 ligne du tableau 2.1).
— Il y a une indirection. À partir de l’adresse demander on calcul l’adresse réelle en regardant la position de la page dans la table des pages qui dépend du processus. Les 2 processus représentés n’ont donc pas les même données associées au même adresses.
— Une adresse logique est composée de 6 bits, de gauche à droite : 3 pour la page et 3 pour le décalage dans la page.
— Dans les tables de pages, pour chaque page, 3 bits sont utilisés pour détailler les propriétés de la page :
1. pour signaler l’existence de la page
2. pour signaler le droit d’écriture
3. pour signaler le droit d’exécution
On considère 2 processus, la table des répertoires de pages du processus 1 est à l’adresse 0o00 et celle du processus 2 à l’adresse 0o01.
Q.3.1) - Lisez les 28 octets de la chaîne de caracrète à l’adresse bx001100 du processus 1.
Solution. bx001100 = ox14. On doit voir les octet présent à la ligne pointée par la page 1 (c’est à dire ox16) à partir de l’octet numéro 4 (le 5eme). C’est « Bigbrother is wh » Mais on arrive à la fin de la page après 4 octets, l’adresse de début de la page suivante est ox20 dont on lit les 3 premiers octets : « atching you ».
Cette page et la suivante sont des données présente en mémoire mais non modifiable (donc des constantes).
Q.3.2) - Lisez les deux octets de la chaîne de caracrète à l’adresse bx101011 du processus 1.
Q.3.3) - Lisez les deux octets de la chaîne de caracrète à l’adresse bx000011 du processus 2.
Q.3.4) - Que remarquez-vous?
Solution. Pour le proc 1 c’est l’adresse page 5 (110.17) case 03 on lit "ze" (message subliminal). Pour le proc 2 c’est l’adresse de la page 0 case 03. On tombe sur la même page et donc le même méssage. C’est une page partagée en lecture écriture
Capes informatique Lyon1 (NSI) - Système https:/// 11/27
D éc
al ag
e d
an s
la p
ag e
m em
0 1
2 3
4 5
6 7
Capes informatique Lyon1 (NSI) - Système https:/// 12/27
Informatique, Formation des enseignants Capes informatique Exercices #2 – 2019
00 01 02 03 04 05 06 07 00 000.00 100.16 100.05 101.03 00.03 110.17 000.14 010.03 01 110.17 001.17 001.00 110.02 101.14 000.12 001.13 001.00 02 qYRd ZT7z lBe2 1Shn cGXa 7w4D l63x ZjvX 03 Itd nzuZ Dgjc 4DBr EGjc 4X23 kISa aGW4 04 9Xah Hc8 Mlyl B1i hAXR TrVX ljRK 30wT 05 atch ing you FV7H RPn1 9fji GoE2 fu i 06 s120 4xvs Vcv hlmZ MODe KjdG ElD1 mNGi 07 D5I9 1v9N P lH ckgY PU73 rgYr fyxr 3RnN 10 c86H oA BZJL ZRzM G6be CgX5 lb 8 VZd1 11 Nuhd Y9Xw PsH1 agP LEPJ 4pXX M8li 9jSI 12 i4dr UEjk kT9w 9nxB iGBj KY4W fLUh 7JTs 13 rbZI zdDg UxpR 6gqq oMKl Kt9 rCy9 7xXm 14 Ulym yg3f UTBC Setz bLvq Lvtf oJeR ghWC 15 LnDf vy5T 8GAj kPUg cdki LVyr xF50 b0Jz 16 Pp2u KFyA Izer DwKE Bigb roth er i s wh 17 CIs5 M5TV zwx6 zes iver YMv1 MK4E iT9i
FIGURE 2.1 – Mémoire simplifiée
Contenu
Cette section vous propose des exercices à réaliser avec vos élèves de classe de Terminale. Elle ne sera pas réalisée en séance.
3.1 Commandes
Utilisation des commandes cat, less, more.
EXERCICE #1 Ï cat, etc. Pour tester ces commandes on va manipuler les fichiers qui se trouvent dans /etc/dictionaries-common. Placez-vous dans ce répertoire.
1. Tapez : ls -l cat words cat words words Que fait la commande cat? Peut-on visualiser de gros fichiers?
2. Utilisation de less : less words puis
— tapez sur la touche "espace" — tapez sur la touche "espace" — tapez sur la touche "espace" — tapez sur la touche "b" — tapez sur la touche "b" — tapez sur la touche "flèche du haut" — tapez /foo puis la touche entrée ou saut de ligne) — tapez /z puis (la touche entrée ou saut de ligne) — tapez sur la touche "flèche du haut" — tapez sur la touche "h" (regardez 30 secondes et continuez) — tapez sur la touche "q" (pour sortir de help) — tapez sur la touche "q" (pour sortir de less)
Que fait less quand on tape "/quelquechose"? 3. Comparez less et more.
3.1.2 Commandes pour fouiller le texte
EXERCICE #2 Ï Utilisation simple de wc et grep Toujours dans le répertoire /etc/dictionaries-common :
1. Que fait la commande wc <nomfichier>, et ses options -l et -w? 2. Que fait la commande grep :
grep house words grep maison words
Capes informatique Lyon1 (NSI) - Système https:/// 14/27
3.1.3 Éditer/modifier un fichier
Il existe des commandes pour modifier un fichier à la ligne de commmande, mais ici nous allons faire plus simple.
EXERCICE #3 Ï Fichier Créer un fichier texte dans le répertoire courant en utilisant un éditeur de texte :
gedit monjolifichiertexte.txt &
(on verra ce que signifie & plus tard) 1. Écrire vos noms et prénoms, sauver, et quitter l’éditeur. 2. Vérifier à l’aide de less que ce fichier contient bien ce que vous y avez écrit. 3. Quelle taille a ce fichier ?
EXERCICE #4 Ï Commande diff À l’aide d’un éditeur de texte, dans le répertoire /Systeme/TP2
1. Créez un fichier1.txt avec 3 lignes différentes. 2. Créez un fichier2.txt qui est égal au fichier1.txt avec une ligne en moins. 3. Créez un fichier3.txt qui est égal au fichier1.txt avec en plus une ligne avec une phrase. 4. Créez un fichier4.txt qui est égal au fichier1.txt sauf que la deuxième ligne contient autre chose. 5. Faites diff entre les différents fichiers. 6. (Bonus pour les personnes en avance). Jouer avec la commande patch pour reconstruire le fichier2.txt
à partir du fichier1.txt et de la sortie de diff. On se contentera de retenir que diff n’imprime rien si deux fichiers sont identiques, et sinon donne des
informations sur les différences entre les deux.
3.1.4 Chercher des fichiers dans un répertoire
Un petit exo pour découvrir la puissance de la commande find :
EXERCICE #5 Ï Découverte de find Exécuter :
1. man find 2. puis :
find /etc find /etc -name "*.d" find /etc -name "*.cfg" -ls ls -R /etc
3. Que veut dire l’étoile ici ? 4. À quoi sert l’option -name? 5. Commenter la différence entre ls -R et find. 6. Essayer la commande find /etc -exec wc ’{}’ + puis la commande
find /etc -name "*.cfg" -exec wc ’{}’ + Que fait l’option -exec?
7. Que fait l’option -iname? Noter qu’on parlera des caractères d’échappement plus tard .
3.1.5 Archiver/compresser
EXERCICE #6 Ï Commandes gzip, tar Dans cet exercice, on va commencer par mettre en pratique les connaissances du TP1.
1. À l’intérieur d’un répertoire Systeme/TP2/, créer un répertoire nommé toto contenant deux fichiers texte, titi (contenant le seul mot titi) et tata, (contenant le seul mot tata)
2. Vérifier avec ls et less. 3. Créer une archive du répertoire toto et de son contenu : 1
1. les dièses sont des commentaires, ils ne sont pas à recopier
Capes informatique Lyon1 (NSI) - Système https:/// 15/27
Informatique, Formation des enseignants Capes informatique Exercices #3 – 2019
tar -cvf toto.tar toto # crée l’archive ls -l toto.tar cat toto.tar tar -tvf toto.tar # donne le listing (le contenu)
4. Créer un autre répertoire (Systeme/TP2/testtar, par exemple), y-mettre l’archive et la désarchiver à cet endroit (tar -xf). Supprimer ensuite le répertoire Systeme/TP2/toto.
5. Compresser l’archive tar à l’aide de gzip (option -9 ou -l). Vérifier que l’archive compressée est moins grosse que l’archive initiale.
Remarque : tar peut lui-meme faire appel à gzip (compression/décompression) en ajoutant l’option -z : tar -cvzf toto.tgz toto pour compresser, par exemple.
Capes informatique Lyon1 (NSI) - Système https:/// 16/27
TD 4 Ordonnancement et contrainte
4.1 Section critique et deadlock
EXERCICE #1 Ï Problème d’accès concurrent Deux agences d’une banque veulent mettre à jour le même compte bancaire. Pour cela, l’agence de Nancy effectue :
1. courant = get_account(1867A) 2. nouveau = courant + 1000 3. update_account(1867A, nouveau)
et l’agence de Karlsruhe :
A. aktuelles = get_account(1867A) B. neue = aktuelles -1000 C. update_account(1867A, neue)
1. En supposant que l’agence de Nancy commence en premier, quel sera le montant à l’issue des transac- tions ?
Solution. Ça n’a aucun rapport réel avec qui commence la transaction, puisqu’elles ne sont pas ato- miques (la partie « En supposant ... en premier » de la question est volontairement piégeuse). Des va- riables locales + exécutions parallèles entremêlées donnent des résultats différents, par exemple :
— 1; 2 ; 3 ; A; B ; C ⇒ compte inchangé
— 1; A; 2 ; B; 3 ; C ⇒ compte – 1000
— 1; A; B; 2 ; C; 3 ⇒ compte + 1000
On a une condition de compétition (race condition). → Comment garantir le même montant?
⇒ en forçant l’ordre d’exécution. → Comment forcer l’ordre d’exécution? ⇒ en rendant les opérations atomiques. Cette opération est une section critique. Elle doit s’exécuter en exclusion mutuelle.
Attention! Pour résoudre un problème de mutex, il faut trouver une solution vérifiant les propriétés de sûreté (il n’y a qu’un processus en section critique à un instant donné) et de vivacité (un processus souhaitant entrer en section critique le pourra dans un temps fini). Ces propriétés garantissent qu’il n’y a pas de problèmes d’interblocage ou de famine.
EXERCICE #2 Ï dead-lock (interblocage en français) 1
Toujours dans le cadre bancaire, nous allons utiliser deux nouvelles fonctions :
— bloque(num_compte)
— debloque(num_compte)
la fonction bloque réserve le compte passé en argument. Si ce dernier est déjà réservé, elle bloque le pro- gramme appelant jusqu’à ce que le compte soit libéré par la fonction debloque.
Votre programmeur vous propose d’implémenter le transfert d’argent comme cela :
1. Merci à https://stackoverflow.com/questions/1385843/simple-deadlock-examples
Informatique, Formation des enseignants Capes informatique Exercices #4 – 2019
1 function transfert(from, to, montant): 2 bloque(from) 3 bloque(to) 4 5 cour = get_account(from) 6 cour = cour -montant 7 set_account(from, cour) 8 9 cour = get_account(to)
10 cour = cour + montant 11 set_account(to, cour) 12 13 debloque(to) 14 debloque(from)
Lors des essais, vous constatez que certaines transactions restent irrémédiablement bloquées.
1. Expliquez ce qu’il peut se passer.
2. Donnez une correction.
Solution. Le problème est qu’ici une tâche de transfert réserve 2 ressources et qu’il n’y a aucune sécurité sur l’ordre des réservations.
En effet, on réserve le compte from avant le compte to, mais si 2 tâches de transfert sont lancées au même moment sur les 2 mêmes comptes mais avec un sens différent, l’ordre des réservations est inversé.
Par exemple,
— tâche A : transfert(’1246A’, ’6314B’, 100)
— tâche B : transfert(’6314B’, ’1246A’, 10)
On Ai l’instruction à la ligne i de la tâche A, et on fait de même pour la tâche B. Supposons que l’on ait le sénario suivant :
— A2 bloque le compte ’1246A’
— B2 bloque le compte ’6314B’
— A3 demande l’accès au compte ’6314B’, il ne l’obtient pas et doit attendre que la tâche B le libère
— B3 demande l’accès au compte ’1246A’, il ne l’obtient pas et doit attendre que la tâche A le libère
Les deux tâches attendent que l’autre avance pour pouvoir poursuivre : on est en situation de dead-lock. Une des solutions est de toujours réserver les comptes dans le même ordre :
liste = [from, to] liste.sort() # tri "en place" de liste
bloque(liste[0]) bloque(liste[1]) ...
Ou alors on peut s’apercevoir que l’on n’a pas besoin dans ce cas de réserver les deux comptes en même temps :
1 function transfert(from, to, montant): 2 bloque(from) 3 cour = get_account(from) 4 cour = cour -montant 5 set_account(from, cour) 6 debloque(from) 7 8 bloque(to) 9 cour = get_account(to)
Capes informatique Lyon1 (NSI) - Système https:/// 18/27
4.2 Ordonnancement
4.2.1 À priorités
EXERCICE #3 Ï Préemptif avec priorités Nous utilisons un ordonnancement préemptif avec priorité 2. Nous allons utiliser un jeu de tâches qui mélange des tâches périodiques et des tâches ponctuelles.
Tâche Date(s) d’arrivée(s) Priorité Durée Remarque A 0, 6, 12, 18, 24, 30 ... 10 1 Périodique B 0, 10, 20, 30 ... 8 4 Périodique C 21 9 6 Ponctuelle D 0 1 7 Ponctuelle
1. Faire l’ordonnancement de ces tâches sur 32 unités de temps.
2. Quel est le temps de réponse de chaque tâche ?
Solution. ABD A B A A B C A AB
A 1.1 2.1 3.1 4.1 5.1 6.1 B 1.1 1.2 1.3 1.4 2.1 2.2 2.3 2.4 3.1 3.2 3.3 ! 3.4 4.1 C .1 .2 .3 .4 .5 .6 D .1 .2 .3 .4 .5 .6 .7 _ x cont ↑ . . . . ↑ . . . . ↑ . . . . ↑ . . . . ↑ . . . . ↑ . . . . ↑
0 5 10 15 20 25 30
— A : 1
— B : 12 (le pire est la 3e fois). Une échéance est loupée.
— C : 7
— D : 18
EXERCICE #4 Ï Ordonnancement collaboratif Le système n’interrompt jamais une tâche, il ne reprend la main que si la tâche se termine ou fait une opération bloquante. Supposons le jeu de tâches suivant :
Tâche Date(s) d’arrivée(s) Priorité Durée Remarque A 0 4 5 au bout de 3 unités de calculs, la tâche
laisse la main (yield) elle est immédiate- ment prête
B 1 8 4 au bout de 2 unités de calculs, la tâche fait un read bloquant qui dure au moins 3 UC
C 10 9 3 D 1 5 4
1. Faire l’ordonnancement sur 16 unités de temps.
Solution.
2. Plus la valeur de priorité est importante plus la tâche est prioritaire
Capes informatique Lyon1 (NSI) - Système https:/// 19/27
Informatique, Formation des enseignants Capes informatique Exercices #4 – 2019
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A
B
C
D
— Le système gère des listes de priorités.
— On se place en mode préemptif c’est à dire que lorsqu’une tâche plus prioritaire arrive, le système lui donne immédiatement accès au processeur.
— Pour des tâches de même priorité, le système utilise le Round Robin avec un quantum de 2.
Tâche Date(s) d’arrivée(s) Priorité Durée Remarque A 0 4 5 B 1 4 4 C 3 8 6
1. Faire l’ordonnancement sur 15 unités de temps.
Solution.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
A
B
C
3 4
3 4
5
4
EXERCICE #6 Ï Ordonnancement collaboratif Le système n’interrompt jamais une tâche, il ne reprend la main que si la tâche se termine ou fait une opération bloquante. Supposons le jeu de tâches suivant :
Tâche Date(s) d’arrivée(s) Priorité Durée Remarque A 0 6 5 au bout de 3 unités de calculs, la tâche
laisse la main (yield) elle est immédiate- ment prête
B 1 8 4 au bout de 2 unités de calculs, la tâche fait un read bloquant qui dure au moins 3 UC
C 10 9 3 D 1 5 4
1. Faire l’ordonnancement sur 16 unités de temps.
Capes informatique Lyon1 (NSI) - Système https:/// 20/27
Solution.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A
B
C
D
d’ordonnançabilité
Contexte Dans le cadre des systèmes temps-réel, il est important de produire des ordonnancements sta- tiques, sur une période d’exécution. Les tâches se reproduiront ensuite de manière identique dans les périodes suivantes. Les algorithmes qui suivent (RM, EDF) suivent le même schéma de choix, il s’agira de les exécuter symboliquement sur la période en question. Pour la culture, ces algorithmes viennent aussi avec des CN, CS ou CNS d’ordonnançabilité, qui permettent de conclure quelquefois dans faire les calculs.
Ces exercices sont inspirés d’une feuille de TD de F. Singhoff, univ Brest, avec l’aimable autorisation de l’au- teur. Ils ne seront pas effectués dans la semaine du bloc3, mais on vous les fournit gracieusement, pour aller plus loin.
5.1 Un bout de cours
Les deux algorithmes RM et EDF sont des algorithmes qui traitent le cas de tâches périodiques avec cha- cune une période (Ti ou Pi ), avec une échéance souvent égale à la période, et elles peuvent être réveillées au début de leur période.
L’algorithme d’ordonnancement est le suivant :
runnable = [false;...;false] ; cpt = [0;...;0]
if cpt(i) = 0 then if runnable(i) then Stop(SchedulingError)
else runnable(i) <- true; cpt(i) <- T (i)
cpt(i) <- cpt(i) - 1
(* election *) let l = {i/runnable(i)} in let next = select(l) in if next <> current then current <- next; Preemption(next)
Ensuite c’est la fonction select qui change : pour RM on choisit la tâche de période minimale ; pour EDF on choisit la tâche dont la deadline est la plus proche.
5.2 Ordonnancement à priorité fixe avec affection de priorité RM
Fonctionnement
Le calcul de priorité consiste à associer à chaque tâche une priorité fixe inversement proportionnelle à sa périodicité (Rate Monotonic).
La phase d’élection consiste à élire la tâche de plus forte priorité (ordonnancement à priorité fixe).
Tests d’ordonnançabilité
Informatique, Formation des enseignants Capes informatique Exercices #5 – 2019
1. Test sur le taux d’utilisation avec ∀i : Di = Pi : ∑n
i=1 Ci Pi
≤ n(2(1/n) − 1) condition suffisante mais non nécessaire.
2. Utilisation de la période d’étude : ordonnancement à comportement cyclique (propriété du modèle pé- riodique). Période d’étude = [0,PPC M(Pi )] (si ∀i : Si = 0).
3. Test sur le temps de réponse de la tâche i (noté ri ), avec Di = Pi :
ri =Ci + ∑
j∈hp(i )
— wn+1 i =Ci +∑
— Init : avec w0 i =Ci .
— Conditions d’arrêt : échec si wn i > Pi , réussite si wn+1
i = wn i .
Solution. à expliquer !
Exercice 1 : ordonnancement à priorité fixe + Rate Monotonic
EXERCICE #1 Ï S oient trois tâches périodiques T1, T2 et T3 définies par les paramètres suivants : S1 = S2 = S3 = 0,P1 = 29,C1 = 7,P2 = 5,C2 = 1,P3 = 10,C3 = 2. On suppose un ordonnancement à priorité fixe avec une affection Rate Mono- tonic des priorités. Les délais critiques sont égaux aux périodes (ie ∀ i : Di = Pi ).
1. Calculez le taux d’utilisation pour RM. Le jeu de tâches est il ordonnançable?
Solution. Le jeu de tâches est ordonnançable car le taux d’utilisation est inférieur à la borne n.(21/n− 1)
2. Dessinez, sur les 30 premières unités de temps, l’ordonnancement généré par RM, d’abord avec la ver- sion préemptive, puis, avec la version non préemptive (vous commencerez à la date zéro). Que constatez vous?
Solution. Comme on est en RM, les prios sont P (T2) > P (T1) > P (T3). Les règles du jeu font qu’à chaque date multiple de la période Pi la tâche i est de nouveau tirable.
En mode préemptif voici un ordo valide :
et en mode non préemptif, on ne peut stopper T1, du coup paf l’échéance de T2.
Capes informatique Lyon1 (NSI) - Système https:/// 23/27
5.3 Earliest deadline first (EDF)
Principe Le calcul de priorité consiste à déterminer une échéance. L’échéance Di (t ) d’une tâche i à l’instant t est égale à la somme de la date de début de l’activation courante à l’instant t et du délai critique Di .
La phase d’élection consiste à élire la tâche de plus proche échéance.
Test d’ordonnançabilité
— Cas ∀i : Di = Pi : ∑n
i=1 Ci Pi
i=1 Ci Di
i=1 Ci Pi
≤ 1 condition nécessaire uniquement.
2. Utilisation de la période d’étude (propriété du modèle périodique).
EXERCICE #2 Ï EDF Soient trois tâches périodiques T1, T2 et T3 définies par les paramètres suivants : S1 = S2 = S3 = 0,P1 = 12,C1 = 5,P2 = 6,C2 = 2,P3 = 24,C3 = 5. Les délais critiques sont égaux aux périodes (soient ∀ i : Di = Pi ).
1. Calculez le taux d’utilisation du processeur. Concluez sur l’ordonnançabilité du jeu de tâches.
Solution. taux d’utilisation < 1, donc ordonnançable.
2. Déterminer le nombre d’unités de temps libre sur la période d’étude (le ppcm des périodes, ie 24) (sans dessiner d’ordonnancement). On trouvera une formule liant ce nb à la période d’étude et le taux d’utili- sation.
Solution. nb d’unités de temps libre = (1 - taux d’utilisation) × période d’étude ce qui s’obtient en dessinant des surfaces...
Ce qui nous donne 1 ici.
3. Confirmez les points précédents en dessinant, sur la période d’étude, l’ordonnancement généré par EDF, d’abord avec la version préemptive, puis, avec la version non préemptive.
Solution. Pas super difficile, en utilisant EDF (les prios sont “la plus courte échéance en premier”) :
et en non préemptif :
Capes informatique Lyon1 (NSI) - Système https:/// 25/27
6.1 Introduction
Le but de ce TP est de programmer en Python un prototype de générateur de questionnaire. Ce dernier sera capable de lire une série de questions et de solutions dans un répertoire. Chaque question demande à l’élève de fournir une commande, le générateur doit être capable de comparer le résultat de la réponse de l’élève avec celui de la correction. Bien sûr, il faut faire en sorte que l’élève ne puisse pas avoir la possibilité de lire la solution alors que le générateur doit en être capable.
Ce TP pourra vous permettre de manipuler :
— les fichiers en python;
— les droits sur les fichiers et l’utilisation du bit setuid ;
— l’exécution de processus, les signaux et l’utilisation de pipe.
6.2 Lecture de la liste des questions
Vous devez faire un programme Python capable de lire la liste des questions depuis un répertoire. Pour chaque question, deux fichiers sont présents :
— le nom de l’un est de la forme q-NOMDELAQUESTION.txt et contient la question,
— le nom du fichier solution correspondant à cette question est s-NOMDELAQUESTION.txt
Pour l’instant, on ne se préoccupe pas des solutions : ce sera l’objet des parties suivantes. Vous devez com- mencer votre programme de façon à ce qu’il pose les questions, et pour cela, vous allez utiliser les biliothèques python : os, os.path et re (Expressions régulières).
Q.0.1) - Faire une fonction listeQuestions(rep) qui ouvre le répertoire rep qui contient les questions, cherche les fichiers dont le nom est q-NOMDELAQUESTION.txt et retourne la liste des noms de ques- tions.
Q.0.2) - Faire une fonction poseQuestion(rep, question) qui teste si le fichier rep/q-NOMQUESTION.txt existe, pose la question qui est dedans et récupère la réponse donnée par l’étudiant.
Q.0.3) - Faire un programme, en utilisant les deux fonctions précédentes, qui prend en paramètre le nom du répertoire de questions (bibliothèque argparse), lit les questions et les pose dans un ordre aléatoire.
6.3 Sécurisation des solutions
Pour le moment, la liste des questions et les solutions sont visibles à l’utilisateur du questionnaire. Vous devez donc protéger l’accès aux solutions, en modifiant les droits d’accès aux fichiers.
Sur la machine que vous utilisez, vous disposez de deux utilisateurs : profburp est l’enseignant et chaprot l’élève. L’utilisateur profburp fait partie des groupes prof, premiereS, users et lycee. L’utilisateur chaprot fait partie des groupes premiereS, eleve, lycee et users.
Q.0.4) - Quels changements de droits faut-il faire pour que seuls les élèves de premiereS et profburp soient capables d’éxécuter le programme questionnaire?
Solution. Il faut changer la propriété du fichier de questionaire : le propriétaire doit être profburp, le groupe propriétaire doit être le groupepremiereS. Ensuite, il faut donnez les droits750=rwxr_x___ avec chmod 750 questionnaire.ex ou chmod u=rwx,g=x,o= questionnaire.ex.
Q.0.5) - Comment interdire à tous, à part à profburp, de lire les fichiers d’un questionnaire?
Capes informatique Lyon1 (NSI) - Système https:/// 26/27
Informatique, Formation des enseignants Capes informatique Exercices #6 – 2019
Solution. On interdit l’accès au répertoire du questionnaire à tous les utilisateurs autres que le propriétaire : chmod go-rwx Questions
Q.0.6) - Comment permettre à tous les étudiants de premiereS d’utiliser tout de même le questionnaire?
Solution. Il faut utiliser le bit SetUID. Tout processus a un propriétaire égal à :
— celui qui a lancé la commande si SetUID bit = 0 ;
— celui à qui appartient la commande SetUID bit = 1.
Ici, il faut que le programme appartienne à profburp, soit exécutable par les élèves de premiereS et ait son bit SetUID à 1. En fait, cela pose un problème pour les scripts en python : cela est interdit par une configuration de linux. Pour cela il faut transformer le logiciel en véritable exécutable : c’est possible en convertissant le programme python en programme C grâce à cython embed. Voir pour cela le Makefile de correction. Une fois le fichier C généré et compilé, il suffit d’ajouter les propriétés et les droits :
# on n'a pas besoin d'être root pour faire ça ! $ chown :premiereS questionnaire.ex $ chmod u+s questionnaire.ex
6.4 Comparaison des résultats
Vous devez maintenant comparer la réponse de l’élève avec la solution (comme il y a beaucoup de façons de faire la même chose, vous allez comparer le résultat de la commande entrée par l’élève à celui de la com- mande de la solution).
Pour cela vous allez utiliser la bibliothèque subprocess.
Q.0.7) - Faire une fonction executeCommande(com), qui prend en paramètre une commande shell, exécute et retourne un tableau associatif avec les champs :
— fonctionne : un booléen qui dit si la commande a eu une erreur ou non (elle retourne 0 en cas de fonctionnement).
— out : une chaîne de caractères UTF8 contenant le texte affiché sur la sortie standard par la com- mande.
— err : une chaîne de caractères UTF8 contenant le texte affiché sur la sortie d’erreur par la com- mande.
Q.0.8) - Sécurisez la fonction afin de faire en sorte qu’elle ne génère jamais une exception, qu’elle s’arrête forcément même si la solution proposée ne le fait pas et qu’elle récupère au maximum les informations générées. Pour cela utilisez des timeouts et des signaux.
Q.0.9) - Modifiez la fonction poseQuestion pour qu’elle teste la proposition de l’étudiant, la solution de l’en- seignant et compare les résultats.
Capes informatique Lyon1 (NSI) - Système https:/// 27/27
Arborescence de fichiers : chemins
Le manuel
Éditer/modifier un fichier
Archiver/compresser
Un bout de cours
Earliest deadline first (EDF)
Introduction
Sécurisation des solutions
Comparaison des résultats