[comp.os.mach] Combinging UNIX-style and MACH-style messaging

ken@gvax.cs.cornell.edu (Ken Birman) (03/24/90)

I am modifying ISIS to try and benefit from the higher performance
of MACH messaging for intra-machine communication, but without
generating a Mach-only version of ISIS.

The easiest way for me to do this is to leave ISIS alone except
at the level where it actually does the sendto/recevfrom to send
a message.  If the caller is a Mach system and the destination is
on the same site (in ISIS it is easy to tell) I want to use 
msg_send to send the message and msg_rcv to receive it.

This means that I need to combine IO with UNIX system calls over
file descriptors with Mach IO using ports.

1) When I call the UNIX "select" operation, how can I get
   a file descriptor for a Mach port so that I can detect the
   presense of a message on it?
2) ISIS will need to make a transition from UDP communication to
   Mach communication in the following steps:
	process A		process B
             <initially using UNIX UDP>
      open chan. to B              .
	   .		     open ch. to A
      send B my port         send A my port   
       rcv A's port            rcv B's port
              <begin using Mach IPC>

   I need to use UDP at the start because I don't have an easy
   way to get the destination port in ISIS unless I am given it,
   and since most of my systems are non-Mach systems, I am using
   UDP by default.  In particular, the messages by which A and B
   first find out about each other are definitely going to be
   UDP messages that will have passed through a standard UNIX
   messaging subsystem and hence can't pass port rights.

Probably there is a standard manual entry explaining this.  I would
be happy looking things up with a reasonable pointer.

Thanks for the help.

Ken Birman

Richard.Draves@CS.CMU.EDU (03/27/90)

> Excerpts from netnews.comp.os.mach: 23-Mar-90 Combinging UNIX-style and
> M.. Ken Birman@gvax.cs.corne (1707)

> 1) When I call the UNIX "select" operation, how can I get
>    a file descriptor for a Mach port so that I can detect the
>    presense of a message on it?

You can't.  If you want to do both blocking selects and blocking message
operations, you need to use multiple threads.

> 2) ISIS will need to make a transition from UDP communication to
>    Mach communication in the following steps:

Your tasks need to make use of a third-party to help set up the send
rights.  The standard third-party is the netmsgserver, via the netname
name service.

Rich