[so] Nelamuriri teste tema4

Adrian Stanciu adrian.stanciu.pub at gmail.com
Sun May 17 22:24:59 EEST 2015


2015-05-17 21:59 GMT+03:00 Alin Radulescu via so <so at cursuri.cs.pub.ro>:
> Testul 15 are urmatorul flow:
> Create thread initial ( 0 ): cuanta 1
> so_end()
>
> In paralel cu so_end (care ramane blocat pana cand termina toate
> threadurile):
>
> Threadul 0 este creat. (cuanta 1)
> Threadul 0 creaza threadul 1 cu prioritate 4, care il preempteaza pe t0.
>
>      Threadul 1 creaza threadul 2 (cu prioritate 3, este plasat in 'ready')
>      Threadul 1 observa ca i-a ajuns la cuanta 0 si cedeaza CPU threadului
> 2.

Nu se întâmplă asta pentru că thread-ul 1 are prioritate mai mare
decât thread-ul 2. Din enunț: "dacă un thread este preemptat și revine
în starea READY (ex: cazul în care îi expiră cuanta), iar în sistem nu
mai există un alt thread READY de prioritate mai mare sau egală cu al
lui, va fi replanificat același thread."

>
>             Threadul 2 verifica ca inaintea sa a fost threadul 1, si noteaza
> faptul ca si el a prins timp pe procesor (folosind define-ul
> SO_FAIL_IF_NOT_PRIO). Aceasta actiune nu consuma cuanta, asa ca merge mai
> departe. (cuanta = 1)
>             Threadul 2 creaza threadul 3 (cu prioritate 1, este plasat in
> 'ready')
>             Threadul 2 observa ca i-a ajuns cuanta la 0 si cedeaza CPU
> threadului 1
>
>      Threadul 1 acum verifica ca ultima prioritate setata a fost 4, dar
> threadul 2 a prins timp pe procesor si astfel a setat prioritatea '3'.
>
>
> Acest comportament nu s-ar fi reprodus daca threadurile ar fi avut cuanta
> cel putin 2, sau daca un thread ar continua sa incerce sa execute sarcini
> care nu consuma cuanta atunci cand are cuanta 0.
>
>
> Aici este de vina checkerul, sau trebuie sa modific programul atfel:
> - un thread sa execute sarcini in continu, inclusiv cand are cuanta 0
> - daca o sarcina de executat este consumatoare de cuanta, iar threadul are
> 0, atunci cedeaza CPU
>
>
> Testul 17:
> Se face fork primului thread
> Handler: asteapta dupa evenimentul X, signal evenimentul X
> (cum va reusi sa dea el signal cand defapt asteapta evenimentul, si astfel
> nu mai prinde timp pe procesor)

Thread-ul nu așteaptă, dispozitivul IO fiind invalid. Se testează un
caz de eroare pentru so_wait().

>
> Testul 19:
> Se face fork primului thread,
> Handler: asteapta evenimentul SO_DEV3, dupa care face fork unor threaduri
> care se presupune ca eventual ii vor da signal pe acest eveniment. Threadul
> sta blocat in wait.
>

La fel, thread-ul nu așteaptă, dispozitivul IO fiind invalid.


Adrian


More information about the so mailing list