2012/3/23 Mirea Bogdan-Stefan <[email protected]>: > Andrei Draga <andreidraga@...> writes: > >> >> La slide-ul 25/44 scrie despre o implementare posibila a mutex-ului.Aceasta > este :"simpla si eficienta ( nu necesita trap in kernel daca regiunea critica > este libera )"La ce se refera acest cuvant "trap" ? >> > Trap este o intrerupere software. >
Întradevăr, trapul este o întrerupere software ce va fi tratată de kernel. Apelurile de sistem vor face și ele un trap, pentru a ajunge la implementarea lor din kernel. În exemplul din curs, în cazul în care nu poate obține lockul, procesul curent execută apelul de sistem sched_yield pentru a ceda procesorul astfel încât să nu aștepte blocant (busy waiting) eliberarea lockului. În general, un trap este destul de costisitor. Înainte să cedeze controlul kernelului, se face trecerea la stiva kernel și se salvează starea procesului curent (registre, flag-uri, etc). Apoi se execută partea de kernel, în cazul de față se sare la implementarea funcției sched_yield. La întoarcere (după sched_yield se va întoarce abia la replanificarea procesului) se restaurează starea procesului care își reia execuția de unde a rămas. -- Irina _______________________________________________ http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii
