diff --git a/en/kse/index.sgml b/en/kse/index.sgml index abe95c5a73..80e0bdf7f4 100644 --- a/en/kse/index.sgml +++ b/en/kse/index.sgml @@ -1,241 +1,233 @@ - + %includes; Done"> In progress"> Stalled"> Not Started"> Resolved"> Unresolved"> %developers; ]> &header;

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. &a.archie; 10 September 2002 &status.done;
libpthread Repo-copy the libpthread library from libc_r. cvs meister 16 September 2002 &status.done;
libpthread Use KSE to schedule processes. &a.mini; 30 October 2002 &status.done;
libpthread Schedule an idle context when appropriate. &a.mini; 2 November 2002 &status.done;
libpthread Deliver signals to threads. &a.deischen; 3 May 2003 &status.wip; &a.deischen; &a.davidxu; 28 June 2003 &status.done;
libpthread Locking for SMP. &a.deischen; 3 May 2003 &status.done;
kernel Locking for SMP. &a.davidxu; 3 May 2003 &status.done;
libpthread Launch multiple KSEs (one per CPU). &a.davidxu; 3 May 2003 &status.done;
libpthread Implement machine-dependent functions for non-x86 platforms.   2 November 2002 &status.new; &a.marcel; 28 June 2003 + &status.wip;
kernel Implement machine-dependent functions for non-x86 platforms.   2 November 2002 &status.new; &a.marcel; 28 June 2003 &status.wip;
  Port NetBSD's liblwp to FreeBSD/KSE.   2 November 2002 &status.new;
kernel Signal the UTS with information about which thread it's for.   3 November 2002 &status.new;
kernel Implement POSIX-style reliable and informative signals.   8 March 2003 &status.new; Implement KSE-specific signaling. &a.davidxu; 28 June 2003 &status.done;
libpthread Implement scope system threads. &a.deischen; 3 May 2003 &status.done;
kernel Efficient scope system threads (no upcalls when they block).   &a.davidxu; 3 May 2003 &status.new; &status.wip;
&footer;