TD2 Principes des Systèmes et Réseaux TD2 : Ordonnancement 1 Ordonnancement FIFO À t = 0, La file des processus prêt contient les processus P1 (temps d’exécution 4 min) et P2 (temps d’exécution 3min) dans cet ordre. À t = 1 min, un nouveau processus P3 (exécution 3 min) arrive et finalement un processus P4 (exécution 5 min) à t = 3 min. Le processus P2 fait une opération de lecture d’un fichier après 1min 30s d’exécution. Cette opération le met en sommeil pendant 5s. Lorsqu’il se reveille, il est mis à la fin de la liste des processus prêts. Question 1 : Simuler l’exécution de ces processus si l’ordonnancement utilise l’algorithme FIFO. Vous indiquerez (par un graphique ou un tableau) à chaque instant le processus en cours d’exécution et l’état dans lequel se trouvent tous les processus. Question 2 : Même question avec l’algorithme FIFO avec priorités suivantes : (P1, 4) (P2, 5) (P3, 5) (P4, 3). Question 3 : Calculer dans chaque cas le temps d’attente moyen. 2 Ordonnancement circulaire Question 4 : Simulez l’algorithme d’ordonnancement circulaire (tourniquet) avec les 3 processus suivants : P1 (exécution 25 ms), P2 (exécution 30 ms) et P3 (exécution 30 ms). Au départ, la liste des processus prêts est P1 P2 P3. Le quantum vaut 10ms, le temps de commutation 1 ms. Pour chaque processus, vous indiquerez à tout moment dans quel état il se trouve (prêt, en exécution, sommeil). Question 5 : Même question avec les processus suivants : — P1 : exécution 50ms ; — P2 : exécution 15ms, puis sommeil pendant 25ms puis exécution pendant 20ms ; — P3 : exécution 50ms. Au départ, la liste des processus prêts est P1 P2 P3. Le quantum vaut 10ms, on négligera le temps de commutation et on suppose que les processus réveillés sont placés en début de la liste des processus prêts. Question 6 : Même question mais maintenant les processus réveillés sont placés à la fin de la liste des processus prêts. 3 Ordonnancement “optimal” 3 processus dont les temps d’exécution sont de 5, 2 et 12 minutes doivent être lancés sur un système de traitement par lots (non interractif et sans temps partagé). Question 7 : Dans quel ordre doivent-ils être lancés pour que le temps d’attente moyen soit minimum ? Question 8 : D’une manière générale, comment faut-il choisir le prochain processus (parmi les processus prêts) pour minimiser le temps d’attente moyen ? Question 9 : Que se passe-t-il si un nouveau processus arrive à t=3min avec un temps d’exécution de 3min et encore un autre à t=8min (exécution 3min). L2 Informatique - 2015/2016 1 Emilie MORVANT TD2 Principes des Systèmes et Réseaux Question 10 : La question précédente met en lumière un gros défaut de cet algorithme, lequel à votre avis ? 4 Temps d’attente 5 processus sont lancés pratiquement simultanément sur un ordinateur. Leurs temps d’exécution sont respectivement de 10, 6, 2, 4 et 8 minutes (dans l’ordre d’arrivée). Calculer le temps d’attente moyen pour les algorithmes d’ordonnancement suivants : — FIFO ; — tourniquet (quantum 10ms) — FIFO avec priorités fixes (priorités respectives des processus : 3, 5, 2, 1, 4) ; — l’algorithme solution de l’exercice précédent. On négligera le temps de commutation. 5 Ordonnancement circulaire 2 Question 11 : Simulez l’algorithme d’ordonnancement circulaire (tourniquet) avec les 3 processus suivants : — P1 : exécution 10ms, puis sommeil pendant 35ms puis exécution pendant 15ms ; — P2 : exécution 15ms, puis sommeil pendant 15ms puis exécution pendant 8ms ; — P3 : exécution 10ms, puis sommeil pendant 23ms puis exécution pendant 15ms. Au départ, la liste des processus prêts est P1 P2 P3. Le quantum vaut 10ms, on négligera le temps de commutation et on suppose que les processus réveillés sont placés en début de la liste des processus prêts. Pour chaque processus, vous indiquerez à tout moment dans quel état il se trouve (prêt, en exécution, sommeil). Question 12 : Même chose, mais avec des priorités statiques. Priorité de P2 = 2 = priorité de P3 et priorité de P1 = 1. Question 13 : Calculez l’efficacité de l’ordonnancement dans chacun des deux cas. L’efficacité est le rapport entre la somme des temps utilisés par chacun des processus et le temps total. 6 Comparaison On suppose qu’un processus de traitement a besoin de 5min 30s de temps processeur pour se terminer (sans jamais faire d’E/S). Un processus d’E/S répète 300 fois : 0.1s de temps processeur consommé suivi par 1s de sommeil en attente d’une E/S. Question 14 : Calculer le temps nécessaire pour chacun des deux scénario suivants (temps partagé, quantum de 10ms) : 1. Deux processus de traitement sont lancés simultanément. Lorsqu’ils sont terminés, deux processus d’E/S sont lancés. 2. Un processus de traitement et un processus d’E/S sont lancés simultanément. Lorsqu’ils sont terminés, un autre processus de traitement et un autre processus d’E/S sont lancés. 7 Algorithme d’ordonnancement de linux C’est un algorithme d’ordonnancement pour système à temps partagé. Ce qui veut dire que le processus choisi par l’ordonnanceur pour être exécuté dispose au maximum d’un quantum de temps (10ms). L2 Informatique - 2015/2016 2 Emilie MORVANT TD2 Principes des Systèmes et Réseaux Les processus sont répartis dans 2 listes : la liste des processus prêts (notée LPP) et la liste des processus en sommeil (notée LPS). Les deux caractéristiques suivantes de chaque processus p sont utilisées pour l’ordonnancement : — le niveau de “nice” du processus (noté p.nice). Le nice est un entier entre -20 et 19 (inclus). — le compteur (noté p.compteur) : un entier décrémenté de 1 à chaque fois que le processus est choisi par l’ordonnanceur pour être exécuté (cf. la dernière ligne de l’algorithme). Lorsqu’un processus est créé, cette valeur est initialisée à (20 − p.nice)/4 + 1 (attention, c’est une division entière). L’algorithme d’ordonnancement est appelé à chaque fin de quantum par le SE pour choisir le nouveau processus à exécuter parmi la liste LPP. Le nouveau processus à executer est celui qui se trouve dans la variable suivant à la fin de l’algorithme ci-dessous. Cet algorithme utilise une fonction goodness qui calcule une valeur de “goodness” pour chaque processus. Cette fonction est donnée plus bas. Algorithme d’ordonnancement début : c = -1000; pour chaque processus p de la liste LPP faire { poids = goodness(p); si (poids > c) { c = poids; suivant = p; } } if (c == 0) { pour chaque processus p des listes LPP et LPS faire { p.compteur = (p.compteur/2) + (20 - p.nice)/4 + 1; /* division entière ! */ } retourner au début de l’algorithme; } /* suivant contient maintenant le prochain processus à exécuter */ suivant.compteur = suivant.compteur - 1; Fin fonction goodness entree : un processus p sortie : la valeur de goodness pour ce processus { if (p.compteur != 0) return (p.compteur + 20 - p.nice); else return 0; } Question 15 : À quelles valeurs les compteurs des processus suivant sont-ils initialisés ? — un processus de nice 19 ; — un processus de nice 12 ; L2 Informatique - 2015/2016 3 Emilie MORVANT TD2 Principes des Systèmes et Réseaux — un processus de nice 0. Question 16 : Question préliminaire : expliquez en une phrase ce que fait la première boucle pour chaque processus p de la liste LPP (en particulier que valent les variables c et suivant à la fin de cette boucle ?) Simuler l’ordonnancement pendant 10 quantums de temps pour les processus suivants : — 3 processus prêts : P1 (nice = 19), P2 (nice = 12), P3 (nice = 12) ; — 1 processus en sommeil (et qui le reste pendant les 10 quantums) P4 (nice = 12). Vous indiquerez la valeur de la goodness du compteur au début de chaque quantum (juste après avoir exécuté l’algorithme d’ordonnancement) et pour chacun des 4 processus. On néglige les temps de commutation. Les valeurs initiales des compteurs sont celles calculées dans la question précédente. Question 17 : Que va-t-il se passer pendant les quantums suivants (les processus prêts sont les mêmes et le processus 4 reste en sommeil) ? Quelle va être la valeur maximale atteinte par le compteur du processus 4 ? Question 18 : À quel moment la boucle pour chaque processus p des listes LPP et LPS est-elle exécutée ? À quoi sert elle ? À quoi sert le p.compteur/2 ? Question 19 : Quelle valeur maximum peut atteindre le compteur d’un processus en fonction de son nice ? (indication : considérer des processus en sommeil). Question 20 : Quelle est la proportion du temps processeur utilisée par chacun des processus P1, P2 et P3 (en supposant qu’ils s’exécutent pendant un temps suffisamment long) ? Question 21 : Comment peut on calculer ces valeurs sans avoir à faire la simulation complète (Comme dans la question 2). Faites le pour les 2 cas suivants (les processus ne sont jamais en sommeil) : — 2 processus en nice 0, un processus en nice 19 ; — 3 processus en nice 0, 2 processus en nice 12. Question 22 : À quoi sert la valeur de nice ? Question 23 : Peut-on avoir une situation de famine avec cet algorithme d’ordonnancement dans les deux cas suivant et pourquoi ? 1. s’il n’y a pas de création de nouveaux processus ; 2. s’il y en a. L2 Informatique - 2015/2016 4 Emilie MORVANT