RPC variations

Yuri Zaporogets yuriz@rcrhome.kirovograd.ua
Mon, 15 May 2000 23:25:33 -0200 (GMT+2)


Hello people!

A year ago I developed my own operating system and had some ideas about
implementing my own (I hope :) mechanism of RPC, I called it "Dynamic
Remote System Calls" (DRSC).

The basic idea is simple. Almost each kernel system call has an additional
parameter - address of "machine descriptor". If a value of this parameter
is NULL, then system call is being executed on a local machine, else all
necessary data about machine on which the system call must be executed
are taken from machine descriptor.

Of course, a process that will use remote syscalls must authenticate itself
in some way. Initially the process requests 'auth' syscall on a local
machine (e.g. with first parameter - address of MD - is NULL) giving to
the kernel all auth info about remote machine (login, password, etc.).
If authentication is done successfully, this process may call 'auth' or other
syscalls on remote machine.

If the process knows on which machine it wants to syscall, machine descriptors
could be created using explicitly data about that machine (IP address and port,
for example). But if there's no information about machines which are able to
execute your syscalls, a special "searching" routine must be used, for example,
like in ARP: routine sends a "broadcast" message to all machines and asks "Hey
guys, who wants to help me to do this FFT?" (for example :) . Machines who
have a small CPU load responds, and my machine stores these addresses/ports
in a cache.

And now the same but in a few words: there are NO MESSAGE PASSING BETWEEN
USER PROGRAM AND KERNEL, only old good syscalls. Message passing is invisible
for user's program, messages are being passed between the kernels on different
machines.

Here is a small example illustrating that all:

	TTYwrite(0,"There are a lot of workstations in computer room"\
		   "What indicator of FDD activity do you want to light on?");
	TTYread(0,c);
	if (c == -1) {
		md=SearchMachine(0,...); /* searching factors are various.. */
	} else md=CreateMD(c);
	
	/* Authenticate myself */
	if (md != NULL)
		if (!DoAuthenticate(0,...))    /* various auth info */
			 error ("Auth error");
	
	/* Do a syscall */
	DeviceControl(md,DEVCLASS_FDD,FDCTL_MOTORON);

	
What you, people who are creating your own OSes, think about this idea? I would
be grateful for any comments.


Happy hacking,
Yuri. 73!