<div dir="ltr">Salut, Alex!<br><br><div class="gmail_quote"><div dir="ltr">On Tue, May 15, 2018 at 11:18 PM Alex Negura <<a href="mailto:alexdn13@gmail.com">alexdn13@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="#954F72"><div class="m_2535005777046668773WordSection1"><p class="MsoNormal">Salut, </p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Nu am fost foarte clar cu intrebarea, asa ca o sa reformulez.<br><br></p><ol style="margin-top:0in" start="1" type="1"><li class="m_2535005777046668773MsoListParagraph" style="margin-left:0in">Threadul principal din functia de test apeleaza so_fork().</li><li class="m_2535005777046668773MsoListParagraph" style="margin-left:0in">In so_fork() se va crea un nou thread ce trebuie sa execute handlerul asociat.</li><li class="m_2535005777046668773MsoListParagraph" style="margin-left:0in">Acel thread nou creat intra in starea ready si asteapta pana cand este pus pe processor</li><li class="m_2535005777046668773MsoListParagraph" style="margin-left:0in">Intre timp, threadul principal din functia de test, si-a terminat treaba, (aici sunt detalii</li></ol><p class="MsoNormal" style="margin-left:.25in">de implementare si nu cred ca e ok sa le zic) si acesta va da return din functia so_fork() si nu</p><p class="MsoNormal" style="margin-left:.25in">va astepta celelalte threaduri sa se creeze/termine executia.</p><ol style="margin-top:0in" start="5" type="1"><li class="m_2535005777046668773MsoListParagraph" style="margin-left:0in">Va reveni in functia de test si va face un sched_yield() (care la mine nu face absolut nimic).</li></ol><p class="MsoNormal" style="margin-left:.25in">Mentionez ca inainte de a face sched_yeld() un alt thread este pornit deja din cadrul temei</p><p class="MsoNormal" style="margin-left:.25in"> si ar trebui sa ii ia locul pe procesorul fizic, acest lucru impiedicand continuarea functiei de test.</p><ol style="margin-top:0in" start="6" type="1"><li class="m_2535005777046668773MsoListParagraph" style="margin-left:0in">Apoi imediat dupa functia sched_yield() se apeleaza so_end(). So_end() se apeleaza pentru</li></ol><p class="MsoNormal" style="margin-left:.25in">procesul current, nu doar pentru un thread. So_end() asteapta ca toate threadurile sa se termine</p><p class="MsoNormal" style="margin-left:.25in">dar, aici vine partea importanta, nu s-au terminat toate threadurile de creat/rulat. Deci in cazul</p><p class="MsoNormal" style="margin-left:.25in">meu voi astepta doar o parte/fractie din toate threadurile ce ar fi trebuit create si asteptate. Efectiv</p><p class="MsoNormal" style="margin-left:.25in">so_end() se apeleaza in mijlocul rularii programului, ceea ce imi face ca o buna parte din threaduri</p><p class="MsoNormal" style="margin-left:.25in">sa nu isi faca treaba, ele nefiind asteptate pentru ca nu existau in momentul in care so_end() a fost</p><p class="MsoNormal" style="margin-left:.25in">apelat.</p></div></div></blockquote><div>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ă. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="#954F72"><div class="m_2535005777046668773WordSection1"><p class="MsoNormal" style="margin-left:.25in"><u></u> <u></u></p><p class="MsoNormal" style="margin-left:.25in">Am reusit sa sincronizez pe bune functia so_end() manual, sa fiu sigur ca se apeleaza cand trebuie, si </p><p class="MsoNormal" style="margin-left:.25in">ce vreau sa intreb este daca e ok acest lucru.</p></div></div></blockquote><div>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.</div><div><br></div><div>Numai bine,<br>Răzvan</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="#954F72"><div class="m_2535005777046668773WordSection1"><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal" style="border:none;padding:0in"><b>From: </b><a href="mailto:razvan.crainea@gmail.com" target="_blank">Razvan Crainea</a><br><b>Sent: </b>Tuesday, May 15, 2018 10:36 PM<br><b>To: </b><a href="mailto:alexdn13@gmail.com" target="_blank">Alex Negura</a>; <a href="mailto:so@cursuri.cs.pub.ro" target="_blank">Sisteme de Operare</a><br><b>Subject: </b>Re: [so] [Tema4][Linux] Test 10</p></div></div></div><div lang="EN-US" link="blue" vlink="#954F72"><div class="m_2535005777046668773WordSection1"><p class="MsoNormal"><u></u> <u></u></p><div><p class="MsoNormal">Salut, Alex!</p><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal" style="margin-bottom:12.0pt">Găsești răspunsurile mele inline.</p><div><div><p class="MsoNormal">On Tue, May 15, 2018 at 8:58 PM Alex Negura via so <<a href="mailto:so@cursuri.cs.pub.ro" target="_blank">so@cursuri.cs.pub.ro</a>> wrote:</p></div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in"><div><div><p class="MsoNormal"> </p><p class="MsoNormal">Salut,</p><p class="MsoNormal"> </p><p class="MsoNormal">Am ajuns cu implementarea temei la testul 10, unde se creeaza mai multe threaduri</p><p class="MsoNormal">si am observat ca threadul creat din scriptul de testare iese imediat din</p><p class="MsoNormal">so_fork() si apoi apeleaza fara sa astepte terminarea executieie programului </p><p class="MsoNormal">functia so_end().</p></div></div></blockquote><div><p class="MsoNormal">Nu mi-e clar ce vrei să spui mai sus. Cum ar putea apela so_end() *după* terminarea execuției programului? </p></div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in"><div><div><p class="MsoNormal"> </p><p class="MsoNormal">Ar trebui ca eu sa sincronizez functia so_end() sa astepte terminarea</p><p class="MsoNormal">executiei tuturor threadurilor?</p></div></div></blockquote><div><p class="MsoNormal">Da, exact asta scrie și în enunț[1] că trebuie să facă funcția so_end().</p></div><div><p class="MsoNormal"> </p></div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in"><div><div><p class="MsoNormal">Alta solutie nu gasesc si apparent doar mie mi se intampla</p><p class="MsoNormal">acest lucru, desi ar trebui sa se intample tuturor.</p></div></div></blockquote><div><p class="MsoNormal">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.</p></div><div><p class="MsoNormal"> </p></div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in"><div><div><p class="MsoNormal">Acel thread creat in script nu asteapta </p><p class="MsoNormal">deloc terminarea executiei in totalitate a programului si sunt nedumerit de ce se comporta</p><p class="MsoNormal">in acest fel checkerul…..</p></div></div></blockquote><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">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.</p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">[1] <a href="https://ocw.cs.pub.ro/courses/so/teme/tema-4#detalii_implementare_instructiuni" target="_blank">https://ocw.cs.pub.ro/courses/so/teme/tema-4#detalii_implementare_instructiuni</a></p></div><div><p class="MsoNormal">[2] <a href="https://ocw.cs.pub.ro/courses/so/cursuri/curs-08" target="_blank">https://ocw.cs.pub.ro/courses/so/cursuri/curs-08</a></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div></div></div></div><p class="MsoNormal">Numai bine,<br>Răzvan</p><p class="MsoNormal"><u></u> <u></u></p></div></div></blockquote></div></div>