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

Raspunde prin e-mail lui