108 lines
3.7 KiB
Plaintext
108 lines
3.7 KiB
Plaintext
Créez un répertoire cntr_r3.05, et pour chaque exercice un sous-répertoire (Ex1,
|
|
Ex2, etc.) pour y placer vos réponses.
|
|
|
|
Les exercices sont indépendants. Vous rendrez une archive compressée à la fin de
|
|
l'épreuve sur le site :
|
|
|
|
http://www.iut-fbleau.fr/site/site/DEVOIR
|
|
|
|
# EX1
|
|
1) Ecrivez un programme gdf1.c qui implante le diagramme de processus
|
|
conforme à la sortie suivante de la commande ps :
|
|
|
|
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
|
|
0 S 1000 28865 28785 0 80 0 - 1039 hrtime pts/0 00:00:00 a.out
|
|
1 S 1000 28868 28865 0 80 0 - 1039 hrtime pts/0 00:00:00 \_ a.out
|
|
1 S 1000 28871 28868 0 80 0 - 1039 hrtime pts/0 00:00:00 | \_ a.out
|
|
1 S 1000 28870 28865 0 80 0 - 1039 hrtime pts/0 00:00:00 \_ a.out
|
|
1 S 1000 28873 28870 0 80 0 - 1039 hrtime pts/0 00:00:00 | \_ a.out
|
|
1 S 1000 28872 28865 0 80 0 - 1039 hrtime pts/0 00:00:00 \_ a.out
|
|
|
|
2) Expliquez (dans gdf2.txt) ce que provoque kill -TERM 28865.
|
|
|
|
3) Modifiez votre programme (gfd3.c) pour que le processus correspondant à 28873 utilise un
|
|
tube pour communiquer son PID au processus correspondant à 28871.
|
|
|
|
# EX2
|
|
Le sous-repertoire 'src/' de votre répértoire de travail contient le source du
|
|
programme 'cachetst.c'. Ce programme peut être utilisé pour tester certaines
|
|
propriétés de la mémoire cache. Il crée une liste de structures et effectue
|
|
plusieurs passages par cette liste en faisant un test sur chaque élément.
|
|
|
|
La longueur de la liste et le nombre de passages (itérations) doivent être
|
|
donnsés sur la ligne de commande. Compilez et lancez ce programme avec par
|
|
exemple les valeurs '1000' '1000' sur la ligne de commande pour voir ce qu'il
|
|
calcule. Augmentez ces valeurs en prenant '10000' '100000' pour voir que le
|
|
temps de calcul est assez long.
|
|
|
|
Votre travail consiste à rajouter une partie de code à ce programme (appelez le
|
|
'vcachetst.c') pour qu'il affiche chaque seconde le nombre de tests actuellement
|
|
passés (la valeur de la variable 'z').
|
|
|
|
Mettez le source du programme 'vcachetst.c' dans le sous-repertoire 'src/'
|
|
|
|
# EX3
|
|
Un groupe d'étudiants en informatique révise son contrôle machine de scr. Ils ne
|
|
peuvent réviser qu'en mangeant de la pizza. Chaque étudiant exécute en boucle :
|
|
|
|
```c
|
|
while(1){
|
|
|
|
prendre_une_part_de_pizza();
|
|
reviser_et_manger_la_part_de_pizza();
|
|
|
|
}
|
|
```
|
|
|
|
Quand il n'y a plus de pizza, les étudiants dorment. Celui qui prend la dernière
|
|
part commande une nouvelle pizza.
|
|
|
|
Écrire un programme en C qui crée les processus fils étudiants (leur nombre est
|
|
passé à la ligne de commande). Les parts de pizza, numérotés de 1 à 8, sont
|
|
placées dans un tube par le pére. Les fils connsomment chaque part depuis le
|
|
tube. Un autre tube permet à celui qui prend la dernière part d'en commander une
|
|
autre.
|
|
|
|
Exemple de trace d'exécution
|
|
|
|
```
|
|
[denis@portabledenis test]$ ./pizza 10
|
|
student 1 takes piece 1
|
|
student 8 takes piece 2
|
|
student 0 takes piece 3
|
|
student 3 takes piece 4
|
|
student 9 takes piece 5
|
|
student 2 takes piece 6
|
|
student 4 takes piece 7
|
|
student 5 takes piece 8
|
|
student 5 orders a pizza
|
|
pizza ordered!
|
|
pizza delivered!
|
|
student 6 takes piece 1
|
|
student 7 takes piece 2
|
|
student 9 takes piece 3
|
|
student 0 takes piece 4
|
|
student 5 takes piece 5
|
|
student 2 takes piece 6
|
|
student 1 takes piece 7
|
|
student 6 takes piece 8
|
|
student 6 orders a pizza
|
|
pizza ordered!
|
|
pizza delivered!
|
|
student 4 takes piece 1
|
|
student 3 takes piece 2
|
|
student 8 takes piece 3
|
|
student 7 takes piece 4
|
|
student 9 takes piece 5
|
|
student 5 takes piece 6
|
|
student 2 takes piece 7
|
|
student 6 takes piece 8
|
|
student 6 orders a pizza
|
|
pizza ordered!
|
|
pizza delivered!
|
|
student 0 takes piece 1
|
|
student 8 takes piece 2
|
|
student 7 takes piece 3
|
|
...
|
|
```
|