AISE – Architecture Interne d'un Système d'Exploitation

Portail informatique

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.