TP – Les signaux et le temps
Le but de ce TP est de mettre œuvre les signaux et la gestion
du temps dans votre système.
Vous pouvez soit partir du code que vous avez réalisé lors de la dernière
séance de TP, soit partir du corrigé type donné ici,
Préambule
Commencez par ajouter un champs p_pid à votre structure proc.
Lorsque vous créer un nouveau processus, vous devez lui attribuer un nouveau PID.
Pour cela, il vous suffit d'utiliser une variable globale mpid
que vous incrémentez à chaque création de processus.
Les PIDs de notre système ne doivent pas dépasser la valeur 256.
Vous veillerez à vous assurez, lorsque vous créez un nouveau processus,
que le PID que vous donnez est toujours libre.
Les signaux
Ajoutez les champs p_sig et u_signal à la structure
proc.
Écrivez la fonction ssig.
Écrivez la fonction psignal(struct proc proc, int sig) capable d'envoyer un signal
au processus proc.
Écrivez la fonction kill(int pid, int sig) capable d'envoyer un signal au processus
de PID pid.
On ne vous demande pas de gérer les groupes de processus.
Écrivez les fonctions issig et psig. Ces fonctions
doivent être appelées dès qu'un processus est élu. Dans psig, plutôt que
de modifier la pile utilisateur, appelez directement le gestionnaire de processus si il existe.
Écrivez un jeu de test adéquat permettant de tester vos fonctions.
Gestion du temps
Ajoutez les champs p_cpu, p_nice, p_pri,
u_stime et u_utime à votre structure proc.
Ajoutez une variable globale lbolt. Enfin, modifiez votre code de façon
à ce que le signal SIGALARM soit généré toutes les 10ms en utilisant la
fonction setitimer.
Modifiez votre gestionnaire du signal SIGALARM de façon à :
- Mettre à jour les variables u_stime et u_utime,
- Mettre à jour la variables lbolt,
- Mettre à jour la variable p_cpu.
Faîte en sorte qu'une élection ait lieue toutes les secondes en utilisant la variable lbolt.
Modifiez votre code de façon à recalculer p_pri avant d'effectuer une élection.
Votre élection doit sélectionner le processus avec le plus petit p_pri.
Si vous avez encore du temps, vous pouvez mettre e œuvre les timeouts.