[so] [Quiz] Cursuri 4 și 6
Razvan Deaconescu
razvan.deaconescu at cs.pub.ro
Tue Mar 27 21:35:10 EEST 2012
Liviu - Andrei IOAN <liviu.ioan at cti.pub.ro> writes:
> Toate răspunsurile mele au fost considerate greșite.
> Cum e corect :) ?
E corect ca tine. Erau greșit marcate răspunsurile. Am făcut o trecere
prin toate întrebările de la quiz07 încolo și am corectat.
> De asemenea, aș dori să știu răspunsul(explicat) la următoarele întrebări:
> Care este condiția necesară pentru ca două pagini virtuale să partajeze aceeași pagină fizică?
> * pagina fizică deține cod
> * pagina fizică deține date inițializate
> * pagina fizică se află în swap
> * pagina fizică are intrare asociată în TLB
Aici explicația este: dacă pagina fizică deține cod, atunci este
read-only și atunci poate fi ușor partajată între diverse pagini
virtuale. Am reformulat întrebarea; nici acum nu sunt mulțumit de ea,
dar e mai bine ca înainte și nu am găsit o formulare mai potrivită.
> Când se poate preempta un proces pe un kernel preemptiv dar nu și pe un kernel non-preemptiv?
> * când îi expiră cuanta în timp ce execută cod utilizator
> * când îi expiră cuanta în timp ce execută cod kernel
> * când efectuează o operație blocantă în timp ce execută cod utilizator
> * când efectuează o operație blocantă în timp ce execută cod kernel
Un kernel preemptiv rulează planificator preemptiv. Un kernel
non-preemptiv rulează, în codul nucleul, planificator
cooperativ. Atenție: când procesul rulează în user-space, planificatorul
rămâne preemptiv indiferent de tipul nucleului.
Există câteva condiții care fortează context switch:
* unui proces îi expiră cuanta (necesită planificator preemptiv)
* un proces ready devine prioritar procesului running (necesită
planificator preemptiv)
* procesul care rulează se blochează
* procesul care rulează se termină
* procesul care rulează cedează de bună voie procesorul (yield)
Ultimele trei bullet-uri se pot întâmpla și pe un sistem cu planificator
cooperativ.
În cazul de față, fiind vorba de deosebiri strict la nivelul codului
kernel, răspunsul corect este ultimul bullet "când efectuează o operație
blocantă în timp ce execută cod kernel".
Răzvan
More information about the so
mailing list