Subject: Re: What is happening with libpthread???
To: John Birrell <jb@cimlogic.com.au>
From: Christian Kuhtz <kuhtz@ix.netcom.com>
List: current-users
Date: 01/20/1997 13:26:02
On Mon, 20 Jan 1997 20:49:28 +1100 (EST), John Birrell <jb@cimlogic.com.au> wrote:
> > PS: Yet another reason to run a NetBSD server or NetBSD API compliant
> > server on a Mach mk and built Pthreads on top of Mach C-Threads. 8-]
>
> Why run NetBSD at all then?

I don't want to start this thread off again, but here's my rationale for  
proposing and doing what I am already doing:

I have done Mach mk ports numerous times, and for my it is a fairly  
straightforward business, and I believe I have a thorough enough understanding  
of Mach internals to be successful at it and come up with something which  
will not only work, but perform well.

The Mach mk provides only the most basic functions.  Mach-UX relies on a OS  
server to provide an API.  Or, in case it is Mach-US we're dealing with,  
emulation libraries to possibly provide multiple APIs on a per process basis.

However, there are a bunch of goodies that come in the clue bag with this,  
and two of them I particularly like: 1.) kernel multithreading and 2.)  
multiprocessing.

It is a fully threaded kernel, and a rock-solid, fast kernel thread API is  
available to the user, which can be easily adapted to other threading API's if  
so desired, such as POSIX3.1c threads (Pthreads).

Further, I believe, that the fact that Mach mk's are by design meant to be  
multiprocessing kernels, makes it very easy to support multiprocessor  
environments.  To me, it makes more sense to take building blocks meant to  
support a particular function, than coax something that isn't meant to provide  
multiprocessing to provide multiprocessing.

And since Mach mk's 3.0 and up, even non-shared memory multiprocessor  
environments are possible and easily implemented.  The APIs themselves have no  
clue what it is below their ports to the mk (99.9% of the time).

The whole OS design is much more modular, which makes porting easier as well.  
 NetBSD has done a tremendous amount of porting work, which is easily  
absorbed.

IMHO, NetBSD is a very fine uniprocessor OS.  Efficiency for a different  
environment might need a different approach than driving a uniprocessor OS to  
be a multiprocessor OS.  Especially since there are no threads in the current  
kernel, IMHO, this job can never been of great efficiency.  It'll work, no  
doubt, but it won't be the best we can do.

Because the NetBSD server's API will be a superset of the current NetBSD API,  
 current apps will continue to run at the very least after recompilation.   
With a little extra effort, even binary compatibility can be provided.

The argument that Mach mk has more overhead than traditional architectures is  
not true per se.  Multithreading provides for significant advantages even on  
uniprocessor architectures when high I/O demands are to be serviced.  For  
efficient multiprocessing, threading is a requirement, not an option.  And  
predominantly userland threading implementations just don't cut it(TM).

That's my story.  Comments welcome, flames >/dev/null.

We'll see what happens.

--
Christian Kuhtz <ckuhtz@paranet.com>