On Sat, Apr 27, 2019 at 6:25 PM Paul Olaru via so <so@cursuri.cs.pub.ro> wrote:
>
> Îmi poate oferi cineva o idee prin care pot găsi motivul pentru care primesc 
> mesajul de eroare „task was not preempted” la unele execuții? Sau ce să 
> verific în codul meu? Test round robin.
Eroarea "task was not preempted" o primești atunci când un task
ruleaza mai mult decât cuanta maximă, și scheduler-ul tău nu îl
preemptează ca să poată rula un alt thread cu aceeași prioritate.
>
>
>
> Când ar trebui să se facă preempția în so_signal, cea cauzată de expirarea 
> cuantei? Înainte sau după semnalizare? Similar pentru so_fork: înainte sau 
> după lansarea threadului? [la mine oricum inițializarea structurilor noului 
> thread se întâmplă sincron cu apelul so_fork].
so_signal() este în sine o instrucțiune, care consumă timp pe
procesor. Instrucțiunile sunt considerate atomice, astfel încât cuanta
de timp este considerată expirată după ce întreaga instrucțiune s-a
executat. Așadar, preempția în so_signal() ar trebui să se facă după
semnalizare. La fel și la so_fork, preempția se face după terminarea
inițializării, dar înainte de a rula handler-ul.
>
>
>
> (bănuiesc că nu ar trebui să-mi încerc norocul pe VMchecker gen „tura asta 
> merge”, dat fiind că problema apare la sub 10% din rulări).
Nu, n-ar trebui să îți încerci norocul.
>
>
>
> (în urma discuției din alt thread, mașina virtuală de SO are 1.5GB pe 
> sistemul meu în loc de cei 512MB pe care îi are by default).
Recomandăm să nu modifici mașina virtuală, altfel vei avea diferențe
între rularea pe mașina ta virtuală și mașina de pe vmchecker.

Numai bine,
Răzvan
_______________________________________________
http://ocw.cs.pub.ro/courses/so/info/lista-discutii

Raspunde prin e-mail lui