210 likes | 402 Views
Virtualisation du microprocesseur. Partage de l’accès au microprocesseur. Ordonnancement des tâches. Contraintes « temps réel ». Par Gilles Grimaud U niversité des S ciences et T echnologies de L ille http://www.lifl.fr/~grimaud/Cours. Plan. Virtualiser la ressource « microprocesseur »
E N D
Virtualisation dumicroprocesseur Partage de l’accès au microprocesseur. Ordonnancement des tâches. Contraintes « temps réel ». Par Gilles Grimaud Université des Sciences et Technologies de Lille http://www.lifl.fr/~grimaud/Cours
Plan • Virtualiser la ressource « microprocesseur » • Principe élémentaire de mise en œuvre • Les Tâches et les Ordonnanceurs • Sections critiques, Exclusion mutuelle • gestion des « Etreintes fatales »
Virtualiser la ressource« microprocesseur » Un ordinateur, pour l’utilisateur supporte l’exploitation d’un certain nombre de logiciels : Le systèmed’exploitationvirtualise la « ressource » Microprocesseur. Un ordinateur est composé d’un nombre limité de microprocesseurs pour exécuter les programmes :
Virtualiser la ressource« microprocesseur » Préludes aux systèmes multitâches, les systèmes multi applicatifsnon préemptifs : • Systèmes événementiels mono tâche : 2. Systèmes à base de co-routines : • Plusieurs piles d’appels ; • Les appels à des co-routines impliquent un changement de pile d’appel. Système d’exploitation Ou Machine Virtuelle Appel de procédure« évènement » Application 1 Retour de procédure Application 2
Virtualiser la ressource « microprocesseur » Multiplexage de l’activité du microprocesseur : !préemption interruption d’ordonnancement Créneau de temps élémentaire ! Attente passive Appli. 3 Appli. 2 Appli. 1 Temps noyau
Virtualiser la ressource « microprocesseur » Multiplexage de l’activité du microprocesseur : 1er bénéfice escompté : optimisation de l’usage du microprocesseur. Remplacer l’attente active par de l’attente passive. /* attente active */ key = 0; while ( key != 0x7f ) key = in(0x3c8); //lire l’état du clavier #include <sched.h> /* attente passive */ while (in(0x3c8) != 0x7f) sched_yield(); // libère le créneau du processus
Principes élémentaires de mise en œuvre Pour mettre en œuvre un ordonnanceur : • Interruption matérielle basée sur le temps • Section critique : • move sr,#$2700 ... move sr,#$2000 • Système matériel d’exclusion mutuelleavec monoprocesseur : • Instruction machine TAS (pour Test&Set ou autres..) avec multiprocesseur : • circuit dédié UC n°1 UC n°1 Circuitdédié demande réponse UC n°2 UC n°2
Principes élémentaires de mise en œuvre Demande d’attentepassive (aprèsdétection exclusionmutuelle…) Implémentation d’un ordonnanceur : Section critique Appli. 2 Appli. 1 Armé un générateur d’interruptions « timer » Elire une nouvelle tâche Lancer la 1ere tâche Lancer la tâche noyau Interruption matériel« timer »
Les Tâches et les Ordonnanceurs Cycle de vie « classique » d’une tâche : • Active (running) : C'est le cas de la tâche qui est en train de s'exécuter. • Prête (ready) : C'est le cas des tâches qui sont en attente de pouvoir s'exécuter. • Endormie (asleep) : C'est le cas des tâches qui sont en attente d'événements qui provoqueront leur réveil (interruption, réception de message ou fin d'un décompte de timer). • Morte (Zombie) :c’est le cas des tâches qui sont terminées mais dont le père peut encore en demander l’état. L’information de terminaison doit être conservée. Tâches actives CPU 1 CPU 2 Tâche 4 Tâche 2 Tâche prêtes Tâche 9 Tâche 3 Tâche 1 Tâches endormies Tâche 6 Tâches mortes Tâche 5 Tâche 7 Tâche 8 Tâche 10
Les Tâches et les Ordonnanceurs Exemples de politiques d’ordonnancement : • Tourniquet (round robin) :avec 3 tâches A,B,C on propose successivement : A,B,C,A,B,C,A,B,C,A,B,C,… • Ordonnancement par priorité : • Tâches « critiques » ; • Tâches « normales » ; • Tâches « de fond ». • Ordonnancement mixte : par priorité avec tourniquet • Temps réel : • Au plus pressé (Earliest Deadline First) • Périodique (Rate monotonic) • Au mieux (Best effort) • …
Tâche 4 Tâche 1 Tâche 3 Tâche 6 Tâche 8 Tâche 7 CPU Tâche 2 Les Tâches et les Ordonnanceurs Pré-calcul des tables d’ordonnancement et procédure de création d’une nouvelle tâche : Objet : minimiser le temps de commutation Solution : simplifier la procédure d’élection d’une tâche en précalculant les séquences d’ordonnancement (compliquer la routine d’insertion/suppression de la liste des tâches prêtes) Tâches actives Tâches critiques Prêtes Tâches normales Tâches de fond Tâches endormies
Les Tâches et les Ordonnanceurs Nouvel ordonnanceur dans Linux 2.5 : Gestion des processus À faire fait 1 1 0 0 0 0 1 0 0 1 0 0 0 1
Les Tâches et les Ordonnanceurs Priorité & Criticité des tâches : • Une tâche plus prioritaire est périodiquement ré-élue avant une tâche moins prioritaire. insertion triée selon le niveau de priorité dans la liste des tâches prêtes à partir de la tâche active. 2. Une tâche plus critique qu’une autre est systématiquement réélue sans rendre la main aux tâches moins critiques, jusqu’à ce qu’elle soit terminée ou endormie. insertion triée selon le niveau de priorité dans la liste des tâches prêtes à partir de la tâche active.
Section critiques,exclusions mutuelles, etc. Section critique de code : Objet : Assurer la non préemptibilité de certaines routines du système (e.g. programmation des tables d’interruptions d’un microprocesseur, initialisation des registres d’un contrôleur de disque). Solution : Minimale : move sr, #$2700 ; Status register set to ; non-interruptible mode. Toutes les interruptions reçues seront ignorées par le microprocesseur jusqu’à : move sr, #$2000 ; Status register set to ; interruptions ready mode.
Section critiques,exclusions mutuelles, etc. Tâche critique : Objet : exécuter dans un processus particulier un traitement trop lourd pour être exécuté en réponse à une interruption (traitement d’un paquet Ethernet). Solution : l’interruption « réveille » une tâche critique et initialise les données pour l’activité la tâche critique. Ensuite le code de l’interruption donne la main à l’ordonnanceur qui préemptera la tâche courante et élira la tâche critique.
Sections critiques,exclusions mutuelles, etc. Exclusions mutuelles de code : Objet : Garantir que la manipulation d’une ressource critique n’est réalisée que par une tâche (néanmoins préemptible) à la fois. Technique : En monoprocesseur, Il est, en règle générale, possible d’exploiter l’atomicité élémentaire du microprocesseur qui est associée à l’exécution d’une instruction machine. Tâche 2 Tâche 1 Lock : DB.W 0 appli1:... move a3,#$lock tas (A3) Préemption move a3, #$lock tas (a3) bnz lockAlreadyUsed ; section critique ... clr (a3) Commutation de contexte
Sections critiques,exclusions mutuelles, etc. Les sémaphores, 3 opérations clefs : • Initialiser (semaphore, entier) ; • P(semaphore, entier) ; • V(semaphore, entier) ; Les Sémaphores, couteau suisse de la synchronisation : • Isoler des sections de code (mutex) ; • Gérer un nombre quelconque de ressources ; • Créer des rendez-vous ; • …
Sections critiques,exclusions mutuelles, etc. Moniteurs, un autre modèle de synchronisation, l’exemple de java : Class ex implement Thread { static Object lock = new Object(); static int compteur = 0; public void run () { synchronize(lock) { compteur ++; if(compteur < 10) lock.wait(); else { lock.notifyAll();compteur = 0; } } } Sémaphores et moniteurs sont équivalents, il est d’ailleurs facile de réaliser l’un avec l’autre et inversement.
Criticité et préemption Problème : une tâche critique ne devrait pas être préemptée par une tâche normale, pourtant… Soit trois tâches, A,B,C , A : tâche de fond, B : tâche normale, C: tâche critique. Soit le scénario suivant : A prend un verrou V, puis C préempte A. Pendant que C s’exécute, B qui était endormie est réveillée (devient prête). C veut prendre le verrou V. V est déjà pris par A donc C est bloquée. B est alors élue active alors que C, qui est une tâche critique, est bloquée… Solution : Technique de l’inversion de priorité : C est bloqué par V que A à pris, il faut exécuter A jusqu’à ce qu’elle libère V. Il faut donc, temporairement, inverser la priorité de A et de B. ainsi A est élue et elle peut donc libérer le Verrou nécessaire à la poursuite de C.
Gestion des « étreintes fatales » Numérotation des verrous, avec deux verrous, Va et Vb (verrou : sémaphore d’une capacité d’une seule ressource ) : Tâche n°2 : { … P(Vb); … P(Va); … V(Va); V(Vb); } Tâche n°1 : { P(Va); … P(Vb); … V(Vb); V(Va); } Pas 1 <!!!!> Ordre lexicagraphique non respecté !!! Pas 2 Pas 3 Pas 4 Pas 5 Pas 6 Pas 7 Processeur n°1 Processeur n°2
Gestion des « étreintes fatales » Pour le cas général des sémaphores, problème connu. Solutions générales [Djiskstra 74] Tâche 2 Zone correcte Zone avecdeadlock à venir Dépassementde ressource Impossible Tâche 1