Skip site navigation (1) Skip section navigation (2)

Site Navigation

FreeBSD KSE Project

Contents

Overview

Kernel Scheduler Entities (KSE), is a kernel-supported threading system similar in design to Scheduler Activations [Anderson, et. al.]. It strikes a balance between user-level (1:N) and kernel-level (1:1) threading models, giving most of the advantages of both, and few of the disadvantages of either.

There are two halves of this project: kernel support and user support. The kernel support consists of modifications to the FreeBSD scheduler; The user half is a POSIX® threads implementation which takes advantage of the extra facilities the kernel provides.

The goal is to replace the current user threading system provided by the libc_r library, and the -pthread gcc option, with a new libpthread library which will be linked with the -lpthread gcc option.

Using KSE

All KSE development is being done in 5.0-CURRENT. No special kernel configuration options are required to build a kernel with the KSE-related changes (the changes are inextricable from the FreeBSD scheduler).

In order to use KSE in an application, you need to link it against libpthread; this is straightforward. In the application's makefile(s), change the -pthread compiler switch or -lc_r link option to -lpthread and relink. Alternatively, you can use /etc/libmap.conf to map libc_r to libpthread (see libmap.conf(5)).

Further Reading

Project Status

Following is an incomplete general list of tasks:

Module Task Responsible Last updated Status
libpthread Write kse(2) man page documenting new system calls. Archie Cobbs 10 September 2002 Done
libpthread Repo-copy the libpthread library from libc_r. cvs meister 16 September 2002 Done
libpthread Use KSE to schedule processes. Jonathan Mini 30 October 2002 Done
libpthread Schedule an idle context when appropriate. Jonathan Mini 2 November 2002 Done
libpthread Deliver signals to threads. Daniel Eischen David Xu 28 June 2003 Done
libpthread Locking for SMP. Daniel Eischen 3 May 2003 Done
kernel Locking for SMP. David Xu 3 May 2003 Done
libpthread Launch multiple KSEs (one per CPU). David Xu 3 May 2003 Done
libpthread, kernel Implement alpha machine-dependent functions. Marcel Moolenaar 30 Aug 2003 In progress
libpthread, kernel Implement amd64 machine-dependent functions. David Xu Daniel Eischen 30 Aug 2003 Done
libpthread, kernel Implement i386 machine-dependent functions. David Xu Daniel Eischen 30 Aug 2003 Done
libpthread, kernel Implement ia64 machine-dependent functions. Marcel Moolenaar 30 Aug 2003 Done
libpthread, kernel Implement sparc64 machine-dependent functions. Jake Burkholder 30 Aug 2003 In progress
kernel Implement KSE-specific signaling. David Xu 28 June 2003 Done
libpthread Implement scope system threads. Daniel Eischen 3 May 2003 Done
kernel Efficient scope system threads (no upcalls when they block). David Xu 30 Aug 2003 Done