From: pcg@aber.ac.uk (Piercarlo Grandi)
Newsgroups: comp.os.mach
Subject: Re: Just what is Mach?
Date: 21 Jan 93 15:31:43 GMT
Reply-To: pcg@aber.ac.uk (Piercarlo Grandi)
Organization: Prifysgol Cymru, Aberystwyth

On 16 Jan 93 01:43:45 GMT, STDN%MARIST.bitnet@YaleVM.YCC.Yale.Edu (Dan Newcombe) said:

STDN> Okay, so this may be a beginners question :) But I was reading an
STDN> article in Byte last night and they mentioned mach here and there.
STDN> I know that it's 700+ mph, and also the kernel being developed by
STDN> CMU, but just what is it?

There are many ways to answer. I could say tongue in cheek that it is
the direct result of the failure of Three Rivers Corp., or that it is
what happens when you take Accent and travesty it as some kind of Unix
to fob it on the masses. :-)

Technically Mach is an hypervisor, or a security kernel, or a
microkernel. The Mach core is a smallish set of modules that provide,
among other things, for:

	a capability based IPC mechanism
	multiple incore address spaces
	threads within address spaces
	device drivers

By far and away the most important bit is the (double indirect)
capability based IPC mechanism, which is lifted more or less identically
from Accent, and that provides for ability of Mach to support
transparent distributed services, user level pagers, and other niceties.

The Mach IPC is based on message queues, which cannot be addressed
directly by programs; programs can only access them by quoting a port
number, and ports are capabilities to queues. A given queue may be
denoted by many ports with send rights, but only by one port with
receive rights; only the processing that holds the port with receive
rights may dequeue a message from the queue. Messages are structured,
and each component has a type tag, so messages can be exchanged between
different architectures without formality.

Part of a message may be port numbers; when the message is dequeued, the
receiving process gets a copy of the port denoted by that number in the
sender process.

In this way processes can exchange capabilities to services, by sending
each other ports with send rights; since ports with receive rights can
also be sent from one process to another, it is easy to implement laod
balancing and proxies and many other neat things.

For example it is possible to instruct the hypervisor to send a message
to a given queue via a given port on all attempts tot access a given
range of address, and to wait for a reply containing data to be put in
that range of addresses. Thus any process can do paging and other
tricks ("memory objects").

Incidentally, these are very broad generalities, there have been several
versions of Mach, which are quite different in implementation, and even
somewhat different in external appearance.

A book on Mach internals is due out sonner or later, according to
net.rumours.

STDN> I have heard the Gnu Hurd is based on it, there are versions for
STDN> 386's.  Are these publically availiable?

Yes and no. At one time CMU withdrew the BSD single server source code
(the supervisor that provides emulation of BSD Unix system calls while
running under the Mach hypervisor), but it had already been distributed
widely. If you are lucky you can find a copy. There have been rumours
that instead of having a BSD server Hurd will have a Linux server, as
USL have not (yet :->) sued Linus Torvald.

STDN> Could some kind soul please enlighten me.

Would somebody unkind and soulless do? If so, I can refer you to several
net.personalities...
--
Newsgroups: comp.os.v