[Kos-dev] Sémaphore

David Decotigny david.decotigny at free.fr
Wed Feb 16 16:38:21 CET 2005


Bonjour,

Cyril Dupuit wrote:
> Par contre, dans l'article sos de février, vous annoncez que pour faire 
> un noyau préemptif, il faut utiliser des variables globales. En 

Aïe, alors il y a eu contre-sens. Non, si un noyau possede des variables 
globales, alors il n'est pas necessairement preemptif ! Par contre, le 
fait qu'il y ait des variables globales dans un noyau preemptif 
necessite une protection de ces variables.

> regardant le code de Linux, j'ai vu qu'ils utiliaient lock_kernel et 
> unlock_kernel (un spinlock).

Je pense que c'est ce qu'ils appellent le "Big Kernel Lock" (BKL). C'est 
un verrou qui protege toutes les ressources globales du noyau qui n'ont 
pas (encore) leur propre verrou. Au debut (noyaux 2.0), il etait utilise 
en SMP pour etre sur qu'il n'y a qu'un seul processeur qui est en mode 
noyau a 1 instant donne. En effetn, a l'origine (noyaux 0.x, 1.x), Linux 
comme la plupart des Unix (et comme SOS) etait non preemptible ; et ce 
BKL a permis de rester en non-preemptible meme en SMP. Ca rendait sa 
conception beaucoup plus simple.

Graduellement, avec le 2.4 puis surtout le 2.6, le but a ete de rendre 
le noyau preemptible (plus efficace en SMP, plus reactif meme en UP). 
Pour ça, on souhaite que chaque ressource globale soit protegee par son 
propre verrou, et pas que 234234243 ressources globales  soient 
protegees par *le* BKL. Bref, l'objectif actuel est de virer le BKL du 
source. Comme ça, si un processeur demande une ressource, il se retrouve 
bloqué *uniquement* quand *la* ressource qu'il demande est detenue par 
un autre processeur. A contrario, avec le BKL, un processeur peut 
bloquer sur le BKL alors qu'il demande la ressource rA tandis qu'un 
autre processeur utilise une autre ressource rB qui n'a rien à voir 
(elles sont en effet protegees par un unique verrou : le BKL).

Bref, l'objectif des noyaux "recents" est de virer le BKL, c'est-a-dire 
de faire de la synchro "grain fin". Les problemes de synchro faisant 
intervenir un comportement temporel, c'est un travail de tres longue 
haleine tres delicat a faire (peut-etre parce que l'esprit humain a 
quelques difficultes a manier le temps).

Dans KOS, le but est de s'attaquer au probleme du SMP le plus tot 
possible pour eviter un refactoring geant lie au passage UP -> SMP. Ca 
passe par la mise en place de synchros grain fin le plus tot possible. 
Dans SOS par contre, pas besoin de BKL vu que le noyau est non preemptif 
par construction et qu'on ecarte d'emblee le support SMP.

Bonne journee,

-- 
David Decotigny -- http://david.decotigny.free.fr


More information about the Kos-dev mailing list