Documente Academic
Documente Profesional
Documente Cultură
5
Sincronizarea proceselor
25 martie 2009
Suport curs 5
OSC
Capitolul 7 - Deadlocks
MOS
Capitolul 3 - Deadlocks
Capitolele 1, 2, 3
25.03.2009 2
Cuprins
Problematica IPC
Deadlock-uri
25.03.2009 3
Comunicarea între procese (IPC)
Colaborare
schimb de informaie
partajarea informaiei
Concuren /competiie
rezultate predictibile
serializarea accesului
Coordonare
sincronizare
25.03.2009 4
Acces exclusiv i sincronizare
P1 folosete R1 i produce R2
R2
P2 solicit
25.03.2009 5
Acces concurent
Situaie
a = 0 /* initializare */
dou instane de execuie ruleaz
if (a == 0)
a++;
Ce valoare va avea a dup execuie?
25.03.2009 6
Condiii de curs (race conditions)
proces 1 proces 2
a = 0
if (a == 0)
if (a == 0)
a = 1 a++;
a++; a = 2
25.03.2009 7
Operaii atomice
Secven posibil:
25.03.2009 8
Regiuni critice
Critical sections
Exemple
a++
25.03.2009 9
Regiuni critice (2)
25.03.2009 10
Excludere mutual
Implementare busy-waiting
Implementare blocant
procesul care ateapt s intre în regiunea critic este trecut în starea
BLOCKED
25.03.2009 11
Dezactivarea întreruperilor
Avantaje/dezavantaje
simplitate
relativ lent
funcioneaz doar pe sisteme uniprocesor
poate fi folosit doar din cod kernel
25.03.2009 12
Kernel preemptiv/non-preemptiv
procesul care ruleaz cod kernel nu poate fi preemptat decât la ieirea din
kernel
mai mare
laten
25.03.2009 13
Lock-uri
25.03.2009 14
Alternare strict
25.03.2009 15
Algoritmul lui Peterson
int turn;
int interested[2];
interested[process] = 1;
turn = process;
while (turn == process && interested[other] == 1)
continue;
}
25.03.2009 16
Hardware de sincronizare
25.03.2009 17
Hardware de sincronizare (2)
do {
while (TestAndSetLock(&lock))
Continue;
/* regiune critica */
lock = FALSE;
/* regiune non-critica */
} while (TRUE);
25.03.2009 18
Spinlock-uri
enter_region: exit_region:
TSL RX, LOCK MOV LOCK, 0
CMP RX, 0
JNE enter_region
cu acces exclusiv la magistral
25.03.2009 19
Excludere mutual prin blocare
De ce nu busy-waiting?
25.03.2009 20
Problema produc tor-consumator
25.03.2009 21
Problema produc tor-consumator (sleep & wakeup)
{ {
condiie de curs :
se pierde wake-up-ul
25.03.2009 22
Semafoare
Dijkstra 1965
25.03.2009 23
Problema produc tor-consumator (semafoare)
semaphore to_full = N;
semaphore to_empty = 0;
{ {
} }
25.03.2009 24
Mutex-uri
Semafoare binare
Dou stri:
locked
unlocked
P(mutex);
/* regiune critica */
V(mutex)
25.03.2009 25
P-C (semafoare i mutex-uri)
semaphore to_full = N;
semaphore to_empty = 0;
semaphore mutex = 1;
25.03.2009 26
Implementare posibil mutex
mutex_lock: mutex_unlock:
TSL RX, MUTEX MOV MUTEX, 0
CMP RX, 0 ...
JZE ok
CALL sched_yield
JMP mutex_lock
ok:
25.03.2009 27
Implementare semafor
typedef struct {
int value;
struct process *list;
}
void down(semaphore *s)
{
s->value--;
if (s->value < 0) {
add(s->list, current_process);
sleep();
}
}
void up(semaphore *s)
{
if (s->value < 0) {
process = remove_process(s->list);
wakeup(process);
}
s->value++;
}
25.03.2009 28
Probleme de sincronizare
Deadlock
Starvation
ateptare nedefinit
priorit i statice
25.03.2009 29
Bariere
o matrice conine valori iniiale i mai multe prelucr ri succesive care
trebuie aplicate
rendezvous
25.03.2009 30
Bariere (2)
25.03.2009 31
Barier (3)
#define N_PROCS 10
down(&barr_sem);
}
25.03.2009 32
Barier reentrant
#define N_PROCS 10
size_t count = 0;
semaphore mutex = 1;
semaphore barr_sem = 0; Care este problema?
up(&mutex)
down(&mutex);
count++; dup
if (count == N_PROCS) {
up(&barr_sem, N_PROCS); Primul proces din noua
}
count = 0;
rund trece de barier
up(&mutex);
down(&barr_sem);
}
25.03.2009 33
Barier reentrant (2)
25.03.2009 34
Problema cititori-scriitori
Constrângerile de sincronizare
la un moment dat
oricâi cititori pot fi în regiunea critic
25.03.2009 35
Problema cititori-scriitori (2)
do {
down(&mutex);
read_count++;
do { if (read_count == 1)
down(&excl);
down(&excl);
up(&mutex);
... ...
/* do writing */ /* do reading */
... ...
down(&mutex)
up(&excl);
read_count--;
} while (TRUE);
if (read_count == 0)
up(&excl);
up(&mutex);
} while (TRUE);
25.03.2009 36
Problema cititori-scriitori (3)
Încercai
25.03.2009 37
P-C (transfer de mesaje)
25.03.2009 38
Deadlock - modelare
poate fi furnizat imediat sau trebuie s atepte eliberarea resursei de alt proces
malloc/open
folosire (use)
eliberare (release)
free/close
25.03.2009 39
Deadlock condiii necesare
Excludere mutual
o resurs este deinut în mod non-partajat
Deine i ateapt (hold & wait)
un proces deine o resurs i ateapt obinerea altor resurse deinute de
alte procese
F r preemptare
resursele nu pot fi preemptate un proces elibereaz o resurs doar
voluntar
25.03.2009 40
Graful de alocare a resurselor
Nodurile reprezint
resurse p trate
procese cercuri
Arcele reprezint
resurs deinut arc de la resurs la proces
resurs dorit arc de la proces la resurs
Se poate demonstra c
dac nu exist ciclu în graf, atunci nu exist deadlock
dac exist ciclu în graf, este posibil s existe deadlock
25.03.2009 41
Graful de alocare a resurselor (2)
25.03.2009 42
Detectare deadlock
25.03.2009 43
Evitare deadlock
Secven sigur
o secven de proces <P1, P2, ..., Pn>
solicitrile lui Pi pot fi satisfcute cu resursele actuale libere sau cele
deinute de Pj (j < i)
25.03.2009 44
Prevenire deadlock
Excludere mutual
greu de eliminat
25.03.2009 45
Prevenire deadlock (2)
No preemption
Ateptare circular
ordonare a resurselor (R1 < R2 < ... < Rn)
25.03.2009 46
Recuperare din deadlock
Terminarea procesului
Preemptarea resurselor
25.03.2009 47
Cuvinte cheie
productor-consumator
sincronizare
TSL
deadlock
spinlock
graf de alocare a
resurselor
semafor
prevenire/evitare
mutex
deadlock
25.03.2009 48
Exerciiu 1
25.03.2009 49
Exerciiu 2
operaia P pe un semafor
operaia V pe un semafor
25.03.2009 50
Întreb ri
?
25.03.2009 51