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