so_fork are un parametru care e prioritatea lui; noul thread va intra în coada ready la prioritatea respectivă.
Fiecare thread are ca tranziții: running->ready în so_exec și celelalte funcții care preemptează, când expiră cuanta sau apare (în so_fork sau so_signal) un thread cu prioritate mai mare. running->waiting în so_wait, se adaugă la coada de I/O menționată în parametru. ready->running când este scheduled, dacă nu există niciun thread de prioritate mai mare. waiting->ready când threadul activ a dat signal pe coada pe care cel despre care discutăm a dat so_wait running->terminated când funcția a returnat. On Thu, May 2, 2019, 8:02 PM Tuculina Gabriel <[email protected]> wrote: > Multumesc frumos, asta explica multe! > > De ce ar trebui sa avem un vector de cozi de prioritati? Dupa ce criteriu > stabilim pe ce coada de prioritati se duce un thread? > > On Thursday, May 2, 2019, 7:46:26 PM GMT+3, Paul Olaru < > [email protected]> wrote: > > > Looks like significant misunderstandings here. > > 1. Vezi 3; ID-ul este dintr-un vector de cozi I/O. > 2. Fiecare thread este ori running, ori ready (în coadă), ori blocked > (într-o coadă I/O). Fiecare funcție manipulează în general propriul thread, > cu excepția lui fork (care crează un thread nou) și signal (care scoate > alte threaduri dintr-o coadă de I/O și le pune în ready, în coada de > priorități) > 3. Primul parametru e dimensiunea unei cuante de timp iar al doilea este > nr de cozi I/O. Numărul de thread-uri nu este limitat. > 4. Funcția dată lui fork va apela ea so_exec, sau so_fork, sau so_wait, > sau so_signal. Nu le apelezi tu. Te folosești de apelurile ăstea ca > oportunitate pt a face schedulingul. > 5. Funcția apelează so_exec; deci ai posibilitatea în acest moment. > > P.S: cuanta de timp este de fapt nr de apeluri fork/exec/signal maxim > permis până când forțezi o anume preempție. > > P.P.S: Va trebui tu să ai grijă intern ca numai un thread să se poată rula > la un moment dat. > > On Thu, May 2, 2019, 7:38 PM Tuculina Gabriel via so <[email protected]> > wrote: > > Buna ziua, > > Am si eu o serie de nelamuriri legate de functiile pe care trebuie sa le > implementam: > > 1. Wait si Signal primesc amandoua cate un parametru IO. Acel eveniment ar > trebui sa fie un id ce trebuie comparat cu id-ul threadurilor din lista de > prioritati? > > 2. Cand se va scoate un element din lista de prioritati? Cand starea lui > ajunge in Terminated? > > 3. Ce se intampla daca se incearca crearea mai multor procese decat a fost > initial setat in init? Se ignora? > > 4. Din cate inteleg, se va executa functia pasata la fork, iar apoi > threadurile ar trebui sa intre in starea Terminated. Cum ar trebui sa fie > folosit so_exec? Care mai este rolul lui daca "work is done" si nu mai pot > face nimic in privinta asta? > > 5. Cum ar trebui sa decrementam time_quantum-ul daca nu avem control > asupra executiei work-ului? > > > > Multumesc anticipat! > > Gabriel > _______________________________________________ > http://ocw.cs.pub.ro/courses/so/info/lista-discutii > >
_______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
