[so] Întreruperea preemptibilit??ii în nucleu

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Sun Apr 12 17:50:08 EEST 2009


On Sun, 2009-04-12 at 17:08 +0300, Lucian Cojocar wrote:
> Salut,
> 
> Operating System Concepts, 6.8.3 paragraful 2:
> 
> """
> the kernel is not preemptible if a kernel-mode task is holding a lock
> """
> 
> De ce trebuie să avem comportamentul ăsta?

Daca te referi la versiunea a 7-a din OSC, paragraful 3 "Synchronization
in Linux" este relativ detaliat. Lock se refera la spinlock.

In momentul in care un proces detine un spinlock, nu poate fi preemptat.
Altfel, un alt proces ar fi planificat si ar incerca achizitionarea
spinlock-ului. Acesta fiind deja achizitionat de procesul proaspat
preemptat ar astepta nedefinit si s-ar pierde intreaga notiune de
busy-waiting de scurta durata (pentru un spinlock).

Pe Linux, in particular, pe un sistem uniprocesor, operatiile spin_lock,
respectiv spin_unlock sunt echivalente cu apelarea preempt_disable,
preempt_enable. Nu se ruleaza efectiv cod specific pentru spinlock.
Dezactivarea preemptivitatii garanteaza faptul ca nici un alt proces nu
va fi planificat pe _singurul_ procesor al sistemului.

Razvan



More information about the so mailing list