Call for Developers! Userland threading
Craig Dooley
cd5697 at albany.edu
Tue Jul 22 16:30:07 PDT 2003
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On Tuesday 22 July 2003 04:20 pm, Matthew Dillon wrote:
> :Guess I can give up Usenet for a few months. :)
> :
> :We should probably agree on a common name for the thread struct that
> :isn't likely to overlap anyone else's likely names for thread structs:
> :lwkt_thread, lwthread, lw_thread, something like that. maybe grab some
> :mindspace: dragonthread?
>
> hahahaha. dragonthread... hahahaha.
>
> lwkt_thread is good for userland. I was going to call the kernel
> thread's lwkt_thread but I decided to stick with the 5.x 'thread'
> convention.
light weight kernel thread _ thread? what about
lwkt in kernel
lwut in userspace or just lwt?
>
> :> * Use the convenient mostly pre-built message stored in the
> :> * userthread structure
> :> */
> :> msg = &curthread->td_sysmsg;
> :
> :msg = &curthread->td_sysmsg[READ] or something like that, no?
>
> Not unless you want your user thread structure to become hugely
> bloated!
>
> td_sysmsg would be a union I think, similar to what I use for DEV
>
> struct syscall_msg {
> struct lwkt_msg lmsg;
> ...
> }
>
> struct syscall_read_msg {
> struct syscall_msg sysmsg; /* base message structure */
> ssize_t result; /* non-error result */
> int fd;
> void *buf;
> size_t bytes;
> }
>
> union lwkt_sysmsg {
> struct syscall_msg msg; /* base message structure */
> struct syscall_read_msg read;
> struct syscall_write_msg write;
> ...
> }
>
> Then in the read system call:
>
> struct syscall_read_msg *msg = &curthread->td_sysmsg.read;
>
> (Naming is up for grabs, I'm not set on any particular naming scheme)
>
> A user thread will only be in one direct system call interface
> (i.e. read(), write(), gettimeofday()) at a time, so a single
> union'd syscall message structure embedded in the lwkt_thread is
> sufficient. Other forms of system calls, such as asynch calls or
> calls related to the core userland scheduler, would allocate and/or
> use their own message structures. There is nothing wrong with,
> say, declaring a message structure on the stack, but it does cost
> more to have to re-initialize the message every time you want to
> send one.
>
> Embedd a single union in lwkt_thread allows us to reuse a message
> over and over again without having to reinitialize the core pieces of
> it (just like we did on the Amiga with IOReq's).
>
> :> * (later on) development of a kernel-supported signal infrastructure
> :> for proper POSIX signal handling.
> :
> :First pass would be synchronous signal handlers, so caught signals are
> :delivered as messages, otherwise they kill or ignore as now?
>
> Right. Ultimately that may be what we choose to use but I think it
> will be easier to add a kernel API that allows the threading system to tell
> the kernel to just funnel all signals through in a particular way,
> regardless of what the user program told the kernel to do in the signal()
> (and related) calls. Or something like that. Once the main pieces of the
> threading system are working the direction that needs to be taken in regard
> to signals will become more obvious.
>
> :> I will be focusing on the kernel side of things. I would like those
> :> interested in doing the userland threading project to focus on the
> :> userland side of things.
> :
> :dragonfly.userapi?
The upcall system of KSE seems like the best way to preempt a process for
signals. Even though there should only be one message port from what I
understand, what about 2, and having one do an upcall for things which need
immediate attention? If im misunderstanding and every time a message is
receive it jumps to a handler just ignore me.
>
> I would leave it in .kernel for the moment, because everyone is
> interested in everything. When list volume goes up we can break it
> and other categories off.
>
> -Matt
> Matthew Dillon
> <dillon at xxxxxxxxxxxxx>
- -Craig
cd5697 at xxxxxxxxxx
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (FreeBSD)
iD8DBQE/HcjiYXswu1EOVs0RAlntAKCk21lOi66B+45JqVwMWo9bhA3AHACfXYSR
zJqrG69TQnZI+duKYGp0/gI=
=Go5i
-----END PGP SIGNATURE-----
More information about the Kernel
mailing list