doc/en/kse/index.sgml
Juli Mallett aed2e78829 Add entries related to delivering reliable and informative signals to the
UTS so that it can tell what thread is being signalled, and so that threads
actually get signalled.  This is basically a requirement for signals to KSE
threads to be meaningful, rather than indeterministic and lossy exceptions.

Approved by:	mini
2002-11-04 02:32:46 +00:00

195 lines
5.5 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.2 2002/11/04 02:05:12 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 seperate 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="#status.kernel">Project Status</a></li>
</ul>
<a name="plan"></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 -pthread 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 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> module from cvs.</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="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> 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.wip; </td>
</tr>
<tr>
<td> kernel </td>
<td> Implement POSIX-style reliable and informative signals. </td>
<td> &a.jmallett; </td>
<td> 3 November 2002 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> libpthread </td>
<td> Deliver signals to threads. </td>
<td> &nbsp; </td>
<td> 2 November 2002 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> libpthread </td>
<td> Locking for SMP. </td>
<td> &nbsp; </td>
<td> 2 November 2002 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> kernel </td>
<td> Locking for SMP. </td>
<td> &nbsp; </td>
<td> 2 November 2002 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> libpthread </td>
<td> Launch multiple KSEs (one per CPU). </td>
<td> &nbsp; </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> &nbsp; </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> &nbsp; </td>
<td> 2 November 2002 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> &nbsp; </td>
<td> Port NetBSD's liblwp to FreeBSD/KSE. </td>
<td> &nbsp; </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> &nbsp; </td>
<td> 3 November 2002 </td>
<td> &status.new; </td>
</tr>
<!--
<tr>
<td> &nbsp; </td>
<td> </td>
<td> &nbsp; </td>
<td> D M 2002 </td>
<td> &status.new; </td>
</tr>
-->
</table>
&footer;
</body>
</html>