|
Fire de executie. Sincronizare
Links / Legaturi utile
Semafoare POSIX
Mersul lucrarii
- Cititi "Road Map Through Nachos", cap. 3
- Cititi ../doc/thread.ps
- Cititi fisierele sursa threads/synch.h si synch.cc
- Cititi fisierele sursa threads/main.cc si threadtest.cc
- Testati executia cu diferite optiuni de debugging (vezi utility.h)
./nachos -d st
- Implementati clasele Lock si Condition. Cititi threads/list.h, list.cc, synchlist.h, synchlist.cc pentru un exemplu de utilizare a lacatelor si variabilelor de conditie.
- Implementati, in loc de testul implicit (SimpleThread), problema "Producatori/Consumatori" (sau "Bounded Buffer"), si testati-o lansand, in thread-uri diferite, mai multi producatori si consumatori.
Observatii
- Este utila consultarea fisierelor threads/thread.h, thread.cc, scheduler.h, scheduler.cc cat si a altor fisiere din sursele Nachos
- Analizati cu atentie implementarea clasei Semaphore. In implementarea claselor Lock si Condition, puteti folosi si semafoare!
- Nu trebuie sa modificati interfata claselor Lock si Condition (metodele publice), dar puteti adauga, la nevoie, membri privati.
- Folositi lacate si variabile de conditie in rezolvarea problemei BoundedBuffer, pentru a le testa. Vor fi necesare si in alte situatii.
- Testati-va implementarea utilizand parametrul '-rs NN', cu diverse valori pentru 'NN'. Puneti yield()-uri in diverse puncte ale producatorului si consumatorului.
- Metoda Lock::Release() poate fi invocata doar de thread-ul care detine lacatul (a invocat Lock::Acquire() in prealabil). In caz contrar semnalati eroare.
- Variabila globala currentThread este un pointer la firul care tocmai se executa (este in starea RUNNING).
Continutul proiectului
Proiectul consta in implementarea claselor Lock si Condition.
In plus veti implementa, utilizind firele de executie din nucleul
Nachos, 1-2 probleme de sincronizare:
- Bounded buffer -- sau producatori/consumatori
-
Problema nr. 11 din
thread.ps
-
Problema nr. 13 din
thread.ps
|