Slight tuning if teh KSE man page to indicate some functionality is
not yet inplemented and to clear up some wording.
This commit is contained in:
parent
9693da433c
commit
57ee6bd3db
@ -85,7 +85,7 @@ for user threading without taking away any of the user threading library's
|
||||
ability to make scheduling decisions.
|
||||
A kernel-to-user upcall mechanism is used to pass control to the user
|
||||
threading library whenever a scheduling decision needs to be made.
|
||||
Arbitrarily many user threads are multiplexed onto a fixed number of
|
||||
An arbitrarily number of user threads are multiplexed onto a fixed number of
|
||||
virtual CPUs supplied by the kernel.
|
||||
This can be thought of as an
|
||||
.Dq "N to M"
|
||||
@ -126,11 +126,13 @@ to the thread.
|
||||
The KSE becomes
|
||||
.Sy unassigned ,
|
||||
and the associated thread is suspended, when the KSE has an associated
|
||||
.Sy mailbox
|
||||
(see below) and any of the following occurs:
|
||||
.Sy mailbox ,
|
||||
(see below) the thread has an associated
|
||||
.Sy thread mailbox ,
|
||||
(also see below) and any of the following occurs:
|
||||
.Bl -bullet
|
||||
.It
|
||||
The thread invokes a blocking system call.
|
||||
The thread invokes a system call that blocks.
|
||||
.It
|
||||
The thread makes any other demand of the kernel that cannot be immediately
|
||||
satisfied, e.g., touches a page of memory that needs to be fetched from disk,
|
||||
@ -139,7 +141,8 @@ causing a page fault.
|
||||
Another thread that was previously blocked in the kernel completes its
|
||||
work in the kernel (or is
|
||||
.Sy interrupted )
|
||||
and becomes ready to return to user space.
|
||||
and becomes ready to return to user space, and the current thread is returning
|
||||
to user space.
|
||||
.It
|
||||
A signal is delivered to the process, and this KSE is chosen to deliver it.
|
||||
.El
|
||||
@ -163,13 +166,13 @@ A KSE group is the smallest entity to which a kernel scheduling
|
||||
priority may be assigned.
|
||||
For the purposes of process scheduling and accounting, each
|
||||
KSE group
|
||||
counts the same as a traditional unthreaded process.
|
||||
counts similarly to a traditional unthreaded process.
|
||||
Individual KSEs within a KSE group are effectively indistinguishable,
|
||||
and any KSE in a KSE group may be assigned by the kernel to any runnable
|
||||
thread associated with that KSE group.
|
||||
(in the kernel) thread associated with that KSE group.
|
||||
In practice, the kernel attempts to preserve the affinity between threads
|
||||
and actual CPUs to optimize cache behavior, but this is invisible to the
|
||||
user process.
|
||||
user process. (Affinity is not yet implemented).
|
||||
.Pp
|
||||
Each KSE has a unique
|
||||
.Sy "KSE mailbox"
|
||||
@ -234,7 +237,8 @@ by this initial thread with
|
||||
.Fa newgroup
|
||||
equal to zero does not create a new KSE; instead, it simply associates the
|
||||
current KSE with the supplied KSE mailbox, and no immediate upcall results.
|
||||
However, the upcall will be invoked the next time the thread blocks.
|
||||
However, an upcall will be triggered the next time the thread blocks and
|
||||
the required conditions are met.
|
||||
.Pp
|
||||
The kernel does not allow more KSEs to exist in a KSE group than the
|
||||
number of physical CPUs in the system (this number is available as the
|
||||
@ -256,7 +260,7 @@ system call
|
||||
causes the KSE assigned to the currently running thread to be destroyed.
|
||||
If this KSE is the last one in the KSE group, there must be no remaining
|
||||
threads associated with the KSE group blocked in the kernel.
|
||||
This system call does not return.
|
||||
This system call does not return unless there is an error.
|
||||
.Pp
|
||||
As a special case, if the last remaining KSE in the last remaining KSE group
|
||||
invokes this system call, then the KSE is not destroyed;
|
||||
@ -264,6 +268,7 @@ instead, the KSE just looses the association with its mailbox and
|
||||
.Fn kse_exit
|
||||
returns normally.
|
||||
This returns the process to its original, unthreaded state.
|
||||
(this is not yet implemented).
|
||||
.Pp
|
||||
The
|
||||
.Fn kse_release
|
||||
@ -272,18 +277,19 @@ is used to
|
||||
.Dq park
|
||||
the KSE assigned to the currently running thread when it is not needed,
|
||||
e.g., when there are more available KSEs than runnable user threads.
|
||||
The KSE remains unassigned but does not upcall until there is a new reason to
|
||||
do so, e.g., a previously blocked thread becomes runnable.
|
||||
The thread converts to an upcall but does not get scheduled until
|
||||
there is a new reason to do so, e.g., a previously
|
||||
blocked thread becomes runnable.
|
||||
If successful,
|
||||
.Fn kse_release
|
||||
does not return.
|
||||
does not return o the caller.
|
||||
.Pp
|
||||
The
|
||||
.Fn kse_wakeup
|
||||
system call
|
||||
is the opposite of
|
||||
.Fn kse_release .
|
||||
It causes the KSE associated with the mailbox pointed to by
|
||||
It causes the (parked) KSE associated with the mailbox pointed to by
|
||||
.Fa mbx
|
||||
to be woken up, causing it to upcall.
|
||||
If the KSE has already woken up for another reason, this system call has no
|
||||
@ -315,16 +321,13 @@ set to
|
||||
.Ss Signals
|
||||
.\"
|
||||
When a process has at least one KSE with an associated mailbox, then
|
||||
signals are no longer delivered on the process stack.
|
||||
Instead, signals are delivered via upcalls.
|
||||
signals might no longer be delivered on the process stack.
|
||||
Instead, signals may be delivered via upcalls.
|
||||
Multiple signals may be delivered with one upcall.
|
||||
(This feature is not yet coded).
|
||||
.Pp
|
||||
If there are multiple KSE groups in the process, which KSE group is
|
||||
chosen to deliver the signal is indeterminate.
|
||||
However, once a signal has been delivered to a specific KSE group,
|
||||
that KSE group then takes ownership of signal delivery and all subsequent
|
||||
signals are delivered via that KSE group.
|
||||
When this KSE group is destroyed, a new KSE group is chosen as needed.
|
||||
.\"
|
||||
.Ss KSE Mailboxes
|
||||
.\"
|
||||
@ -410,26 +413,30 @@ at the thread's mailbox, re-enabling upcalls, and then resume the thread.
|
||||
.Em Note :
|
||||
modification of
|
||||
.Va km_curthread
|
||||
by the user thread scheduler must be atomic to avoid the race condition
|
||||
where the kernel saves a partially modified value.
|
||||
by the user thread scheduler must be atomic
|
||||
with the loading of the context of the new thread, to avoid
|
||||
the situation where the thread context area
|
||||
may be modified by a blocking async operation, while there
|
||||
is still valid information to be read out of it.
|
||||
.Pp
|
||||
.Va km_completed
|
||||
points to a linked list of user threads that have completed their work
|
||||
in the kernel since the last upcall.
|
||||
The user thread scheduler should put these threads back into its
|
||||
own runnable queue.
|
||||
Each thread in a KSE group that completes is guaranteed to be
|
||||
Each thread in a KSE group that completes a kernel operation
|
||||
(synchronous or asynchronous) that results in an upcall is guaranteed to be
|
||||
linked into exactly one KSE's
|
||||
.Va km_completed
|
||||
list; which KSE in the group, however, is indeterminate.
|
||||
Furthermore, the thread will appear in only one upcall.
|
||||
Furthermore, the completion will be reported in only one upcall.
|
||||
.Pp
|
||||
.Va km_sigscaught
|
||||
contains the list of signals caught by this process since the previous
|
||||
upcall to any KSE in the process.
|
||||
As long as there exists one or more KSEs with an associated mailbox in
|
||||
the user process, signals are delivered this way rather than the
|
||||
traditional way.
|
||||
traditional way. (This has not bein implemented and may change).
|
||||
.Pp
|
||||
.Va km_timeofday
|
||||
is set by the kernel to the current system time before performing
|
||||
@ -463,7 +470,7 @@ is an opaque pointer ignored by the kernel.
|
||||
.Pp
|
||||
.Va tm_context
|
||||
stores the context for the thread when the thread is blocked in user space.
|
||||
This field is updated by the kernel before a completed thread is returned
|
||||
This field is also updated by the kernel before a completed thread is returned
|
||||
to the user thread scheduler via
|
||||
.Va km_completed .
|
||||
.Pp
|
||||
@ -514,9 +521,6 @@ do not return if successful.
|
||||
.Pp
|
||||
All of these system calls return a non-zero error code in case of an error.
|
||||
.Pp
|
||||
.Em Note :
|
||||
error codes are returned directly rather than via
|
||||
.Va errno .
|
||||
.Sh ERRORS
|
||||
The
|
||||
.Fn kse_create
|
||||
|
Loading…
Reference in New Issue
Block a user