Salut, Alex! On Tue, May 15, 2018 at 11:18 PM Alex Negura <alexd...@gmail.com> wrote:
> Salut, > > > > Nu am fost foarte clar cu intrebarea, asa ca o sa reformulez. > > > 1. Threadul principal din functia de test apeleaza so_fork(). > 2. In so_fork() se va crea un nou thread ce trebuie sa execute > handlerul asociat. > 3. Acel thread nou creat intra in starea ready si asteapta pana cand > este pus pe processor > 4. Intre timp, threadul principal din functia de test, si-a terminat > treaba, (aici sunt detalii > > de implementare si nu cred ca e ok sa le zic) si acesta va da return din > functia so_fork() si nu > > va astepta celelalte threaduri sa se creeze/termine executia. > > 1. Va reveni in functia de test si va face un sched_yield() (care la > mine nu face absolut nimic). > > Mentionez ca inainte de a face sched_yeld() un alt thread este pornit deja > din cadrul temei > > si ar trebui sa ii ia locul pe procesorul fizic, acest lucru impiedicand > continuarea functiei de test. > > 1. Apoi imediat dupa functia sched_yield() se apeleaza so_end(). > So_end() se apeleaza pentru > > procesul current, nu doar pentru un thread. So_end() asteapta ca toate > threadurile sa se termine > > dar, aici vine partea importanta, nu s-au terminat toate threadurile de > creat/rulat. Deci in cazul > > meu voi astepta doar o parte/fractie din toate threadurile ce ar fi > trebuit create si asteptate. Efectiv > > so_end() se apeleaza in mijlocul rularii programului, ceea ce imi face ca > o buna parte din threaduri > > sa nu isi faca treaba, ele nefiind asteptate pentru ca nu existau in > momentul in care so_end() a fost > > apelat. > Este în regulă ca so_end() să fie apelat în timp ce alte thread-uri rulează. Dacă în acest timp sunt create thread-uri noi, și ele trebuie să fie așteptate, până în momentul în care nu mai există niciun thread care rulează. > > > Am reusit sa sincronizez pe bune functia so_end() manual, sa fiu sigur ca > se apeleaza cand trebuie, si > > ce vreau sa intreb este daca e ok acest lucru. > Da, este OK să sincronizezi funcția so_end() cu celelalte thread-uri, astfel încât să te asiguri că le aștepți pe toate. Numai bine, Răzvan *From: *Razvan Crainea <razvan.crai...@gmail.com> > *Sent: *Tuesday, May 15, 2018 10:36 PM > *To: *Alex Negura <alexd...@gmail.com>; Sisteme de Operare > <so@cursuri.cs.pub.ro> > *Subject: *Re: [so] [Tema4][Linux] Test 10 > > > > Salut, Alex! > > > > Găsești răspunsurile mele inline. > > On Tue, May 15, 2018 at 8:58 PM Alex Negura via so <so@cursuri.cs.pub.ro> > wrote: > > > > Salut, > > > > Am ajuns cu implementarea temei la testul 10, unde se creeaza mai multe > threaduri > > si am observat ca threadul creat din scriptul de testare iese imediat din > > so_fork() si apoi apeleaza fara sa astepte terminarea executieie > programului > > functia so_end(). > > Nu mi-e clar ce vrei să spui mai sus. Cum ar putea apela so_end() *după* > terminarea execuției programului? > > > > Ar trebui ca eu sa sincronizez functia so_end() sa astepte terminarea > > executiei tuturor threadurilor? > > Da, exact asta scrie și în enunț[1] că trebuie să facă funcția so_end(). > > > > Alta solutie nu gasesc si apparent doar mie mi se intampla > > acest lucru, desi ar trebui sa se intample tuturor. > > De ce zici că ți se întâmplă doar ție? Ăsta este un comportament normal, > sunt convins că se întâmplă la toate implementările. > > > > Acel thread creat in script nu asteapta > > deloc terminarea executiei in totalitate a programului si sunt nedumerit > de ce se comporta > > in acest fel checkerul….. > > > > Un thread face parte dintr-un proces (program în execuție) - dacă un > proces se termină, atunci toate thread-urile acelui proces se termină, > indiferent ce fac ele. Cred că tu confunzi modul în care rulează > thread-urile cu cel al proceselor. Îți recomand să mai arunci o privire pe > cursul de fire de execuție[2] și capitolele aferente din Operating Systems > Concepts Essentials și Modern Operating Systems. > > > > [1] > https://ocw.cs.pub.ro/courses/so/teme/tema-4#detalii_implementare_instructiuni > > [2] https://ocw.cs.pub.ro/courses/so/cursuri/curs-08 > > > > Numai bine, > Răzvan > > >
_______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii