Questions : 1.1) On affecte principalement les priorités selon les critères suivants : - l'urgence de la tâche (sa période, son délai critique. ex : l'affectation Rate Monotonic consiste à affecter les priorites des tâches selon leur urgence) - l'importance de la tâche : assure elle un service important dans le système ? ( ex : on affecte une plus forte priorite aux tâches periodiques vis-a-vis des tâches apériodiques car les tâches périodiques sont critiques et les tâches apériodiques sont non critiques). - l'existance de contraintes de précédence : doit elle être exécutée avant d'autres tâches ? (ex : Chetto et Blazewicz) - l'acces aux ressources partages (ex : protocole d'heritage de priorite) Dans cet exercice, il y a au moins 2 possibilités : - exprimer la contrainte de précédence entre C1, C2, C3 et A1 : dans ce cas, on affecte une priorité plus forte à C1, C2 et C3 afin de garantir que ces tâches soient exécutées avant A1. Attention, le test sur le taux d'utilisation n'est plus valide ici !! Seul le test sur le temps de réponse peut être utilisé pour vérifier que les tâches respectent leurs contraintes temporelles. - privilégier l'urgence des tâches : dans ce cas on affecte les priorités selon Rate Monotonic (cad selon les périodes). Avec cette solution, on peut vérifier que les tâches respectent leurs contraintes temporelles avec le test sur le taux d'utilisation et le test sur le temps de réponse. Les paramètres des tâches peuvent être (plusieurs solutions JUSTIFIEES sont possibles) : Tâches Période Priorité Capacité C1 10 1 1 C2 10 2 2 C3 40 4 4 A1 12 3 2 A2 6 0 1 - Les priorités des tâches sont affectées selon Rate Monotonic. - Les capacités des tâches étant des bornes sur leur temps d'exécution, la capacité de A2 est de 1 ms. - C1 et C2 ayant la même période, on choisit, de façon arbitraire, d'affecter une priorité plus forte à C1 et moins forte à C2 ... le choix inverse est aussi possible. ATTENTION : les résultats ci-dessous supposent que les priorités ont effectivement été affectées comme ci-dessus !! 1.2) RC1 = 1 + 1/6*1 = 2 = 1 + 2/6*1 = 2 RC2 = 2 + 2/6*1 + 2/10*1 = 4 = 2 + 4/6*1 + 4/10*1 = 4 RC3 = 4 + 4/6*1 + 4/10*2 + 4/10*1 + 4/12*2 = 10 = 4 + 10/6*1 + 10/10*2 + 10/10*1 + 10/12*2 = 11 = 4 + 11/6*1 + 11/10*2 + 11/10*1 + 11/12*2 = 14 = 4 + 14/6*1 + 14/10*2 + 14/10*1 + 14/12*2 = 17 = 4 + 17/6*1 + 17/10*2 + 17/10*1 + 17/12*2 = 17 Pour obtenir ces résultats, il n'est pas nécessaire de calculer les temps de réponse A1 et A2. 1.3) Lorsque des tâches utilisent des ressources partagées, il est possible qu'elles soient obligées, à certains moments, d'attendre pour acceder à ces ressources. Ce temps d'attente (ou temps de blocage) est calculé conformément au protocole d'accés de la ressource (ex : PIP, PCP). Malheureusement, le temps de réponse calculé en 1.2 ne tient pas compte de ce temps de blocage. 1.4) voir le fichier ex13.jpg La ressource est allouée et libérée par C1 à l'instant 2 La ressource est allouée par C2 à l'instant 3 La ressource est libérée par C2 à l'instant 4 La ressource est allouée par C3 à l'instant 8 La ressource est libérée par C3 à l'instant 9 La ressource est allouée et libérée par C1 à l'instant 11 etc .... 1.5) Si l'on calcule les taux d'utilisation des processeurs a et b (voir fichier exo13_q5.jpg), on obtient respectivement Ua=1,477 et Ub=0,7667. On en conclue qu'inévitablement, au moins une tâche du processeur a ne respectera pas ses contraintes temporelles. 1.6) Avec Rate Monotonic, on sait que le taux d'utilisation peut aller jusqu'à 100% tout en respectant les contraintes temporelles des tâches si les tâches sont harmoniques (cf. exo2 du TD). Une solution consiste donc à placer les tâches en fonction de leur période : les tâches multiples de 5 sur le processeur a et les tâches multiples de 3 sur le processeur b. Les taux d'utilisation de a et b sont alors tous les 2 inférieurs ou égal à 100% ... les contraintes temporelles sont donc respectées. D'où le résultat du fichier exo13_q6.jpg