CATEGORII DOCUMENTE |
Comunicarea intre procese - semafoare binare - mutex, monitoare.
Semafoare binare - mutex
mutex - versiune simplificata de semafor, variabila care se poate afla in doua stari posibile: inchis sau deschis.
Se mai numesc semafoare binare.
Semafoarele mutex sunt folosite pentru a rezolva excluderea mutuala asupra unei resurse partajate sau a unei secvenTe de cod. Adica se asigura accesul unui singur proces in regiunea lui critica la un moment dat.
Sunt utile in pachetele de fire de execuTie implementate in spaTiu utilizator.
Este suficient un bit pentru memorarea lor, dar adesea se foloseste un nr. intreg.
Se folosesc doua proceduri:
mutex_lock: cand un fir de execuTie (proces) trebuie sa intre in regiunea critica se apeleaza mutex_lock.
. Daca mutex-ul este deschis, firul de execuTie apelant intra in regiunea critica.
. Daca mutex-ul este inchis, firul de execuTie apelant este suspendat pana ce firul de execuTie aflat in regiunea critica a iesit si a apelat mutex_unlock.
mutex_unlock.
Monitoare
Primitive de sincronizare la nivel inalt propuse de Hoare (1974) si Hansen (1975)
Colectie de proceduri, variabile si structuri de date care sunt grupate intr-un modul special
Procesele pot apela procedurile din monitor oricand, dar nu pot accesa direct structurile de date interne monitorului prin proceduri din afara monitorului
Doar un singur proces poate fi activ intr-un monitor la un moment dat. In momentul in care un proces apeleaza o procedura dintr-un monitor, primele instrucTiuni ale procedurii verifica daca exista un alt proces activ in monitor. Daca da, procesul curent este suspendat.
Prin transformarea tuturor regiunilor critice in proceduri de monitor, nu vor exista procese care sa-si execute regiunile critice in acelasi timp.
Implementarea excluderii mutuale la intrarea intr-un monitor se afla la latitudinea compilatorului si in mod obisnuit se realizeaza printr-un mutex sau semafor binar
Cum sunt programate blocajele atunci cand un proces nu poate continua?
Se folosesc variabilele de condiTie impreuna cu doua operaTii: wait si signal
Cand o procedura din monitor observa ca nu mai poate continua (de ex. producatorul observa ca zona full este plina), se efectueaza o operaTie wait asupra unei variabile de condiTie (de ex. full). Astfel se blocheaza procesul apelant si i se permite unui alt proces sa intre in monitor.
Procesul nou intrat (de ex. consumatorul) isi poate trezi partenerul care "doarme" printr-o operaTie signal asupra variabilei la care asteapta partenerul
Trebuie stabilita o regula pentru efectul operaTiei signal pentru a evita situaTia in care doua procese ruleaza in monitor (de ex. signal sa fie ultima
operaTie care se face in monitor)
Variabilele de condiTie nu sunt contoare, ele nu acumuleaza semnalizari pentru utilizari viitoare asa cum fac semafoarele.
OperaTia wait trebuie sa ajunga inaintea operaTiei signal.
OperaTiile wait si signal sunt asemanatoare operaTiilor sleep si wakeup dar cu o diferenTa importanta: sleep si wakeup nu funcTionau pentru ca in timp ce un proces incerca sa se blocheze, celalat incerca sa se trezeasca.
Excluderea mutuala automata asupra procedurilor monitorului asigura faptul ca asa ceva nu se intampla
Monitoarele nu pot fi scrise in orice limbaj de programare. Compilatorul trebuie sa recunoasca si sa asigure excluderea mutuala.
C si Pascal nu au monitoare. Java are.
1. Excluderea mutuala
Dezactivarea intreruperilor
Variabila incuietoare (lock)
Alternarea stricta
InstrucTiunea TSL
2. Folosirea apelurilor de sistem sleep si wakeup
3. Semafoare
4. Mutex
5. Monitoare
6. Transferul de mesaje
7. Bariere
AplicaTii: problema producator - consumator
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2068
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved