home 
news 
thread sync 
sync problems 
project intro 
assignment 1 
assignment 2 
assignment 3 
resources 
examples 
rules 
submit howto 
   
 

Fire de executie. Sincronizare

Links / Legaturi utile

Semafoare POSIX

Mersul lucrarii

  1. Cititi "Road Map Through Nachos", cap. 3
  2. Cititi ../doc/thread.ps
  3. Cititi fisierele sursa threads/synch.h si synch.cc
  4. Cititi fisierele sursa threads/main.cc si threadtest.cc
  5. Testati executia cu diferite optiuni de debugging (vezi utility.h)

    ./nachos -d st

  6. 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.
  7. 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:

  1. Bounded buffer -- sau producatori/consumatori
  2. Problema nr. 11 din thread.ps
  3. Problema nr. 13 din thread.ps