| << Prev | - Up - | Next >> |
Remote The module Remote provides the class Remote.manager by which new Oz processes on arbitrary networked computers that also have Mozart installed can be created. Creating an instance of that class does the following two things:
A new Oz process with a module manager M is created on a networked computer.
The newly created object O serves as a proxy to M. O is called a remote module manager. This allows to start applications remotely that access remote resources by local system modules.
The methods of the class Remote.manager are as follows.
init init(host:+HostV<= localhost
fork:+ForkA<= automatic
detach:+DetachB<= false)
Creates a new Oz process at the computer with host name HostV (specified by a virtual string), where localhost is the computer running the current Oz process.
ForkA (an atom) determines an operating system command to fork the remote Oz process. The atoms 'automatic' and 'sh' have special meaning. 'automatic' is the default method. Other useful values for ForkA are 'rsh' (remote shell command) and 'ssh' (secure shell command).
sh configuration
If 'sh' is used as fork method, a new Oz engine is created on the current host by using the Unix sh command. You can test whether this method works on your computer by:
sh -c 'ozengine x-oz://system/RemoteServer.ozf --test' This should be always the case, if Mozart has been installed properly on your computer. This in particular requires that $OZHOME/bin is in your path of executables ($OZHOME refers to the directory where Mozart has been installed).
Note that the value of HostV is ignored (the hostname is assumed to be localhost), if 'sh' is used as fork method.
If HostV is 'localhost' and ForkA is 'automatic' (which is the default), then on some platforms the forked and forking processes communicate through shared memory rather than sockets, which is more efficient. The system property 'distribution.virtualsites' carries a boolean telling whether this facility, called virtual sites, is supported in the running Mozart process; the 'sh' fork method is used as a fall-back.
If HostV is different from 'localhost' and the method is 'automatic' the command 'rsh' is used. 'rsh' creates a shell remotely by using the Unix rsh command, which in turn creates the new Oz engine.
rsh configuration
Remote managers with method rsh only work properly, if the rsh command has been set up properly. You can test it for the host Host by executing the following command in the operating system shell:
rshHostozengine x-oz://system/RemoteServer.ozf --test
If the message
Remote: Test succeeded...is printed, your configuration is okay. This requires two things:
Execution of rsh Host must not prompt for a password. This is usually achieved by having a special file .rhosts in your home directory. Each entry in that file must be a host name. For those hosts having an entry in that file, rsh does not prompt for a password.
Take the following sample .rhosts file at the computer wallaby.ps.uni-sb.de:
godzilla.ps.uni-sb.de
bamse.sics.se If rsh wallaby.ps.uni-sb.de is executed on bamse.sics.se or godzilla.ps.uni-sb.de, then rsh does not prompt for a password.
With other words, all host names that you ever want to use with Remote.manager should be in .rhosts.
After the login performed by rsh the command ozengine must be executable. This should be always the case, if Mozart has been installed properly on your computer. This in particular requires that $OZHOME/bin is in your path of executables ($OZHOME refers to the directory where Mozart has been installed).
Other commands
Rather than using rsh, any value for ForkA is possible. In that case the following operating system command:
ForkAHostozengine x-oz://system/RemoteServer.ozf --test
should print the message
Remote: Test succeeded...
A prominent example of a different command and a very recommended substitute for rsh is ssh (secure shell) which is a more powerful and secure replacement for rsh. For more information on ssh, see www.ssh.fi.
If DetachB is false, a non-detached process is created. A non-detached process terminates as soon as the creating process does (think of crashes, there will be no orphaned processes). The lifetime of a detached process (that is, DetachB is true) is independent of the creating process.

On some platforms (in particular on solaris-sparc) the operating system in its default configuration does not support virtual sites efficiently. Namely, the Solaris OS limits the total number of shared memory pages per process to six and the number of shared memory pages system-wide to 100, while each connected Mozart process requires at least two shared memory pages for efficient communication. Please ask your system administrator to increase those limits with respect to your needs.

The Mozart system tries to do its best to reclaim shared memory identifiers, even upon process crashes, but it is still possible that some shared memory pages become unaccounted and thus stay forever in the OS. In these cases please use Unix utilities (on Solaris and Linux these are ipcs and ipcrm) to get rid of them.
link link(url:+UrlVModuleR<= _)
link(name:+NameVModuleR<= _)
Links the module identified either by a url UrlV (a virtual string) or a module name NameV (a virtual string). Returns a module ModuleR.
For explanation see Chapter 2.
apply apply(+FunctorModuleR<= _)
apply(url:+UrlV+FunctorModuleR<= _)
apply(name:+NameV+FunctorModuleR<= _)
Applies the functor Functor, where the url UrlV (a virtual string) or the module name NameV (a virtual string) serve as base url for resolving the functor's import.
For explanation see Chapter 2.
enter enter(url:+UrlVModuleR)
enter(name:+NameVModuleR)
Installs the module ModuleR under the url UrlV (a virtual string) or the module name NameV (a virtual string).
For explanation see Chapter 2.
ping ping()
Raises exception if remote process is dead. Blocks until executed by remote process.
close close()
Performs a controlled shutdown of all remote processes (for a discussion of controlled shutdown see Section 2.2.1 of ``Distributed Programming in Mozart - A Tutorial Introduction'').
Here are some tentative explanations of what happens to the children of a process when the latter is terminated.
if a process is properly shutdown, then detached children survive and non-detached children are terminated.
if a process is killed with kill -INT, then its children are terminated whether they are detached or not.
if a process is killed with kill -KILL, then no child is terminated because the proper shutdown sequence is not executed.
if a process is killed by typing C-c, then the INT signal is sent to the process group to which both parent and children belong.1 Thus all are terminated.
| << Prev | - Up - | Next >> |