Vous êtes sur la page 1sur 4

Module FI-Info 1.

2 Architecture des Systmes informatiques Anne 2014-2015

TD2 : Gestion de ressources non partageables


Rsum: Cette sance de TD a pour objectifs dune part dillustrer partir dexemples simples les diffrents algorithmes
dordonnancement vus en cours et dautre part de mettre en uvre une application lmentaire illustrant la gestion dune
ressource non partageable systme dexploitation Windows.
I- RAPPELS DE COURS
Les tches en activit dans un systme peuvent tre en concurrence pour lutilisation de ressources non partageables
physiques (imprimantes, fichiers) ou logiques (mmoire: donnes globales du systme dexploitation, zone de mmoire
partage entre plusieurs threads).
Notion de ressource non partageable :
- Une seule tche peut y avoir accs un instant donn.
- La ressource est nouveau disponible quand lexploitation par la tche est termine.
Notion dexclusion mutuelle :
- Situation o plusieurs tches souhaitent accder une mme ressource non partageable.
- Une seule tche doit alors tre autorise accder la ressource et les autres tches doivent tre provisoirement
exclues.
- Le systme dexploitation doit mettre disposition des applications des mcanismes et outils permettant
dintervenir au niveau de lordonnancement des tches pour grer ce type de situation.
Notion de section critique :
- Partie dune tche qui correspond la phase daccs une ressource non partageable.
Outils associs au mcanisme dexclusion mutuelle :
Masquage des interruptions :
- La premire tche accdant la ressource non partageable bloque la prise en charge des interruptions par le
processeur (interruptions masquables).
- Dans le cas dun ordonnancement de type premptif, lhorloge systme est alors neutralise et aucune
commutation de tche ne peut avoir lieu.
Utilisation dun verrou :
- Variable binaire lmentaire associe la ressource non partageable.
- La valeur de cette variable indique la disponibilit de la ressource.
- Un test implant en dbut de chaque section critique.
- Si la ressource est disponible, modification de ltat du verrou et excution de la section critique
- En fin de section critique modification du verrou pour librer la ressource.
- Dans les cas o le test pralable du verrou indique que la ressource est occupe, excution dune boucle logicielle
dattente de la libration de la ressource.
Utilisation dun smaphore :
- Une variable entire S
- Une file dattente F(S) de type FIFO contenant des descripteurs de tches
- Deux procdures spcifiques pour la gestion dun smaphore : WAIT(S) et SIGNAL(S)
- La variable S doit tre initialise une valeur positive.
- Un smaphore est associ chaque ressource non partageable
Procdures de gestion dun smaphore :
WAIT(S)
S=S1
Si S < 0 alors
Stocker le descripteur de la tche
appelante dans la file F(S)
Suspendre la tche appelante:
passage ltat attente (arrt du programme
en cours)
Finsi
Poursuite du programme : entre dans la section
critique

SIGNAL(S)
S = S +1
Si S >= 0 alors
Extraire le descripteur situ en sortie de F(S) et passage
ltat prt de la tache correspondante
Finsi
Poursuite du programme : sortie de la section critique

Module FI-Info 1.2 Architecture des Systmes informatiques Anne 2014-2015

La section critique doit donc tre encadre par lappel de la fonction WAIT en dbut de section et de la fonction SIGNAL
en fin de section :
II- EXERCICE 1 :

Soit un systme ordonnancement premptif sans priorit (horloge systme T=10ms). Trois tches T1, T2, T3
sont en activit, les tches T1 et T2 accdent une ressource non partageable R :
T1
T2
T3

Date de dmarrage
de la tche (ms)
0
5
8

dure dexcution (ms)

Priode accs R

50
50
60

Entre 15me et 25me ms


Entre 5me et 25me ms

Si une tche est bloque au cours dune tranche de temps par un processus dexclusion le systme
dexploitation provoque alors une attente jusqu la fin de la tranche de temps.
Reprsentez le chronogramme dexcution des diffrentes tches dans les cas suivants :
- Gestion de lexclusion mutuelle par blocage des interruptions
- Gestion de lexclusion mutuelle par un verrou
- Gestion de lexclusion mutuelle par un smaphore
III- EXERCICE 2 : gestion dune ressource non partageable sous windows

Mettre en uvre l'accs une ressource non partageable, partir du programme suivant bas sur une
application de type Console.
La Ressource Non Partageable sera modlise par une variable entire globale RNP.
// td2.cpp : gestion d'une ressource non partageable / question 1
//#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
// ressource non partageable reprsente par une variable globale RNP
int RNP ;
// fonction de temporisation
int tempo()
{ int j, k ;
for(j=0; j<1000000;j++) k=j+1;
return 0;
}
// fonction associe au thread_1
DWORD Fct_Thread_1(LPDWORD lp)
{ char c ;
int i, j ;
i=0;
do {//dbut section critique
printf("debut_acces RNP Thread1\n") ;
RNP = 0 ; j = 0 ;
do { printf("RNP%d ",RNP) ; tempo() ; j++ ; RNP++ ; } while (j<10) ;
printf("\nfin_acces RNP Thread1\n\n") ;
// fin section critique
i++;
} while (i<10) ;
c = (char)getchar() ;

Module FI-Info 1.2 Architecture des Systmes informatiques Anne 2014-2015

return 0 ;
}

DWORD main(void)
{ char c ;
int i,j ;
DWORD dwthreadid, dwthrdparam ;
HANDLE hthread_1 ;
// cration du thread_1
hthread_1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Fct_Thread_1,
&dwthrdparam,0, &dwthreadid) ;
// traitement du thread principal associ la fonction main (Main_Thread)
i=0;
do {//dbut section critique
printf("debut_acces RNP Main_Thread\n") ;
RNP = 0 ; j = 0 ;
do { printf("RNP%d ",RNP) ; tempo() ; j++ ; RNP++ ; } while (j<10) ;
printf("\nfin_acces RNP Main_Thread\n\n") ;
// fin section critique
i++;
} while (i<10) ;
c = (char)getchar() ;
}

1) Mise en route
A partir du programme prcdent visualiser les conflits d'utilisation de la ressource non partageable.
Quel devrait tre le bon rsultat ?
2) Gestion par blocage des autres tches
Agir sur la priorit de la tche au moment de l'utilisation de la ressource non partageable pour lui donner tous les
droits relativement l'accs CPU.
Est-ce que cela marche tous les coups ?
Quel est le problme sur un accs relativement long sur la ressource ?
3) Cration d'un verrou logiciel.
Dfinir une variable verrou pour empcher l'accs simultan la ressource non partageable.

Comment marche la rpartition des accs ?


Comment retrouver un fonctionnement quasi-altern ?
Visualiser lcran les phases dattente gnres par le verrou ?
Est-ce que cette mthode est exempte d'autres problmes ? Comment les faire apparatre ?

4) Utilisation d'un smaphore Windows (Smaphore).


Mettre en uvre un smaphore pour protger l'accs la ressource non partageable.

Module FI-Info 1.2 Architecture des Systmes informatiques Anne 2014-2015

Utilisation de smaphores avec lAPI Win32


1 Cration et initialisation dun smaphore
Lopration E0(S, V) est ralise grce lappel CreateSemaphore :
if (!(hS=CreateSemaphore(NULL,V,Valmax,S)))
{
cout<<erreur: echec creation semaphore \n ;
e x i t (1) ;
}
La fonction CreateSemaphore revoie 0 si le smaphore ne peut tre cr. Sinon, elle renvoie en entier appel handle
permettant didentifier le smaphore cr.
Les deuximes et troisimes paramtres dsignent respectivement la valeur dinitialisation V et la valeur maximale
Valmax du smaphore crer. Le dernier paramtre est une chane de caractres (diffrente pour chaque smaphore
crer, valeur NULL pour un smaphore nom nomm).

2 Prise dun smaphore (fonction wait(S))


Lopration P(S) est ralise grce lappel WaitForSingleObject :
if (WaitForSingleObject (hS, INFINITE)==WAIT FAILED)
{
cout<<erreur: echec attente sur semaphore \n ;
exit (2) ;
}
La fonction WaitForSingleObject est une fonction gnrale qui permet lattente dun vnement : ici la libration dun
smaphore, dans le TD prcdent la fin dun thread. Elle renvoie WAIT FAILED en cas dchec.

3 Libration dun smaphore (fonction signal(S))


Lopration V(S) est ralise grce lappel ReleaseSemaphore :
if (!(ReleaseSemaphore(hS,1,NULL)))
{
cout<<erreur: echec liberation semaphore \n ;
exit (3) ;
}
La fonction CreateSemaphore renvoie 0 si le smaphore na pu tre libr.