You could do worse than Mach ports
Matthew Dillon
dillon at apollo.backplane.com
Thu Jul 17 20:17:42 PDT 2003
:
:Although some of the communication primitives are reminiscent of
:microkernels, and there is the intent of moving some things into
:user space, he wants to avoid having applications pay the performance
:penalty in the common case. L4 is a dramatic improvement over Mach,
:but L4Linux had to be tuned to an incredible degree to get it to the
:96% of native Linux that they quoted. These days with the improvements
:that have been made in Linux 2.4 your looking at 65% of native.
:
:His emphasis is much less on protection boundaries because of the
:cost that one tends to incur from them.
:
: -Kip
Yes, precisely. I feel that protection boundaries are better handled
by the port agent. e.g. this is how a typical message is sent:
SomeMsg blah;
blah.XXX = ... /* ... fill in blah ... */
code = targetPort->mp_SendMsg(targetPort, &blah); /* send the message */
if (code == EASYNC) /* async completion? */
code = waitMsg(&blah); /* yes, wait */
return(code); /* else sync completion */
For user<->user messaging mp_sendMsg() is simply the target port's
message handling function. Ditto for kernel<->kernel messaging.
But for user<->kernel messaging or kernel<->user messaging the
targetPort would be the local representation of the port (not the
actual port), and mp_SendMsg() would broker the message to the actual
port, doing whatever work is required to deal with the protection
boundary.
Theoretically this means we can write device and VFS driveres that can
be compiled up as either user OR kernel modules. They would see the
same API either way and only mp_SendMsg() would change.
That's the idea. It is very similar to how the Amiga's I/O system
(DoIO, SendIO, BeginIO, etc) works. The performance aspects of the
design should be obvious... no queueing unless you really need to,
queueing controlled by target port's agent (could just forward to
actual target port if targetPort is a shim), no queueing the
reply unless necessary, no queueing of the reply if the client is
waiting for it synchronously, easily embeddable port/message structures,
etc.
-Matt
More information about the Kernel
mailing list