[so] [SO] [Tema4][General] Neclaritati tema

Razvan Crainea razvan.crainea at gmail.com
Tue May 3 11:56:45 EEST 2016


On Mon, May 2, 2016 at 6:33 PM Teodor Ciuraru via so <so at cursuri.cs.pub.ro>
wrote:

> Salut!
>
> Nu am înțeles ciclul de viață al unui thread. Am următoarele nelămuriri:
>
> 1. Conform modelului de implementare, creez thread-ul, aștept să fie
> planificat (să intre în starea READY/RUN), îl planific în start_thread(),
> îî apelez handler-ul, anunț că a fost planificat și îi întorc id-ul?
>
În afirmația de mai sus sunt două greșeli:
a. "aștept să fie planificat (să intre în starea READY/RUN)" nu este
corect; doar thread-urile în starea RUN au fost planificate, un thread în
starea READY urmează să fie planificat. Funcția so_fork() trebuie să se
asigure că thread-ul a fost creat și să-i returneze ID-ul, chiar dacă nu a
fost niciodată planificat.
b. funcția start_thread() nu trebuie să anunțe pe nimeni dacă thread-ul a
fost sau nu planificat.


>
> 2. La pasul 3 din modelul de implementare, funcția so_fork(), "să intre în
> starea READY/RUN”, o să poată intra în RUNNING vreodată, din moment ce va
> trebui să treacă întotdeauna prin READY și va trebui să declanșăm
> incheierea funcției sau va trebui ca atunci când planific un thread ar
> trebui să îl trec direct în RUNNING dacă are prioritate, sărind peste READY
> ca să nu se întâmple această problemă?
>
Dacă conform algoritmului de planificare primul thread ar putea să ruleze
imediat, atunci nu mai are sens să-l pui în starea READY, ci direct în
RUNNING.

>
> 3. În start_thread(), “așteaptă să fie planificat” înseamnă “planifică-l”
> sau trebuie să aștept după o condiție?
>
Thread-ul trebuie să se blocheze până are dreptul să ruleze. Cum îl
blochezi, depinde de implementarea ta; ideal ar fi printr-o variabilă de
condiție.

>
> 4. Pasul din start_thread(), “încheiere thread” se referă la sițuatia când
> thread-ul a ajuns să nu mai aibă instrucțiuni de executat?
>
Da.

>
> 5. Contorizând în fiecare funcție timpul virtual consumat de thread pe
> procesor, trebuie să verific în fiecare dintre acestea dacă i-a expirat
> cuanta sau pot creea cumva un mecanism de tip “trigger” când a depășit
> timpul maxim alocat?
>
Aici depinde din nou de implementarea ta: cred că este mai simplu să
verifici dacă i-a expirat cuanta (sau cineva cu prioritate mai mare ar
trebui să ruleze), decât să creezi mecanismul de "trigger". Dar, din nou,
poți face cum vrei tu, important este ca thread-urile să ruleze corect dpdv
al algoritmului de planificare.

Numai bine,
Răzvan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20160503/17a694fc/attachment.html>


More information about the so mailing list