Micro Systèmes n°101 octobre 1989
Micro Systèmes n°101 octobre 1989
  • Prix facial : 30 F

  • Parution : n°101 de octobre 1989

  • Périodicité : mensuel

  • Editeur : Société Parisienne d'Edition

  • Format : (203 x 271) mm

  • Nombre de pages : 198

  • Taille du fichier PDF : 160 Mo

  • Dans ce numéro : première mondiale... tous les secrets du bios.

  • Prix de vente (PDF) : gratuit

Dans ce numéro...
< Pages précédentes
Pages : 180 - 181  |  Aller à la page   OK
Pages suivantes >
180 181
TECHNIQUE rivé à son terme (puisqu'on n'a pas encore exécuté l'instruction de retour d'interruption). Le processus P2 démarre et se poursuit jusqu'à l'arrivée de la seconde interruption, donc pendant un laps de temps légèrement inférieur à la période d'horloge (la restauration du contexte de P2 démasque les interruptions). A cet instant (12), un second processus (T2) commence l'exécution de la procédure Declencher_Tourniquet en utilisant cette fois la pile de P2 ; tout se passe alors comme pour Ti jusqu'à la commutation. Lorsque celle-ci se produit (instant C2), le transfert restaure le contexte de Tl (qui était le processus en cours à l'instant C1) et c'est le processus T2 qui est maintenant dans la file d'attente. Le processus Ti peut se terminer en exécutant l'instruction de retour d'interruption (instant RI), ce qui restaure le contexte de P1. Le phénomène se poursuit cycliquement. Pl. P2 Ti T2 +1 1 I !., I : I II — r=l + D Il Cl 12 C2 R1 13 C3 R2 14 C4 R3 Fig. 1. - Chronogramme des commutations dans le cas de deux processus P1 et P2. Modification de la procédure Demarrer_Systeme Cette procédure doit maintenant lancer le tourniquet avant de provoquer la première commutation. Il suffit pour cela de sauvegarder l'adresse du programme d'interruption actuel dans la variable Vecteur_Horloge_PC (pour pouvoir l'utiliser comme vu précédemment, mais aussi pour la restaurer lors de l'arrêt du système) et d'installer à sa place la procédure Declencher_Tourniquet. Modification de la procédure Arreter_Systeme On restaure simplement le programme de l'interruption horloge du DOS afin que le programme utilisateur se termine proprement. La macro Executer_Horloge_PC On aurait pu réinstaller l'interruption horloge du DOS sur un vecteur disponible et provoquer son exécution par une interruption logicielle. Nous avons préféré empiler le registre d'état et effectuer un appel au sous-programme dont l'adresse est stockée dans la variable Vecteur_Horloge_PC (l'instruction IRET étant équivalente à un RET FAR suivi d'un POPF). L'EXCLUSION MUTUELLE Conflits lors de l'accès à une ressource non partageable Empruntons un premier exemple aux chemins de fer. Il existe quelques tronçons de voie ferrée unique que des trains circulant dans les deux sens peuvent emprunter ; lorsqu'un train se trouve engagé sur un tel tronçon, il serait malencontreux qu'un deuxième s'y engage à son tour. Le tronçon à voie unique constitue une ressource commune pour les trains (ceux-ci doivent y circuler), qui n'est pas partageable car un seul train peut y circuler à la fois : les trains doivent y circuler en exclusion mutuelle. Comme deuxième exemple, considérons deux processus qui doivent chacun écrire un message à l'écran, du genre « Je suis le processus n°X » comme dans le programme de démonstration que nous présenterons plus loin. On risque fort d'obtenir quelque chose comme « Je suis le processus n°2ocessus n°1 ». L'écran est donc une ressource non partageable ; les processus doivent y écrire en exclusion mutuelle. On rencontre le même problème lorsque plusieurs processus doivent accéder à une structure de données commune pour la modifier : plusieurs primitives de notre noyau doivent manipuler la file des processus prêts ; si deux processus (de priorité nulle par exemple) font appel à ces primitives, la pagaille risque de s'installer dans leS pointeurs (une interruption horloge peut survenir pendant la mise à jour de ceux-ci). La file des processus prêts est donc une ressource critique (synonyme de non partageable) qui doit être gérée en exclusion mutuelle. Les procédures de gestion du tas comme GetMem en Turbo-Pascal sont des ressources critiques elles aussi : elles ne sont pas réentrantes (un programme est dit réentrant s'il est partageable, exécutable, par plusieurs processus). Il en est d'ailleurs ainsi (hélas !) pour les primitives du DOS (INT 21H). Un mécanisme est donc nécessaire pour protéger l'accès à ces ressources critiques ; une solution consiste pour le programmeur à encadrer les sections de programme correspondantes (sections critiques) par deux instructions spécialisées faisant appel à un mécanisme câblé : la première interdit les interruptions (instruction CLI de la macro Inhiber_Interruptions), la deuxième les autorise (instruction STI de la macro Autoriser_Interruptions). Il est alors évident que, dans un système monoprocesseur, les autres processus seront tous bloqués et ne pourront être en compétition pour l'accès à la ressource. Cette solution simple présente cependant des inconvénients. Tout d'abord, elle ne supporte pas l'imbrication, comme le montre l'exemple suivant : PROCEDURE Proc_A PROCEDURE Proc_B Début Début Inhiber_Interruptions Inhiber_Interruptions Proc_B Autoriser_Interruptions Fin Autoriser_Interruptions Fin 180 - MICRO-SYSTEMES Octobre 1989
PROGRAMMATION La section critique de Proc_A n'est plus protégée après l'appel à Prob_B. On ne peut donc utiliser ces instructions si on ne connaît pas le code des procédures qu'on utilise dans les sections critiques. On peut néanmoins remédier facilement à cet inconvénient en déclarant une variable globale Registre_Etat de type Word et en encadrant les sections critiques par les macros : PROCEDURE Inhiber_Interruptions ; INLINE $9C/PUSHF $FA/CLI $8F/$06/Registre_Etat POP Registre_Etat) ; PROCEDURE Restaurer_Interruptions ; INLINE $FF/$36/Registre_Etat/PUSH Registre_Etat $9D/POPF) ; POPF On restaure ainsi l'indicateur d'interruptions dans l'état où il était avant inhibition. Le deuxième inconvénient est qu'en bloquant tous les processus on bloque aussi ceux qui ne sont pas en compétition pour l'accès à la ressource que l'on désire ainsi protéger : si on veut protéger l'écran, il est inutile et pénalisant de bloquer un processus qui veut accéder à l'imprimante ou qui fait des calculs. De plus, si la section critique dure quelque temps, des événements extérieurs (tels que la prise en compte d'une touche au clavier) risquent d'être perdus. C'est cependant cette première solution qui a été adoptée dans l'écriture des primitives exportées par le noyau, car les inconvénients cités ne s'y appliquent pas : il n'y a pas d'imbrication, les processus sont pratiquement tous concernés, et le temps de masquage des interruptions est très court. Pour les autres cas, nous aurons besoin d'un mécanisme plus sophistiqué : les sémaphores. Pour reprendre l'exemple ferroviaire, un train qui s'engage sur la voie unique baisse un signal (le sémaphore), ce qui aura pour effet de bloquer tout autre train qui viendrait à se présenter ; lorsque le premier train quitte le tronçon protégé, il lève le sémaphore, indiquant par là que la voie est libre, ce qui permet de débloquer éventuellement un train en attente. LES SEMAPHORES Voyons maintenant comment mettre en place une solution analogue pour les processus. On peut utiliser un booléen qui aurait la valeur « vrai » si la ressource est occupée et « faux » dans le cas contraire. Chaque processus doit at- tendre que le booléen soit à « faux » avant d'occuper 1a ressource, puis signaler l'occupation en le forçant à « vrai » ; lorsque le processus libère la ressource, il force le booléen à « faux ». La programmation immédiate de ce mécanisme consiste en l'écriture d'une boucle d'attente avec test du booléen ; cette solution, appelée attente active, n'est guère satisfaisante car elle retarde inutilement les autres processus (l'attente active, comme son nom l'évoque, consomme du temps processeur). Aussi est-il préférable d'éliminer le processus en attente de la file des processus prêts ; comme il peut y avoir plusieurs processus en compétition pour cette ressource, il est naturel de gérer une file d'attente pour l'accès à celle-ci et dans laquelle nous rangerons ces processus. Lorsque la ressource est libérée, on retire le premier processus de la file d'attente (si elle n'est pas vide) et on le réinsère dans la file des processus prêts. Le mécanisme présenté ci-dessus est un verrou avec file d'attente. Le sémaphore avec file d'attente est un outil de synchronisation plus général où le booléen est remplacé par un compteur (variable de type entier), ce qui permet de l'utiliser pour gérer des ressources à N points d'accès (N_.>- 1, une ressource critique correspondant à N=1) ainsi qu'à d'autres problèmes de synchronisation et de communication que nous traiterons dans un prochain article. Un exemple de ressource à N points d'accès est donné par une station service disposant de N pompes à essence. Pour gérer l'accès à la station, un dispositif comparable au sémaphore est installé : pour entrer dans la station, les véhicules doivent emprunter une piste d'accès suffisamment longue pour accueillir ceux d'entre eux qui devront attendre. Dès qu'un véhicule se présente à l'entrée de la piste, il déclenche le signal B qui provoque l'exécution de l'algorithme de Baisser_Semaphore. A l'extrémité de la piste, une barrière (trait double sur les schémas) commande l'accès aux pompes. Enfin tout véhicule quittant la station déclenche le signal L qui réalise l'action Lever_Semaphore ; un compteur dont la valeur initiale est N complète ce dispositif. Voici les algorithmes en question : Baisser_Semaphore Lever_Semaphore Début Début Décrémenter compteur Incrémenter compteur Si compteur < 0 Si compteur < 0 alors bloquer véhicule alors débloquer un véhicule Fin Fin On pourra suivre le fonctionnement du dispositif sur les schémas ci-dessous dans le cas N=3, en notant que chaque schéma représente une situation après exécution complète de Baisser_Semaphore ou Lever_Semaphore. L Compteur = +3 (a) P P P File d'attente <- Entrée B Fig. 2. - A la mise en service de la station ou en période d'inactivité, le compteur a sa valeur maximale (+3), la file d'attente est vide et la barrière est ouverte. Octobre 1989 MICRO-SYSTEMES - 181



Autres parutions de ce magazine  voir tous les numéros


Liens vers cette page
Couverture seule :


Couverture avec texte parution au-dessus :


Couverture avec texte parution en dessous :


Micro Systèmes numéro 101 octobre 1989 Page 1Micro Systèmes numéro 101 octobre 1989 Page 2-3Micro Systèmes numéro 101 octobre 1989 Page 4-5Micro Systèmes numéro 101 octobre 1989 Page 6-7Micro Systèmes numéro 101 octobre 1989 Page 8-9Micro Systèmes numéro 101 octobre 1989 Page 10-11Micro Systèmes numéro 101 octobre 1989 Page 12-13Micro Systèmes numéro 101 octobre 1989 Page 14-15Micro Systèmes numéro 101 octobre 1989 Page 16-17Micro Systèmes numéro 101 octobre 1989 Page 18-19Micro Systèmes numéro 101 octobre 1989 Page 20-21Micro Systèmes numéro 101 octobre 1989 Page 22-23Micro Systèmes numéro 101 octobre 1989 Page 24-25Micro Systèmes numéro 101 octobre 1989 Page 26-27Micro Systèmes numéro 101 octobre 1989 Page 28-29Micro Systèmes numéro 101 octobre 1989 Page 30-31Micro Systèmes numéro 101 octobre 1989 Page 32-33Micro Systèmes numéro 101 octobre 1989 Page 34-35Micro Systèmes numéro 101 octobre 1989 Page 36-37Micro Systèmes numéro 101 octobre 1989 Page 38-39Micro Systèmes numéro 101 octobre 1989 Page 40-41Micro Systèmes numéro 101 octobre 1989 Page 42-43Micro Systèmes numéro 101 octobre 1989 Page 44-45Micro Systèmes numéro 101 octobre 1989 Page 46-47Micro Systèmes numéro 101 octobre 1989 Page 48-49Micro Systèmes numéro 101 octobre 1989 Page 50-51Micro Systèmes numéro 101 octobre 1989 Page 52-53Micro Systèmes numéro 101 octobre 1989 Page 54-55Micro Systèmes numéro 101 octobre 1989 Page 56-57Micro Systèmes numéro 101 octobre 1989 Page 58-59Micro Systèmes numéro 101 octobre 1989 Page 60-61Micro Systèmes numéro 101 octobre 1989 Page 62-63Micro Systèmes numéro 101 octobre 1989 Page 64-65Micro Systèmes numéro 101 octobre 1989 Page 66-67Micro Systèmes numéro 101 octobre 1989 Page 68-69Micro Systèmes numéro 101 octobre 1989 Page 70-71Micro Systèmes numéro 101 octobre 1989 Page 72-73Micro Systèmes numéro 101 octobre 1989 Page 74-75Micro Systèmes numéro 101 octobre 1989 Page 76-77Micro Systèmes numéro 101 octobre 1989 Page 78-79Micro Systèmes numéro 101 octobre 1989 Page 80-81Micro Systèmes numéro 101 octobre 1989 Page 82-83Micro Systèmes numéro 101 octobre 1989 Page 84-85Micro Systèmes numéro 101 octobre 1989 Page 86-87Micro Systèmes numéro 101 octobre 1989 Page 88-89Micro Systèmes numéro 101 octobre 1989 Page 90-91Micro Systèmes numéro 101 octobre 1989 Page 92-93Micro Systèmes numéro 101 octobre 1989 Page 94-95Micro Systèmes numéro 101 octobre 1989 Page 96-97Micro Systèmes numéro 101 octobre 1989 Page 98-99Micro Systèmes numéro 101 octobre 1989 Page 100-101Micro Systèmes numéro 101 octobre 1989 Page 102-103Micro Systèmes numéro 101 octobre 1989 Page 104-105Micro Systèmes numéro 101 octobre 1989 Page 106-107Micro Systèmes numéro 101 octobre 1989 Page 108-109Micro Systèmes numéro 101 octobre 1989 Page 110-111Micro Systèmes numéro 101 octobre 1989 Page 112-113Micro Systèmes numéro 101 octobre 1989 Page 114-115Micro Systèmes numéro 101 octobre 1989 Page 116-117Micro Systèmes numéro 101 octobre 1989 Page 118-119Micro Systèmes numéro 101 octobre 1989 Page 120-121Micro Systèmes numéro 101 octobre 1989 Page 122-123Micro Systèmes numéro 101 octobre 1989 Page 124-125Micro Systèmes numéro 101 octobre 1989 Page 126-127Micro Systèmes numéro 101 octobre 1989 Page 128-129Micro Systèmes numéro 101 octobre 1989 Page 130-131Micro Systèmes numéro 101 octobre 1989 Page 132-133Micro Systèmes numéro 101 octobre 1989 Page 134-135Micro Systèmes numéro 101 octobre 1989 Page 136-137Micro Systèmes numéro 101 octobre 1989 Page 138-139Micro Systèmes numéro 101 octobre 1989 Page 140-141Micro Systèmes numéro 101 octobre 1989 Page 142-143Micro Systèmes numéro 101 octobre 1989 Page 144-145Micro Systèmes numéro 101 octobre 1989 Page 146-147Micro Systèmes numéro 101 octobre 1989 Page 148-149Micro Systèmes numéro 101 octobre 1989 Page 150-151Micro Systèmes numéro 101 octobre 1989 Page 152-153Micro Systèmes numéro 101 octobre 1989 Page 154-155Micro Systèmes numéro 101 octobre 1989 Page 156-157Micro Systèmes numéro 101 octobre 1989 Page 158-159Micro Systèmes numéro 101 octobre 1989 Page 160-161Micro Systèmes numéro 101 octobre 1989 Page 162-163Micro Systèmes numéro 101 octobre 1989 Page 164-165Micro Systèmes numéro 101 octobre 1989 Page 166-167Micro Systèmes numéro 101 octobre 1989 Page 168-169Micro Systèmes numéro 101 octobre 1989 Page 170-171Micro Systèmes numéro 101 octobre 1989 Page 172-173Micro Systèmes numéro 101 octobre 1989 Page 174-175Micro Systèmes numéro 101 octobre 1989 Page 176-177Micro Systèmes numéro 101 octobre 1989 Page 178-179Micro Systèmes numéro 101 octobre 1989 Page 180-181Micro Systèmes numéro 101 octobre 1989 Page 182-183Micro Systèmes numéro 101 octobre 1989 Page 184-185Micro Systèmes numéro 101 octobre 1989 Page 186-187Micro Systèmes numéro 101 octobre 1989 Page 188-189Micro Systèmes numéro 101 octobre 1989 Page 190-191Micro Systèmes numéro 101 octobre 1989 Page 192-193Micro Systèmes numéro 101 octobre 1989 Page 194-195Micro Systèmes numéro 101 octobre 1989 Page 196-197Micro Systèmes numéro 101 octobre 1989 Page 198