From: Ian King (iking_at_killthewabbit.org)
Date: Wed Feb 04 2004 - 17:46:34 PST
This paper describes Emerald, an operating system and companion object-oriented
programming language that implement mobility for programming objects among a
loosely-coupled set of computers. Emerald was implemented on the VAX
architecture with 10MB Ethernet links between nodes; the paper offers
performance metrics comparing this configuration with uniprocessor
implementations of benchmarks in comparable languages such as Euclid.
Much of the overhead of distributing the implementation is done in the language
compiler, and there are language constructs to support the distribution of
objects. The authors note several useful distinctions, one of which is that
between data objects and process objects; the compiler also draws a distinction,
as far as it can tell, between local objects and remote objects. One
particularly interesting implementation aspect is that the compiler will make a
'best effort' with no structural knowledge, but can take advantage of varying
degrees of programmer-generated structural knowledge. The programmer can choose
to write completely "naive" code that knows nothing of the distributed system,
or tuned code that specifies how the dstribution should be managed.
By creating their own language, the authors sidestep one of the more difficult
problems in distributed systems: hiding implementation details from application
programmers. Systems that do not impose such restrictions as implicit in the
language itself must rely either on very sophisticated language processors or
extensions to the root languages that force programmers to manage the
distribution mechanism explicitly. A particularly important distinction in
Emerald, compared to many OO languages, ist that objects are first-class
objects; the classes serve essentially as 'templates' for class construction.
Notwithstanding that distinction, Emerald also provides for sharing of static
code between objects of a given class - a useful optimization for the era of
this paper, but arguably not as significant in these days of gigabyte physical
memories.
Although apparently not original in this paper, the call-by-move semantic is
interesting, and it is somewhat intuitive that it significantly boosts the
performance of the mail-handling benchmark cited in the paper. Emerald handles
other calling protocols with intelligent optimization for the distributed
environment. The paper clearly delineates the various mobility scenarios, for
data objects and process objects, both quiescent and currently accessed/invoked.
A large amount of attention is paid to garbage collection in the distributed
environment, where reference counting might be problematic; some clever
heuristics aid here, such as "if it's being moved, it's obviously in use." The
authors also address efficiency in garbage collection - after all, it's the same
processor that's running GC algorithms as is running user code. This is really
the first explicit recognition of this issue I've read.
This archive was generated by hypermail 2.1.6 : Wed Feb 04 2004 - 17:52:13 PST