Ok, well, I'll bring up a counterpoint - one that argues for it to remain in userland.
When I examine the FreeBSD code, the ONLY thing the kernel does that one needs to be in kernel mode for is setting the signal mask. That's it. Everything else can be done in userland. So the question becomes, is it possible to have a threaded system where you can set the signal mask during a context switch and NOT have to switch into the kernel? The answer is: yes, it is possible. There is no reason why the signal mask (and signal pending bitmap) couldn't be stored in user memory, allowing the userland threading system to swap out the mask without entering the kernel. It would require having a system call that allows the userland threading system to specify the user address where the signal mask resides, but it could be done and it would not be difficult. So I think there is a very good argument for making the current release implementation do these calls in libc and not as system calls, and initially have libc just get the signal mask with a system call, then at some later date add the feature sthat allow the userland context routines to run fully without having to make any system calls at all. -Matt