for signalling the right thread, but I'm not actively working on it anymore, though I might throw something together in the future.
225 lines
6.6 KiB
Text
225 lines
6.6 KiB
Text
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" [
|
|
<!ENTITY base CDATA "..">
|
|
<!ENTITY date "$FreeBSD: www/en/kse/index.sgml,v 1.7 2003/02/01 05:36:32 mini Exp $">
|
|
<!ENTITY title "FreeBSD KSE Project">
|
|
<!ENTITY email 'mini'>
|
|
<!ENTITY % includes SYSTEM "../includes.sgml"> %includes;
|
|
|
|
<!-- Status levels -->
|
|
<!ENTITY status.done "<font color=green>Done</font>">
|
|
<!ENTITY status.wip "<font color=blue>In progress</font>">
|
|
<!ENTITY status.stalled "<font color=purple>Stalled</font>">
|
|
<!ENTITY status.new "<font color=red>Not Started</font>">
|
|
<!ENTITY status.resolved "<font color=green>Resolved</font>">
|
|
<!ENTITY status.unresolved "<font color=red>Unresolved</font>">
|
|
|
|
<!-- The list of contributors was moved to a separate file so that it can
|
|
be used by other documents in the FreeBSD web site. -->
|
|
|
|
<!ENTITY % developers SYSTEM "../developers.sgml"> %developers;
|
|
|
|
]>
|
|
|
|
<html>
|
|
&header;
|
|
|
|
<h2>Contents</h2>
|
|
<ul>
|
|
<li><a href="#overview">Project Overview</a></li>
|
|
<li><a href="#using">Using KSE</a></li>
|
|
<li><a href="#further.reading">Further Reading</a></li>
|
|
<li><a href="#status.kernel">Project Status</a></li>
|
|
</ul>
|
|
|
|
<a id="overview" name="overview"></a>
|
|
<h2>Overview</h2>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>The goal is to replace the current user threading system provided by
|
|
the libc_r library, and the <tt>-pthread</tt> gcc option, with a new
|
|
libpthread library which will be linked with the <tt>-lpthread</tt>
|
|
gcc option.
|
|
|
|
<a name="using"></a>
|
|
<h2>Using KSE</h2>
|
|
|
|
<p>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).
|
|
|
|
<p>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 <tt>make all install</tt> from
|
|
<span class="filename">/usr/src/lib/libpthread</span> (if you have
|
|
sources installed on your system), or check out the
|
|
<span class="filename">libpthread</span> and
|
|
<span class="filename">libc</span> modules from CVS. You don't need to
|
|
rebuild libc, but the libpthread makefiles refer to parts of the
|
|
libc sources.</p>
|
|
|
|
<p>Linking an application against libpthread is straighforward. In its
|
|
makefiles, change the <tt>-pthread</tt> option to <tt>-lpthread</tt>
|
|
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.
|
|
|
|
<a name="further.reading"></a>
|
|
<h2>Further Reading</h2>
|
|
<p>
|
|
<ul>
|
|
<li><a href="http://www.aims.com.au/chris/kse/">
|
|
Kernel-Scheduled Entities for FreeBSD</a>, by Jason Evans.
|
|
(Slightly out of date).
|
|
</li>
|
|
<li><a href="http://www.freebsd.org/cgi/man.cgi?query=kse&apropos=0&sektion=0&manpath=FreeBSD+5.0-current&format=html">KSE man page</a>
|
|
</li>
|
|
<li><a href="http://people.freebsd.org/~deischen/docs/Scheduler.pdf">
|
|
Scheduler Activations</a>, by Anderson, et al.
|
|
</li>
|
|
</ul>
|
|
|
|
<a name="status.kernel"></a>
|
|
<a name="status"></a>
|
|
<h2>Project Status</h2>
|
|
|
|
<p>Following is an incomplete general list of tasks:</p>
|
|
|
|
<table border=3>
|
|
<tr>
|
|
<th> Module </th>
|
|
<th> Task </th>
|
|
<th> Responsible </th>
|
|
<th> Last updated </th>
|
|
<th> Status </th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> libpthread </td>
|
|
<td> Write kse(2) man page documenting new system calls. </td>
|
|
<td> &a.archie; </td>
|
|
<td> 10 September 2002 </td>
|
|
<td> &status.done; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> libpthread </td>
|
|
<td> Repo-copy the libpthread library from libc_r. </td>
|
|
<td> cvs meister </td>
|
|
<td> 16 September 2002 </td>
|
|
<td> &status.done; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> libpthread </td>
|
|
<td> Use KSE to schedule processes. </td>
|
|
<td> &a.mini; </td>
|
|
<td> 30 October 2002 </td>
|
|
<td> &status.done; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> libpthread </td>
|
|
<td> Schedule an idle context when appropriate. </td>
|
|
<td> &a.mini; </td>
|
|
<td> 2 November 2002 </td>
|
|
<td> &status.done; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> libpthread </td>
|
|
<td> Deliver signals to threads. </td>
|
|
<td> </td>
|
|
<td> 2 November 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> libpthread </td>
|
|
<td> Locking for SMP. </td>
|
|
<td> </td>
|
|
<td> 2 November 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> kernel </td>
|
|
<td> Locking for SMP. </td>
|
|
<td> </td>
|
|
<td> 2 November 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> libpthread </td>
|
|
<td> Launch multiple KSEs (one per CPU). </td>
|
|
<td> </td>
|
|
<td> 2 November 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> libpthread </td>
|
|
<td> Implement machine-dependant functions for non-x86 platforms. </td>
|
|
<td> </td>
|
|
<td> 2 November 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> kernel </td>
|
|
<td> Implement machine-dependant functions for non-x86 platforms. </td>
|
|
<td> </td>
|
|
<td> 2 November 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> </td>
|
|
<td> Port NetBSD's liblwp to FreeBSD/KSE. </td>
|
|
<td> </td>
|
|
<td> 2 November 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> kernel </td>
|
|
<td> Signal the UTS with information about which thread it's for. </td>
|
|
<td> </td>
|
|
<td> 3 November 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> kernel </td>
|
|
<td> Implement POSIX-style reliable and informative signals. </td>
|
|
<td> </td>
|
|
<td> 8 March 2003 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<!--
|
|
<tr>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> D M 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
-->
|
|
</table>
|
|
|
|
&footer;
|
|
</body>
|
|
</html>
|