Documente Academic
Documente Profesional
Documente Cultură
Două procese
care doresc
partajarea
acelorași
resurse în
același timp
Situațiile în care mai multe procese citesc sau scriu pe un set de date partajate și
rezultatul final depinde de care proces rulează și când anume, se numesc
condiții de competiție.
2.1. Excluziune mutuală utilizând
secțiuni critice
Zona în care două procese accesează memoria partajată de
ambele se numește secțiune critică. Dacă reușim ca două
procese să nu se afle în secțiunea critică simultan putem evita
competiția în sine.
Condițiile obținerii exclusivității mutuale sunt:
1. Două procese nu se pot afla simultan în secțiunea critică
2. Nu se fac presupuneri referitoare la numărul și viteza UCP
3. Nici un proces care rulează înafara propriei sale secțiuni
critice nu poate bloca un alt proces
4. Nu se poate bloca la infinit, intrarea unui proces în secțiunea
sa critică
2.2. Excluziune mutuală utilizând
secțiuni critice
3. Rezolvarea problemei
Soluțiile existente sunt:
• Excluziune mutuală utilizând așteptarea ocupată
(busy waiting)
• Activarea și dezactivarea proceselor (Sleep and
wakeup)
• Semafoare
• Mutex-uri
• Monitoare
• Comunicarea prin mesaje
• Bariere
3.1. Excluziune mutuală utilizând
așteptarea ocupată (busy waiting)
Excluziune mutuală utilizând busy waiting se
poate realiza prin:
• Dezactivarea întreruperilor
• Utilizarea unor biți de atenție
• Alternarea strictă a execuției proceselor
• Soluția lui Peterson
• Utilizarea instrucțiunii TSL.
3.1.1. Alternarea strictă a execuției
proceselor
Proces 0. Proces 1.
turn este practic un bit de atenție care utilizează busy
waiting sau spinlock.
3.1.2.Soluția lui Peterson
3.1.3. Utilizarea instrucțiunii TSL
3.2. Sleep and Wakeup(1)
Caz Count=N?;TRUE;
III P/S
Legendă
N=nr max de sloturi
Count=0?;TRUE;
Caz C/S Count=nr de sloturi
IV ocupate
P+ producătorul adaugă
C- consumatorul extrage
S sleep
W wakeup
3.2. Sleep and
Starea inițială: Count=0, buffer gol
Wakeup(2)
1. C citește Count=0
2. UCP întrerupe execuția lui C; d.p.d.v logic C/W
3. Count<>N?;TRUE; Count=Count+
P+ 1=1
4. Count=1 => anterior Count=0; P DECIDE C/S => SEMNAL NOU
ACTIVARE C
5. D.p.d.v. logic C/W => SE PIERDE SEMNALUL NOU DE ACTIVARE A
LUI C
Count=0?;TRUE;
6.
7. UCP red ă controlul lui C; C/S
8. Count<>N?;TRUE; Count=Count+
P+ 1=2
9. Count<>N?;TRUE; Count=Count+
P+ 1=3
10. Count=N?;TRUE;
P/S
3.3. Semafor
Starea inițială: Count=0, buffer gol
1. C citește Count=0
2. UCP întrerupe execuția lui C; d.p.d.v logic C/W
3. Count<>N?;TRUE; Count=Count+
P+ 1=1
4. Count=1 => anterior Count=0; P DECIDE C/S => SEMNAL NOU
ACTIVARE C
5. Realizăm operația de up pe semafor ; SEMF=SEMF+1(salvăm wakeup-
ul)
Count=0?;TRUE;
6.
7. UCP red ă controlul lui C; C/S
.....
.10. Count=N?;TRUE;
P/S
11.SISTEMUL CONSTATĂ C/S ȘI P/S. Sistemul selectează C pentru
execuție deoarece este salvat un wakeup pentru acesta.
12.SEMF=1<>0=> se realizează operația de down pe semafor =>
SEMF=SEMF-1=0
Count<>0?;TRUE; Count=Count-
13. C- 1=2
3.4. Mutex
• Mutex-ul este o versiune simplificată a unui
semafor
• Mutex-ul este o variabilă care poate avea două
stări: blocat și deblocat (1/0)
• Dacă un thread dorește accesarea secțiunii critice
apelează mutex_lock. Dacă mutex-ul este deblocat
thread-ul accesează secțiunea critică, altfel acesta
va fi blocat până când threadul din secțiunea
critică apelează mutex_unlock.
• Sunt ușor de implementat cu ajutorul instucțiunii
TSL.
3.5. Monitoare
Exemplu de monitor
3.6. Comunicarea prin mesaje
Send(destinație, &mesaj) Receive(sursă, &mesaj)
Problema producător-consumator:
• Presupunem că toate mesajele au aceiași dimensiune și că toate
mesajele transmise care nu au fost încă recepționate sunt colectate
într-un buffer de către SO.Numărul N de mesaje utilizate este analog
celor N sloturi de memorie ale bufferului.
• Cum funcționează?
– Procesul C transmite N mesaje goale procesului P.
– Procesul P preia un mesaj gol și transmite un mesaj complet
procesului C.
• Dacă unul din procese este mai rapid se formează o coadă de mesaje;
pentru ca adresarea mesajului să se realizeze mai ușor(nu prin
intermediul procesului) s-a propus utilizarea unei noi structuri de date
numită mailbox care acționează ca un buffer încărcat cu
mesaje.Astfel parametrii de adresare pentru send și receive nu vor
mai fi procesele P și C ci cutiile lor poștale.
3.7. Bariere
Probleme IPC clasice
• Dining philosophers
• Readers and writers
• Sleeping Barber