aboutsummaryrefslogtreecommitdiff
path: root/en_US.ISO8859-1/htdocs/kse/index.sgml
blob: be24909bf2daf344a5b67ff08505e763e1c05a81 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//FreeBSD//DTD XHTML 1.0 Transitional-Based Extension//EN"
"http://www.FreeBSD.org/XML/doc/share/sgml/xhtml10-freebsd.dtd" [
<!ENTITY title "FreeBSD KSE Project">
<!ENTITY email 'mini'>

<!-- Status levels -->
<!ENTITY status.done "<font xmlns='http://www.w3.org/1999/xhtml' color='green'>Done</font>">
<!ENTITY status.wip "<font xmlns='http://www.w3.org/1999/xhtml' color='blue'>In progress</font>">
<!ENTITY status.stalled "<font xmlns='http://www.w3.org/1999/xhtml' color='purple'>Stalled</font>">
<!ENTITY status.new "<font xmlns='http://www.w3.org/1999/xhtml' color='red'>Not Started</font>">
<!ENTITY status.resolved "<font xmlns='http://www.w3.org/1999/xhtml' color='green'>Resolved</font>">
<!ENTITY status.unresolved "<font xmlns='http://www.w3.org/1999/xhtml' 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. -->


]>

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
      <title>&title;</title>

      <cvs:keyword xmlns:cvs="http://www.FreeBSD.org/XML/CVS">$FreeBSD$</cvs:keyword>
    </head>

    <body class="navinclude.about">

    <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.</p>

    <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>

    <p>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 <tt>-pthread</tt> compiler switch or <tt>-lc_r</tt> link
    option to <tt>-lpthread</tt> and relink. Alternatively, you can use
    <tt>/etc/libmap.conf</tt> to map libc_r to libpthread (see
    <tt>libmap.conf(5)</tt>).</p>

    <a name="further.reading"></a>
    <h2>Further Reading</h2>

    <ul>
      <li><a href="http://www.aims.net.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&amp;apropos=0&amp;sektion=0&amp;manpath=FreeBSD+5.0-current&amp;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 class="tblbasic">
      <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> &a.deischen; &a.davidxu; </td>
	<td> 28 June 2003 </td>
	<td> &status.done; </td>
      </tr>

      <tr>
      	<td> libpthread </td>
	<td> Locking for SMP. </td>
	<td> &a.deischen; </td>
	<td> 3 May 2003 </td>
	<td> &status.done; </td>
      </tr>

      <tr>
      	<td> kernel </td>
	<td> Locking for SMP. </td>
	<td> &a.davidxu; </td>
	<td> 3 May 2003 </td>
	<td> &status.done; </td>
      </tr>

      <tr>
      	<td> libpthread </td>
	<td> Launch multiple KSEs (one per CPU). </td>
	<td> &a.davidxu; </td>
	<td> 3 May 2003 </td>
	<td> &status.done; </td>
      </tr>

      <tr>
      	<td> libpthread, kernel </td>
        <td> Implement alpha machine-dependent functions. </td>
        <td> &a.marcel; </td>
        <td> 30 Aug 2003 </td>
        <td> &status.wip; </td>
      </tr>

      <tr>
      	<td> libpthread, kernel </td>
        <td> Implement amd64 machine-dependent functions. </td>
        <td> &a.davidxu; &a.deischen; </td>
        <td> 30 Aug 2003 </td>
        <td> &status.done; </td>
      </tr>

      <tr>
      	<td> libpthread, kernel </td>
        <td> Implement i386 machine-dependent functions. </td>
        <td> &a.davidxu; &a.deischen; </td>
        <td> 30 Aug 2003 </td>
        <td> &status.done; </td>
      </tr>

      <tr>
      	<td> libpthread, kernel </td>
        <td> Implement ia64 machine-dependent functions. </td>
        <td> &a.marcel; </td>
        <td> 30 Aug 2003 </td>
        <td> &status.done; </td>
      </tr>

      <tr>
      	<td> libpthread, kernel </td>
        <td> Implement sparc64 machine-dependent functions. </td>
        <td> &a.jake; </td>
        <td> 30 Aug 2003 </td>
        <td> &status.wip; </td>
      </tr>

      <tr>
	<td> kernel </td>
        <td> Implement KSE-specific signaling. </td>
        <td> &a.davidxu; </td>
        <td> 28 June 2003 </td>
        <td> &status.done; </td>
      </tr>

      <tr>
	<td> libpthread </td>
        <td> Implement scope system threads. </td>
        <td> &a.deischen; </td>
        <td> 3 May 2003 </td>
        <td> &status.done; </td>
      </tr>

      <tr>
	<td> kernel </td>
        <td> Efficient scope system threads (no upcalls when they block). </td>
        <td> &a.davidxu; </td>
        <td> 30 Aug 2003 </td>
        <td> &status.done; </td>
      </tr>

<!--
      <tr>
	<td> &nbsp; </td>
        <td>  </td>
        <td> &nbsp; </td>
        <td> D M 2002 </td>
        <td> &status.new; </td>
      </tr>

-->
    </table>

  </body>
</html>