update
This commit is contained in:
107
SCR/controle/devoir39/TaF39
Normal file
107
SCR/controle/devoir39/TaF39
Normal file
@@ -0,0 +1,107 @@
|
||||
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
|
||||
...
|
||||
```
|
Reference in New Issue
Block a user