TD9 : Révision Systèmes d’Exploitation Avancés
Télécharger PDFObtenir le pack complet des cours, TDs, examens sur Systèmes d’Exploitation!
Vous souhaitez maîtriser Systèmes d’Exploitation ? Ne cherchez plus, nous avons le pack bien choisi pour vous.
Accédez à une collection complète des supports de cours, des travaux dirigés (TDs) corrigés, TPs avec solution, examens...
Télécharger packCorrection TD9 : Révision Systèmes d’Exploitation Avancés
Télécharger PDFInstitut Supérieur d’Informatique Université de Tunis el Manar MME. LILIA SFAXI TD9 : Révision Systèmes d’Exploitation Avancés – 1
ère année ING. Année Universitaire : 2011/2012 TD9 : Révision MME. LILIA SFAXI
2011/2012 1 TD9 : Révision Systèmes d’Exploitation Avancés
Exercice 1
Les Sémaphores Les processus A, B, C sont trois processus indépendants qui s’exécutent à l’infini. Ils réalisent des calculs que l'on note respectivement CalA, CalB et CalC. Le processus A produit des messages dans un buffer (tampon) Buff. Les deux processus B et C, doivent lire tous ces messages dans Buff. Les processus disposent en mémoire commune d'un buffer de N cases Buff[0] à Buff[N-
1] chacune capable de contenir un message. On dispose des procédures Ecrire (Buff[i], M), Lire (Buff[i], M) et Supprimer (Buff[i]) pour lire, écrire, ou supprimer le message M dans la case Buff[i] du buffer. Le comportement des processus est le suivant (dans une boucle infinie) : • Le processus A effectue un calcul CalA, puis écrit un message dans le buffer. • Les processus B et C lisent les messages écrits par A dans le Buff et effectuent, respectivement le traitement CalB et CalC après chaque lecture. Un message n’est supprimé du buffer que quand il est lu par B et par C (peut importe l’ordre de sa lecture).
• Les processus B et C sont indépendants, de sorte que chacun est susceptible de prendre temporairement de l'avance par rapport à l'autre. Donner le pseudo-code des processus A, B et C, qui assure le comportement décrit ci-
dessus ainsi que la cohérence des données dans le buffer. La synchronisation de ces processus doit être faite à l’aide des sémaphores dont vous indiquerez les valeurs initiales. Semaphore Full = 0 Semaphore Empty = N Semaphore Mutex = 1 Tableau Lu[N] = False. TD9 : Révision MME. LILIA SFAXI
2011/2012 2 Processus A While (true) { Down (empty) CalA Down(mutex) Ecrire (Buff[i], M) Lu[i]=false Up(mutex) Up (fullB) Up(fullC) } Processus B / C While(true){ Down(fullB) Lire (Buff[i], M) CalB Down (mutex) If(lu[i])
Supprimer (Buff[i])
Up (empty) Else
Lu[i]=true Up (mutex) }
Exercice 2
Les Moniteurs 1. Lecteurs-Rédacteurs Soit un fichier (SGBD, ...) manipulé par deux sortes de processus différents : 1. Les lecteurs qui consultent le fichier sans en modifier le contenu ; 2. Les rédacteurs qui peuvent en modifier le contenu. Soient nlect et nred le nombre de lecteurs et rédacteurs accédant au fichier à un instant donné. Ecrire le moniteur représentant les opérations de lecture et d’écriture. Moniteur lecteur_rédacteur lecteur_rédacteur : moniteur ; var ecr : booléen ; nl : entier ; c_ecr, c_lect : condition ; procédure début_lire ; début nl := nl + 1; si ecr alors
c_lect.attendre ; c_lect.signaler ; fin ; TD9 : Révision MME. LILIA SFAXI
2011/2012 3 procédure fin_lire ; début nl := nl - 1; si nl = 0 alors
c_ecr.signaler ; fin ; procédure début_écrire ; début si ecr ou nl > 0 alors
c_ecr.attendre ; ecr := vrai ; fin ; procédure fin_écrire ; début ecr := faux ; si nl > 0 alors
c_lect.signaler ; sinon
c_ecr.signaler ; fin ; début ecr := faux ; nl := 0 ; fin fin lecteur_rédacteur. 2. Trains Les règles de circulation sur la voie unique sont les suivantes : 1. Le tronçon ne doit jamais être emprunté simultanément par deux trains allant en sens inverse ; 2. Le tronçon peut être emprunté par un ou plusieurs trains allant tous dans le même sens ; 3. Il n’y a pas de sens de parcours prioritaire. Pour étudier la rentabilité de cette ligne, on désire effectuer une simulation du trafic, pour cela, on introduit deux classes de processus: les trains PONTOISE-ORLEANS et les trains ORLEANS-PONTOISE, qui se décrivent comme suit : TD9 : Révision MME. LILIA SFAXI
2011/2012 4 Tâche PONTOISE-ORLEANS :
Début Parcours (PONTOISE, VERSAILLES) ; Entrée_nord ; Parcours (VERSAILLES,CHEVREUSE) ; Sortie_sud ; Parcours (CHEVREUSE, ORLEANS) ; Fin Tâche ORLEANS-PONTOISE: Début Parcours (ORLEANS, CHEVREUSE) ; Entrée_sud ; Parcours (CHEVREUSE, VERSAILLES) ; Sortie_nord; Parcours (VERSAILLES, PONTOISE) ; Fin Question : Écrire un moniteur contenant les 4 points d’entrée Entrée_nord , Sortie_sud, Entrée_sud , Sortie_nord. Type Troncon = moniteur {Variables locales} Var NS, SN, AttNS, AttSN : entier ; Accès_Nord ; Accès_Sud : condition ; {points d’entrée} Procédure Entry Entrée_Nord ; Début Si (SN>0) alors AttNS=AttNS+1 ; Accès_Nord.Wait ; finsi ;
{blocage si trains dans l’autre sens} NS=NS+1 ; Si (AttNS>0) alors AttNS=AttNS-1 ; Accès_Nord.Signal ; finsi ;
{si des trains sont en attente, alors réveil du prochain train en attente ; le premier train en attente est réveillé par le dernier train SN} Fin Procédure Entry Sortie_Sud ; Début NS=NS-1 ; Si (NS==0) alors
{dernier train NS} Si (AttSN>0) alors AttSN = AttSN -1 ; Accès_Sud.Signal ; {si des trains SN sont en attente, alors réveil du premier train} TD9 : Révision MME. LILIA SFAXI
2011/2012 5 finsi ; finsi ; Fin Procédure Entry Entrée_Sud ; Début Si (NS>0) alors AttSN=AttSN+1 ; Accès_Sud.Wait ; finsi ;
{blocage si trains dans l’autre sens} SN=SN+1 ; Si (AttSN>0) alors AttSN=AttSN-1 ; Accès_Sud.Signal ; finsi ;
{si des trains sont en attente, alors réveil du prochain train en attente ; le premier train en attente est réveillé par le dernier train NS} Fin Procédure Entry Sortie_Nord ; Début SN=SN-1 ; Si (SN==0) alors {dernier train SN} Si AttNS>0 alors AttNS = AttNS -1 ; Accès_Nord.Signal ; {si des trains NS sont en attente, alors réveil du premier train } finsi ; finsi ; Fin Début {initialisations des variables locales} NS=0; SN=0 ; AttNS=0 ; AttSN=0 ; Fin
