Le Kernel Scheduler Entities (KSE), est un système de threading supporté par le noyau, au design similaire à celui du Scheduler Activations [Anderson, et. al.]. Il établit un équilibre entre les modèles de threading de niveau utilisateur (1:N) et de niveau noyau (1:1), apportant la plupart des avantages des deux et peu d'inconvénients de chacun.
Le projet se compose de deux moitiés : le support noyau et le support utilisateur. Le support noyau consiste en modifications du scheduler FreeBSD; L'autre moitié est une implémentation des threads POSIX® qui tire avantage des facilités supplémentaires que procure le noyau.
Le but est de remplacer l'actuel système de threads utilisateur procuré par la libc_r, et l'option -pthread de gcc, par une nouvelle bibliothèque libpthread qui sera liée avec l'option -lpthread de gcc.
Tout le developpement du KSE est effectué sur la version 5.0-CURRENT. Aucune option de configuration du noyau n'est requise pour compiler un noyau avec les changements relatifs au KSE (ces changements sont inextricables du scheduler de FreeBSD).
Pour utiliser KSE dans une application, vous devez lier celle-ci à libpthread, ce qui est assez simple. Dans ses makefiles, remplacez le paramètre de compilation -pthread ou l'option de lien -lc_r par -lpthread et refaites l'édition des liens. Vous pouvez aussi utiliser /etc/libmap.conf pour associer libc_r à libpthread (voir libmap.conf(5)).
Ceci est une liste incomplète de tâches :
Module | Tâche | Responsable | Dernière mise à jour | Etat |
---|---|---|---|---|
libpthread | Ecrire la page de man kse(2) documentant les nouveaux appels système. | Archie Cobbs | 10 Septembre 2002 | Fait |
libpthread | Repo-copy de la bibliothèque libpthread à partir de libc_r. | responsable du cvs | 16 Septembre 2002 | Fait |
libpthread | Utiliser KSE pour ordonnancer les processus. | Jonathan Mini | 30 Octobre 2002 | Fait |
libpthread | Ordonnancer un contexte "inactif" si nécessaire. | Jonathan Mini | 2 Novembre 2002 | Fait |
libpthread | Envoyer des signaux aux threads. | Daniel Eischen David Xu | 28 Juin 2003 | Fait |
libpthread | Verrous pour le SMP. | Daniel Eischen | 3 Mai 2003 | Fait |
noyau | Verrous pour le SMP. | David Xu | 3 Mai 2003 | Fait |
libpthread | Lancer plusieurs KSEs (un par processeur). | David Xu | 3 Mai 2003 | Fait |
libpthread, noyau | Implémenter des fonctions machine-dépendantes pour la plateforme alpha. | Marcel Moolenaar | 30 Août 2003 | En progrès |
libpthread, noyau | Implémenter des fonctions machine-dépendantes pour la plateforme amd64. | David Xu Daniel Eischen | 30 Août 2003 | Fait |
libpthread, noyau | Implémenter des fonctions machine-dépendantes pour la plateforme i386. | David Xu Daniel Eischen | 30 Août 2003 | Fait |
libpthread, noyau | Implémenter des fonctions machine-dépendantes pour la plateforme ia64. | Marcel Moolenaar | 30 Août 2003 | Fait |
libpthread, noyau | Implémenter des fonctions machine-dépendantes pour la plateforme sparc64. | Jake Burkholder | 30 Août 2003 | En progrès |
noyau | Implémenter la gestion des signaux spécifique à KSE. | David Xu | 28 Juin 2003 | Fait |
libpthread | Implémenter les threads dans le domaine système. | Daniel Eischen | 3 Mai 2003 | Fait |
noyau | Améliorer la performance des threads du domaine système (pas de nouveaux appels si bloqués). | David Xu | 30 Août 2003 | Fait |