On Mon, May 2, 2016 at 6:33 PM Teodor Ciuraru via so <[email protected]> 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
_______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
