Navigation Bar

FreeBSD KSE Project


Top Applications Support Documentation Vendors Search Index Top Top

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 libpthreads, which is not built by default. To build and install it on your system, either run make all install from /usr/src/lib/libpthread (if you have sources installed on your system), or check out the libpthread and libc modules from CVS. You don't need to rebuild libc, but the libpthread makefiles refer to parts of the libc sources.

Linking an application against libpthread is straightforward. In its makefiles, change the -pthread option to -lpthread and relink. Alternatively, you can copy libpthread.so on top of libc_r.so, but this is not recommended until libpthread.so becomes a bit more stable.

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 Implement machine-dependent functions for non-x86 platforms. Marcel Moolenaar 28 June 2003 In progress
kernel Implement machine-dependent functions for non-x86 platforms. Marcel Moolenaar 28 June 2003 In progress
  Port NetBSD's liblwp to FreeBSD/KSE.   2 November 2002 Not Started
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 3 May 2003 In progress

home   |   contact   |   legal   |   © 1995-2003 The FreeBSD Project. All rights reserved.
Last modified: 2003/07/13 15:34:47