Объекты планирования ядра (Kernel Scheduler Entities - KSE) представляет собой систему многопоточного выполнения ядра, архитектура которой подобна Scheduler Activations [Андерсон и другие]. Она обеспечивает баланс между моделями многопоточного выполнения пользовательского уровня (1:N) и уровня ядра (1:1), обладает большинством преимуществ обоих подходов, и несколькими их отрицательными сторонами.
В этом проекте имеются две стороны: поддержка на уровне ядра и поддержка на уровне пользователя. Поддержка на уровне ядра представляет собой модификации к планировщику FreeBSD; пользовательская половина является реализацией POSIX®-потоков выполнения, которые используют преимущества дополнительных служб ядра.
Целью является замена имеющейся на данный момент пользовательской системы многопоточного выполнения в библиотеке libc_r и параметре -pthread компилятора gcc, на новую библиотеку libpthread, которая будет компоноваться при использовании параметра -lpthread компилятора gcc.
Вся работа над KSE выполняется в 5.0-CURRENT. Для построения ядра с изменениями, касающимися KSE, не требуется никаких специальных параметров ядра (изменения не отделимы от планировщика FreeBSD).
Для использования KSE в приложении вам необходимо скомпоновать его с библиотекой libpthread; это делается весьма однозначным образом. В make-файлах приложения измените параметр компилятора -pthread или параметр компоновщика -lc_r на -lpthread и выполните компоновку повторно. В качестве альтернативного способа вы можете использовать файл /etc/libmap.conf для отображения libc_r в libpthread (обратитесь к libmap.conf(5)).
Далее приведен неполный общий перечень задач:
Модуль | Задача | Ответственный | Последнее обновление | Состояние |
---|---|---|---|---|
libpthread | Написание страницы справки kse(2), описывающей новые системные вызовы. | Archie Cobbs | 10 сентября 2002 | Выполнено |
libpthread | Repo-копия библиотеки libpthread из libc_r. | хозяин cvs | 16 сентября 2002 | Выполнено |
libpthread | Использование KSE для планирования процессов. | Jonathan Mini | 30 октября 2002 | Выполнено |
libpthread | Планирование простаивающего контекста по возможности. | Jonathan Mini | 2 ноября 2002 | Выполнено |
libpthread | Направление сигналов в потоки. | Daniel Eischen David Xu | 28 июня 2003 | Выполнено |
libpthread | Разделение для SMP. | Daniel Eischen | 3 мая 2003 | Выполнено |
kernel | Разделение для SMP. | David Xu | 3 мая 2003 | Выполнено |
libpthread | Запуск нескольких KSE (один на каждый CPU). | David Xu | 3 мая 2003 | Выполнено |
libpthread, kernel | Реализация машинно-зависимых функций для alpha. | Marcel Moolenaar | 30 августа 2003 | Выполняется |
libpthread, kernel | Реализация машинно-зависимых функций для amd64. | David Xu Daniel Eischen | 30 августа 2003 | Выполнено |
libpthread, kernel | Реализация машинно-зависимых функций для i386. | David Xu Daniel Eischen | 30 августа 2003 | Выполнено |
libpthread, kernel | Реализация машинно-зависимых функций для ia64. | Marcel Moolenaar | 30 августа 2003 | Выполнено |
libpthread, kernel | Реализация машинно-зависимых функций для sparc64. | Jake Burkholder | 30 августа 2003 | Выполняется |
kernel | Реализация схемы сигналов, специфичной для KSE. | David Xu | 28 июня 2003 | Выполнено |
libpthread | Реализация границ системных потоков. | Daniel Eischen | 3 мая 2003 | Выполнено |
kernel | Эффективное ограничение системных потоков (отсутствие вызовов при их блокировке). | David Xu | 30 августа 2003 | Выполнено |