Verrou global du noyau
Le verrou global du noyau, en anglais Big Kernel Lock (BKL) ou Giant Lock (littéralement le « verrou géant du noyau »), est un mécanisme qui permet de suspendre toutes les opérations du noyau d'un système d'exploitation de manière à contrôler les accès concurrents sur les machines multi-processeurs à mémoire partagée (SMP).
Ce système consiste à poser un verrou sur l'accès à l'espace noyau dès qu'une tâche y entre pour éviter tout risque de concurrence. Une fois la tâche achevée, le verrou est relâché.
Ce mécanisme a l'avantage d'être simple à implémenter puisqu'il n'implique pas la modification d'un grand nombre de parties du code du noyau. Il présente cependant l'inconvénient majeur de ne permettre qu'à une seule tâche l'accès aux ressources du noyau à un instant donné. Une partie de l'intérêt des systèmes multi-processeurs est alors perdue : lorsqu'une tâche exécute du code noyau, toutes les autres tâches pouvant potentiellement s'exécuter en parallèle, mais tentant d'accéder au noyau, se retrouvent bloquées.
Les techniques de verrouillage fin (fine-grained locking) sont des alternatives plus efficaces mais bien plus complexes à mettre en œuvre.
Noyau Linux
[modifier | modifier le code]Dans le noyau Linux, la décision a été prise de le faire progressivement disparaître au profit de techniques de verrouillage fin[1],[2].
En attendant que ce retrait soit totalement réalisé, les patchs PREEMPT_RT de la branche -rt d'Ingo Molnar permettent de réduire l'impact du Big Kernel Lock (BKL) en le rendant préemptible.
Depuis la version 2.6.37, le code du verrou global du noyau a été supprimé du cœur du noyau et il devient possible de le compiler sans BKL[3].
Le verrou global du noyau a définitivement disparu à partir de la version 2.6.39, toutes les parties du code y faisant allusion ayant été supprimés.
Notes
[modifier | modifier le code]- (fr) « La fin du verrou global dans le noyau Linux ? »,
- (en) « Removing the Big Kernel Lock »,
- Patrick Guignot, « Sortie de la version 2.6.37 du noyau Linux », Linuxfr,