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 BirmanRichard.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