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
...
```
