Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Comunicarea intre procese - excluderea mutuala

hardware



+ Font mai mare | - Font mai mic



Comunicarea intre procese - excluderea mutuala.

Excluderea mutuala prin asteptare ocupata



Excluderea mutuala: atat timp cat un proces este ocupat cu actualizarea memoriei partajate in propria regiune critica, nici un alt proces nu intra in regiunea

critica.

Metode de obTinere a excluderii mutuale:

Dezactivarea intreruperilor

Fiecare proces dezactiveaza toate intreruperile imediat dupa ce a intrat in regiunea critica si le reactiveaza imediat inainte de parasirea regiunii critice.

Este o tehnica utila pentru nucleu, nu si pentru procesele utilizator.

Variabila incuietoare (lock)

Se considera o variabila lock care este iniTial 0.

Cand un proces vrea sa intre intr-o regiune critica, testeaza mai intai variabila lock.

Daca aceasta este 0, procesul o seteaza la valoarea 1 si intra in regiunea critica.

Daca variabila lock este 1, in regiunea critica se afla un alt proces.

Dezavantajul acestei metode consta din situaTiile descrise si in exemplul cozii la tiparire.

Presupunem ca exista doua procese A si B.

A citeste variabila lock si observa ca este 0.

Inainte ca A sa modifice valoarea variabilei partajate lock, A este suspendat de planificatorul de procese.

Procesul B isi incepe execuTia.

Procesul B citeste variabila lock, o gaseste 0, intra in regiunea critica.

B este intrerupt de planificatorul de procese.

A isi continua execuTia.

A stie ca lock este 0, intra in regiunea critica.

Procese A si B se afla simultan in regiunea lor critica.

Alternarea stricta

Exista o variabila turn - rand, care gestioneaza ordinea intrarii in secTiunea critica.

IniTial procesul A inspecteaza variabila turn, observa ca este 0 si intra in regiunea critica.

Procesul B gaseste variabila turn tot 0 si sta intr-o bucla continua testand turn ca sa vada daca isi schimba valoarea in 1.

Testarea continua a unei variabile pentru a vedea daca i se schimba valoarea se numeste asteptare ocupata (busy waiting).

Iroseste timpul procesorului.

Este folosita doar cand exista o probabilitate mare ca asteptarea ocupata sa fie scurta.

Nu este o idee buna in cazul in care un proces este mult mai lent decat celalalt.

Presupunem ca procesului A ii corespunde valoarea O a variabilei turn, iar procesului B valoarea 1.

Cand A isi paraseste regiunea critica seteaza variabila turn la valoarea 1.

B intra si iese repede din regiunea critica si seteaza turn la valoarea 0.

A si B sunt in afara regiunilor critice cu valoarea lui turn egala cu 0.

Daca B este mai rapid decat A si vrea sa intre inaintea acestuia in regiunea critica, el ramane intro asteptare ocupata pana cand A modifica valoarea

lui turn.

Nu este respectata condiTia 3 pentru ca un proces aflat intr-o regiune care nu este critica (procesul A) blocheaza un alt proces (procesul B).

InstrucTiunea TSL

Multe calculatoare (mai ales cele care au mai multe procesoare) au o instrucTiune hardware TSL (Test and Set LOCK - Testeaza si seteaza variabila LOCK):TSL RX,LOCK

Se citeste conTinutul variabilei LOCK in registrul RX si apoi salveaza o valoare diferita de 0 la adresa de memorie a variabilei LOCK.

OperaTiile de citire si memorare a valorii variabilei LOCK sunt indivizibile.

Procesorul care executa o operaTie TSL inchide magistrala de memorie pentru a impiedica alte procesoare sa foloseasca memoria pana nu se termina operaTia TSL.

LOCK este o variabila partajata care atunci cand este 0 inseamna ca nu se afla nici un proces in regiunea critica, daca este diferita de 0 inseamna ca un proces se afla deja in regiunea critica.

SoluTia la problema regiunii critice:

Inainte de a intra intr-o regiune critica un proces apeleaza procedura enter_region.

In enter_region se face cu ajutorul instrucTiunii TSL testarea si eventual setarea variabilei LOCK.

Pentru LOCK=0 procesul intra in regiunea critica si folosind instrucTiunea TSL seteaza variabila LOCK la o valoare diferita de 0.

Pentru LOCK≠0 enter_region efectueaza asteptare ocupata pana cand LOCK devine 0.

Ca sa iasa din regiunea critica procesul apeleaza procedura leave_region prin care se reseteaza LOCK inapoi la 0.

Toate aceste solutii au problema asteptarii ocupate care iroseste timpul procesorului.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1199
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved