You are on page 1of 39

Concurrency and Distribution in Object-Oriented Programming

JEAN-PIERRE BRIOT
Laboratoire d’Informatique de Paris 6, UPMC—Case 169, 4 place Jussieu, 75252 Paris Cedex 05,
France; email: ^Jean-Pierre.Briot@lip6.fr&.

RACHID GUERRAOUI
Département d’Informatique, École Polytechnique Fédérale de Lausanne, CH-1015, Lausanne,
Switzerland; email: ^rachid.guerraoui@epfl.ch&.

AND
KLAUS-PETER LÖHR
Institut für Informatik, Freie Universität Berlin, D-14195 Berlin, Germany; email:
^lohr@inf.fu-berlin.de&.

This paper aims at discussing and classifying the various ways in which the object
paradigm is used in concurrent and distributed contexts. We distinguish among the
library approach, the integrative approach, and the reflective approach. The library
approach applies object-oriented concepts, as they are, to structure concurrent and
distributed systems through class libraries. The integrative approach consists of
merging concepts such as object and activity, message passing, and transaction,
etc. The reflective approach integrates class libraries intimately within an object-
based programming language. We discuss and illustrate each of these and point
out their complementary levels and goals.

Categories and Subject Descriptors: C.1.2 [Processor Architectures]: Multiple


Data Stream Architectures; C.2.4 [Computer–Communication Networks]:
Distributed Systems; D.1 [Software]: Programming Techniques; D.3.2
[Programming Languages]: Language Classifications; D.4.1 [Operating
Systems]: Process Management; D.4.4 [Operating Systems]: Communications
Management; D.4.5 [Operating Systems]: Reliability; I.2.11 [Artificial
Intelligence]: Distributed Artificial Intelligence; H.2.4 [Database Management]:
Systems
General Terms: Languages, Reliability, Performance
Additional Key Words and Phrases: Concurrency, distribution, integration,
libraries, message passing, object, reflection

1. INTRODUCTION strong enough to structure and encap-


sulate modules of computation and flex-
It is now well accepted that the object ible enough to match various granulari-
paradigm provides good foundations for ties of software and hardware
the new challenges of concurrent and architectures.
distributed computing. Object notions, Most object-based programming lan-
rooted in the data-abstraction principle guages do have some concurrent or dis-
and the message-passing metaphor, are tributed extension(s), and almost every
Permission to make digital / hard copy of part or all of this work for personal or classroom use is granted
without fee provided that the copies are not made or distributed for profit or commercial advantage, the
copyright notice, the title of the publication, and its date appear, and notice is given that copying is by
permission of the ACM, Inc. To copy otherwise, to republish, to post on servers, or to redistribute to
lists, requires prior specific permission and / or a fee.
© 1998 ACM 0360-0300/98/0300–0291 $5.00

ACM Computing Surveys, Vol. 30, No. 3, September 1998


292 • J.-P. Briot et al.

CONTENTS classifying and discussing the various


1. INTRODUCTION ways in which the object paradigm is
1.1 A Coarse Classification in Three Approaches used in concurrent and distributed con-
1.2 Complementarity of the Approaches
1.3 Concurrency and Distribution
texts.
1.4 Previous Work
2. THE LIBRARY APPROACH
1.1 A Coarse Classification in Three
2.1 Modularity and Structuring Needs
2.2 Smalltalk Libraries Approaches
2.3 C11 Libraries
2.4 In Search of Standard Abstractions By analyzing current experience and
3. THE INTEGRATIVE APPROACH trends (as for instance reported in
3.1 Unification Needs [Meyer 1993]), we have distinguished
3.2 Dimensions of Integration three main approaches in object-based
3.3 Active Objects
3.4 Synchronised Objects
concurrent and distributed program-
3.5 Distributed Objects ming: the library approach, the integra-
3.6 Limitations of the Integrative Approach tive approach and the reflective ap-
4. THE REFLECTIVE APPROACH proach. This paper discusses and
4.1 Combining Flexibility and Transparency
4.2 Reflection
illustrates these three approaches.
4.3 Reflection and Objects The library approach (Section 2) ap-
4.4 Examples of Meta Object Protocols (MOPs) plies object-oriented concepts, as they
4.5 Examples of Applications are, to structure concurrent and distrib-
4.6 Other Examples of Reflective Architectures uted systems through class libraries.
4.7 Related Models
5. PERSPECTIVES
Various components, such as processes,
5.1 The Library Approach synchronization means, files, and name
5.2 The Integrative Approach servers, are represented by various ob-
5.3 The Reflective Approach ject classes (services). This approach
5.4 Integrating the Approaches
6. SUMMARY
provides genericity of the software ar-
chitectures. Programming remains
mostly standard (sequential) object-ori-
ented programming. Roughly speaking,
new architectural development in the the basic idea is to extend the library
distributed system community is, to rather than the language.
some extent, object-based. For instance, The integrative approach (Section 3)
both the Open Distributed Processing consists in unifying concurrent and dis-
(ODP) and the Object Management tributed system concepts with object-
Group (OMG), recent standardization oriented ones. For example, merging the
initiatives for heterogeneous distributed notions of process and object gives rise
computing, are based on object concepts to the notion of active object, and merg-
[Nicol et al. 1993; OMG 1995; Mowbray ing the notions of transaction and object
et al. 1995. invocation gives rise to the notion of
As a result, many object-based con- atomic invocation. However, integration
current, parallel, or distributed models, is not always that smooth. We will see
languages, or system architectures have that concepts may be in conflict, notably
been proposed and described in the lit- inheritance with synchronization and
erature. Towards a better understand- replication with communication (see
ing and evaluation of these proposals, Section 3.6).
this paper discusses how object concepts The reflective approach (Section 4) in-
are articulated (applied, customized, in- tegrates protocol libraries within an ob-
tegrated, expanded, and so on) with con- ject-based programming language. The
currency and distribution challenges idea is to separate the application pro-
and current technology. Rather than an gram from the various aspects of its
exhaustive study of various object-ori- implementation and computation con-
ented concurrent and distributed pro- texts (models of computation, communi-
gramming systems, this paper aims at cation, distribution, etc.), which are de-

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 293

scribed in terms of metaprograms. This 1.3 Concurrency and Distribution


makes possible (dynamic) system cus-
Before presenting our classification in
tomization with minimal impact on the
more detail, we first briefly clarify our
application programs.
use of the terms concurrency and distri-
bution.
There are different ways of running a
1.2 Complementarity of the Approaches concurrent program on an execution
Although these approaches may at first platform. The program may be executed
glance appear in conflict, in fact they on a uniprocessor, for example, using a
are not. More precisely, research di- threading system, or on a parallel com-
rected along these approaches has com- puter. Thus, while concurrency is a se-
plementary goals. mantic property of a program, parallel-
The library approach is oriented to- ism pertains to its implementation as
determined by the compiler and other
wards system builders and aims at
systems software.
identifying basic concurrent and distrib-
In contrast to parallelism, which may
uted abstractions. This approach pro-
usually be seen as the implementation
vides services and constructs for build- of concurrency, distribution is more an
ing an object-based concurrent or independent notion. First, distribution
distributed model. does not necessarily imply concurrency:
The integrative approach is oriented a purely sequential program may be
towards application builders, and aims executed across machine boundaries us-
at defining a high-level programming ing remote procedure calls (i.e., in a
language with few unified concepts. distributed fashion). The situation with
This approach assumes an object-based client/server systems is similar: while a
concurrent or distributed model that de- server may or may not be concurrent,
scribes how the services interact. its clients rarely are; only when we view
The reflective approach is oriented to- a server and its clients as one system do
wards both application builders and we see a concurrent system operating in
system builders. It may be considered a a distributed fashion. Second, distribu-
“bridge” between the two previous ap- tion intrinsically implies independent
proaches as it helps to integrate trans- failures; that is, part of a program
parently various computing protocol li- might stop running (because of a crash
braries within a programming language/ failure), whereas the rest of the pro-
system. Moreover, it helps in combining gram might still be running. In a con-
the two other approaches by making current but not distributed context, it is
explicit the separation of and interface usually assumed that programs have
between their respective levels (i.e., the total failure semantics: either the com-
integrative approach for the end user plete program is running or none of it is.
and the library approach for developing
and customizing the system). The suc-
cess of a reflective system relies both on 1.4 Previous Work
a high level programming language and The reader is assumed to be familiar
on a rich library of concurrent and dis- with traditional concurrency and distri-
tributed programming abstractions. bution concepts, such as described in
It is important to notice that the Andrews [1991]. It should also be kept
three approaches do not correspond to in mind that object-based concurrent
disjoint categories of languages and sys- and distributed programming are well-
tems. As we point out, for example, in established disciplines that are sup-
Section 5.4, some languages and sys- ported by many languages. On the one
tems are built following more than one hand, Ada [1983] is a well-known exam-
approach. ple of a concurrent object-based lan-

ACM Computing Surveys, Vol. 30, No. 3, September 1998


294 • J.-P. Briot et al.

guage and SR [Andrews et al. 1993], bell et al. 1993], based on the concept of
although less known, features versatile the microkernel. The architecture of the
and powerful concurrency constructs. (generic) distributed operating system
Argus [Liskov and Sheifler 1983] and is organized along abstract notions of
Emerald [Black et al. 1987] have be- class components, which may then be
come known for their distribution sup- specialized for a given instantiation/
port. porting of the (virtual) system. Such
Combining concurrency and distribu- systems are easier to understand, main-
tion with object orientation proper, that tain and extend, and should also ulti-
is, including inheritance, has been the mately be more efficient as only the
subject of many research projects since required modules have to be used for a
1985. Several new language designs given computation.
representing the integrative approach To illustrate the library approach, we
are discussed and compared in Papatho- survey examples of libraries for concur-
mas [1989; 1995]. An early book featur- rent and for distributed programming in
ing different articles on concurrent ob- two different well-known object-ori-
ject-oriented programming is by ented languages: (1) the Smalltalk-80
Yonezawa and Tokoro [1987]; a more programming language and environ-
recent one is by Agha et al. [1993]. ment, where a basic and simple object
Furthermore, several workshops have concept is uniformly applied to model
been devoted to object-based concur- and structure the whole system through
rency and distribution: see Agha [1989]; class libraries, including concurrency
Agha et al. [1991]; Briot et al. [1995]; and distribution aspects; and (2) C11,
Guerraoui et al. [1994]; and Tokoro et whose widespread use has resulted in a
al. [1992]. proliferation of concurrency libraries
[Wilson and Liu 1996].
2. THE LIBRARY APPROACH
2.2 Smalltalk Libraries
2.1 Modularity and Structuring Needs
Smalltalk is often considered as one of
The basic idea of the library approach is the purest examples of object-oriented
to apply encapsulation and abstraction, languages [Goldberg and Robson 1989].
and possibly also class and inheritance This is because its credo is to have only
mechanisms, as a structuring tool to a few concepts (object, message passing,
design and build concurrent and distrib- class, inheritance) and to apply them
uted computing systems. In other uniformly to any aspect of the language
words, the issue is to build and program and environment. One consequence is
a concurrent or distributed system with that the language is actually very sim-
a given object-oriented methodology and ple. The richness of Smalltalk comes
a given object-oriented programming from its set of class libraries, which
language. The main motivation is to describe and implement various pro-
increase modularity by decomposing gramming constructs (control struc-
systems into various components with tures, data structures, and so on), inter-
clear interfaces. This improves structur- nal resources (messages, processes,
ing of concurrent and distributed sys- compiler, and so on), and a sophisti-
tems, as opposed to UNIX-style sys- cated programming environment with
tems, in which the different levels of integrated tools (browser, inspector, de-
abstraction are difficult to distinguish bugger, and so on).
and understand. Actually, even basic control struc-
Applied to distributed operating sys- tures, such as loop and conditional, are
tems, the library approach has led to a not primitive language constructs, but
new generation of systems, such as Cho- just standard methods of standard
rus [Rozier 1992] and Choices [Camp- classes that make use of the generic

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 295

Figure 1. Hierarchy of concurrency classes in Simtalk.

invocation of message passing. They are Simtalk [Bézivin 1989] or Actalk [Briot
based on booleans and execution clo- 1989] platforms. The Simtalk platform
sures (blocks). Blocks, represented as implements and classifies various syn-
instances of class BlockClosure, are chronization and simulation abstrac-
essential for building various control tions (pessimistic or optimistic simula-
structures that the user may extend at tion objects, Hoare monitors, Kessels
his wish. monitors, etc.) on top of Smalltalk stan-
dard abstractions/classes. A sample of
2.2.1 Libraries for Concurrent Programming the hierarchy of Simtalk classes is
shown in Figure 1. Within the Actalk
In Smalltalk, blocks are also the basis project for instance, the standard sched-
for multithreaded concurrency through uler was extended to parametrize and
processes. The standard class Process classify various scheduling policies.
describes their representation and its
associated methods implement process 2.2.2 Libraries for Distributed Pro-
management (suspend, resume, adjust gramming. Smalltalk offers libraries
priority, and so on). The behavior of the for remote communication, such as
process scheduler is itself described by Sockets and RPC, as well as standard
the class ProcessorScheduler. The libraries for storage and exchange of
basic synchronization primitive is the object structures for persistence, trans-
semaphore, represented by the class actions, and marshaling. The standard
Semaphore. Standard libraries also in- Smalltalk Binary Object Streaming Ser-
clude higher abstractions: class Shared- vice (BOSS) library provides basic
Queue to manage communication be- support for building distribution mech-
tween processes, and class Promise for anisms, e.g., marshaling and transac-
representing the eager evaluation of a tions. The HP Distributed Smalltalk
value computed by a concurrently exe- product provides a set of distributed
cuting process. services following the OMG (CORBA)
Thanks to this uniform approach, con- standard [OMG 1995], themselves im-
currency concepts and mechanisms are plemented as Smalltalk-80 class li-
well encapsulated and organized in a braries.
class hierarchy. Thus, they are much Projects like GARF [Garbinato et al.
more understandable and extensible 1994; 1995] and BAST [Garbinato et al.
than if they were just simple primitives 1996; Garbinato and Guerraoui 1997] go
of a programming language. Further- a step further in providing abstractions
more, it is relatively easy to build up on for reliable distributed programming. In
the basic standard library of concur- GARF, two complementary class hierar-
rency classes to construct more sophisti- chies have been developed for various
cated abstractions, as for example in the communication models (point-to-point,

ACM Computing Surveys, Vol. 30, No. 3, September 1998


296 • J.-P. Briot et al.

Figure 2. Communication in GARF.

multicast, atomic multicast . . .) and ob- guage for object-oriented systems pro-
ject models (monitor, persistent, repli- gramming. As a consequence, building
cated . . .). For instance, class Mailer concurrency and distribution libraries
implements remote message passing. in C11 has been more than a marriage
Class Abcast (a subclass of Mailer) of convenience. As explained in Section
broadcasts an invocation to a set of rep- 1.2, the systems programmer needs flex-
licated objects, and ensures that the ibility and therefore prefers libraries to
messages are totally ordered (ensure built-in features. She also likes to ex-
the consistency of the replicas). These ploit the low-level mechanisms and ser-
classes constitute adequate support for vices offered by the underlying execu-
the development of fault-tolerant appli- tion platform. As the library approach
cations where critical components are allows any functionality of a given plat-
replicated on several nodes of a net- form to be wrapped in C11 functions or
work. A sample of the hierarchy of classes, it is not surprising that a wide
GARF classes is shown in Figure 2. variety of concurrency and distribution
The BAST project aims at building mechanisms are cast in C11 libraries.
abstractions at a lower level. Roughly In fact, any programmer can readily
speaking, BAST provides distributed build wrappers for concurrency and dis-
protocols, such as total-order multicast tribution mechanisms from her favorite
and atomic commitment, that are used platform.
in the implementation of GARF classes.
For instance, BAST supports classes 2.3.1 Libraries for Concurrent Pro-
UMPObject for unreliable message gramming. Class libraries can be built
passing and subclasses RMPObject and for all kinds of process concepts, heavy-
RMPObject, respectively, for reliable weight or lightweight, and for their cor-
multicast communication [Garbinato et responding synchronization mecha-
al. 1996; Garbinato and Guerraoui, nisms. Many concurrent programs are
1997]. conveniently implemented using a
threading system (e.g., network servers,
2.3 C11 Libraries
interactive programs, parallel pro-
As opposed to Smalltalk, C11 is not grams). We look first into object-ori-
genuinely object-oriented [Stroustrup ented threading libraries.
1993]: it is an object-oriented extension
of C, a language originally designed for Representation of threads. Although
systems programming. Thus, C11 is defining classes for synchronization ob-
not the ideal vehicle for building object- jects such as semaphores is a straight-
oriented applications. Nevertheless, it forward exercise, it is not obvious how
has become the most widely used object- to cast a thread abstraction into a class.
oriented language, and it is the lan- There are at least three different ways,

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 297

Figure 3. Customized Sun C11 task object.

depending on how the activity of a Note that the lifetime of its activity may
thread object is described: be shorter than its own lifetime (as an
object).
(1) A thread is an instance of a subclass
An example of the first approach is
of some class Thread, and the activ-
the coroutine part of Sun’s C11 library
ity of the thread is described by the
constructor of the subclass. This is [Sun 1995]. The library offers a class
akin to the Simula approach to co- task (i.e., this plays the role of the class
routines [Birtwistle et al. 1973]: the Thread in the preceding classification).
body of a coroutine class describes A task object is implemented as a co-
both initialization and activity of a routine with nonpreemptive scheduling.
coroutine object. There is also a class Inter-
rupt_handler that allows catching
(2) A thread is an instance of a subclass
UNIX software interrupts (signals).
of class Thread, but its activity is
Typical operations on tasks are re-
described by overriding a special
method. sult() (wait for termination), rd-
state() (get state), and the like. Syn-
(3) A thread is an instance of class chronization is supported by low-level
Thread, and its activity is described wait operations and by object queues.
by a function that is passed as a
Figure 3 shows a fragment of a simple
parameter to the constructor or a
program using the coroutine library.
special method.
The main program, by declaring the ob-
In all these approaches, creating a ject p, creates a task which executes the
thread object spawns a new thread. producer() constructor. There is no

ACM Computing Surveys, Vol. 30, No. 3, September 1998


298 • J.-P. Briot et al.

Figure 4. Architecture of the ACE concurrency library.

interaction between parent and child subsume the threading mechanisms of


task, except that the child terminates different platforms (POSIX, Solaris 2,
producing a result, which is picked up Win32), thus enhancing portability.
by the parent. Figure 4 shows part of the layered
An example of the third approach is architecture of the ACE concurrency
found in PRESTO, a system for parallel class library. Portability of the concur-
programming on a multiprocessor [Ber- rency classes is achieved through a
shad et al. 1988]. A newly created class OS that just packages threading-
thread is idle until explicitly started. related functions, hiding the peculiari-
The function to be executed (and its ties of different native threading sys-
parameters) are passed as parameters tems.
to the start operation. For synchroni- ACE has classes Mutex, Semaphore,
zation, PRESTO features atomic inte- RW_Mutex, and others for synchroniza-
gers and lock, monitor and condition tion. A class template Guard is parame-
classes. terized with a lock class (e.g., Mutex). A
An alternative is found in DC11, guard object acquires and releases a
where the function to be executed is lock upon initialization and finalization,
passed to the constructor. DC11 [Schill respectively, similarly to a PRESTO
and Mock 1993] is a system for distrib- monitor object; thus, declaring a guard
uted execution of C11 programs on top in a block turns this block into a critical
of DCE, the OSF Distributed Comput- region. (Note that ACE guards have
ing Environment [OSF 1994]. While nothing to do with the Boolean expres-
DC11 focuses on distribution, it also sion guards used in genuinely concur-
offers a few classes for concurrent pro- rent languages.)
gramming. Concurrency is implemented Threads are handled on a very low
using the DCE threading subsystem. level of abstraction in ACE. There does
Thus, DC11 is readily ported to any exist a class Thread (see Figure 5), but
system that is equipped with the DCE this is just a package of static functions
platform. The DC11 library includes a such as spawn, join, yield, and the
class Thread as described above, plus a like, abstracting from the idiosyncrasies
few classes for synchronization. Param- of the threading functions of POSIX,
eters of the Thread constructor allow Solaris, and Win32. Another class,
the user to choose among different Thread_Manager, serves the purpose of
scheduling policies.
creating and using thread manager ob-
The ACE library. ACE stands for jects; they are responsible for managing
Adaptive Communications Environment groups of threads, spawning new mem-
[Schmid 1995]; it is a toolkit for devel- bers, disposing of a thread when it ter-
oping communication-oriented software. minates, and so on. But there is no class
One of the goals of the ACE threading resembling Smalltalk’s Process or the
library is to present abstractions that task from Figure 3.

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 299

Figure 5. Class Thread in ACE.

A relatively high-level concept in ACE The AVTL library. The challenge of


is the Task class. This class must not be object-oriented programming for paral-
confused with Sun’s task class men- lel computing systems is to find an ob-
tioned previously. Task is an abstract ject model that fits in with the preferred
class whose interface is designed for use models for parallel computation. For a
according to the stream/module concept library-based solution there is no
for layered communication. Subclass ob- choice—the object model is given by the
jects of Task can participate in a batch sequential language. Here, the most
of modules implementing a stream. straightforward path to parallel pro-
Each task must provide a put operation cessing is just executing concurrent pro-
to be invoked from an adjacent module grams with threads on a shared-mem-
in a stream and an svc operation (“ser- ory multiprocessor, as mentioned for
vice”) for asynchronous execution of the PRESTO. This produces functional par-
invoked service in the case of an active allelism, but no data parallelism.
task object. The Amelia Vector Template Library

ACM Computing Surveys, Vol. 30, No. 3, September 1998


300 • J.-P. Briot et al.

(AVTL) [Sheffler 1996] is an example of for the design both of distributed appli-
library support for parallel processing of cations and of new extensions to the
vectors. Although an approach like Choices kernel.
AVTL is tailored towards a specific A specific C11 class library has been
class of applications, it has the advan- developed. For instance, class Object-
tage of hiding communication from the Proxy implements remote communica-
programmer. If we are willing to pay tions between objects, classes Memo-
the price of low-level message-based ryObject and FileStream represent
programming, unlimited flexibility is memory management, and class Ob-
achieved by libraries that connect to a jectStar provides some generalized
communication platform, for example, notion of pointer. Class ObjectStar
MPI [Skjellum et al. 1996]. Libraries of provides transparency for remote com-
this kind can be seen as the “parallel” munications without the need for a pre-
equivalent to threading libraries as de- compilation step. This class is also used
scribed previously. by the automatic garbage collector.
Class Disk abstracts and encapsulates
2.3.2 Libraries for Distributed Pro- a physical storage device that may be
gramming. We have seen that for instantiated, for example, in class
C11, the library approach tends to mir- SPARCstationDisk when porting
ror the functionality of the underlying Choices onto a SPARC station.
execution platform. This is true not only The experience of the Choices projects
for concurrency but also for distribu- shows that a distributed operating sys-
tion. So we often find library classes tem, developed with an object-oriented
that encapsulate remote communication methodology and programming lan-
mechanisms such as ports or sockets guage (C11 in this case), helps in
(e.g., ACE supports UNIX socket ob- achieving better genericity and extensi-
jects). bility.
DC11. The DC11 system men-
tioned previously supports remote ob- Peace. Similar in spirit to Choices,
ject invocation. Note, however, that dis- the Peace parallel operating system
tribution and concurrency are not [Schröder-Preikschat 1994] has as its
strictly orthogonal in DC11. Remote target distributed memory multicom-
invocation comes in two flavors: syn- puters. Like Choices, Peace is actually a
chronous and asynchronous (where family of object-oriented operating sys-
asynchrony leads to truly parallel exe- tems. Its components, implemented in
cution of client and server). Asynchro- C11, can be configured in different
nous invocation of local objects, how- ways in order to fit different hardware
ever, is not directly supported. platforms and offer varying functional-
Ironically, this implies that it is easier ity.
in DC11 to write a distributed program Peace makes heavy use of inheritance
than to write a centralized one. in implementing the system family con-
cept. A stepwise bottom-up design of
Choices. Choices [Campbell et al. minimal extensions using subclasses re-
1993] is a generic operating system, of sults in a fine-grain inheritance hierar-
which the objective is not only to be chy. Exploiting this scheme, application
easily ported onto various machines, programs interface to the operating sys-
but also to be able to adjust various tem simply by extending certain system
characteristics of both hardware, re- classes.
sources, and application interfaces such The basic unit of concurrent execu-
as: file format, communication network, tion, the thread, is introduced through a
and memory model (shared or distrib- series of abstractions. Most threads are
uted). An object-oriented methodology made up from two objects of classes
is presented together with the system, native and thread, respectively. The

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 301

class native describes the kernel-level dependence of these three components


part of the thread and class thread are intended to help with the develop-
refers to the user-level part. An applica- ment of generic and reusable programs.
tion program can declare a subclass of An example of developing standard
thread, say custom, redefining the libraries for the basic support of distrib-
method action() inherited from class uted programming may be found
thread. Creating a custom object [Brandt and Lehrmann-Madsen 1994]
causes the creation of a thread that in the Beta programming language [Le-
executes the redefined action(). hrmann-Madsen et al. 1993]. For in-
stance, class NameServer represents a
2.4 In Search of Standard Abstractions name server that maps textual object
names to physical references. Class Er-
The main issue underlying the library rorHandler manages partial errors/
approach is the design and implementa- faults of a distributed system. This ap-
tion of adequate abstractions on top of proach enables the programmer to add
which various higher-level concurrency distributed features to a given sequen-
abstractions can be built in a conve- tial/centralized program without chang-
nient way. ing the program logic, that is, through
One of the most significant examples additions rather than changes [Brandt
for concurrent programming is the and Lehrmann-Madsen 1994, p. 199].
semaphore abstraction, which, through A fundamental study of abstractions
a well-defined interface (wait and sig- for distributed programming has been
nal operations) and a known behavior proposed by Black [1991], where decom-
(metaphor of the train semaphores), posing the concept of transaction into a
represents one standard of synchroniza- set of abstractions is suggested. The
tion for concurrent programming. Such goal is to represent concepts such as
a basic abstraction may be used as a lock, recovery, and persistence through a
foundation to build various higher-level set of objects that must be provided by a
synchronization mechanisms (e.g., the system in order to support transactions.
Guard class of ACE). Classification and The modularity of this approach would
specialization mechanisms, as offered help in defining various transaction
by object-oriented programming, are models adapted to specific kinds of ap-
then appropriate for organizing such a plications. For instance, a computer-
library/hierarchy of abstractions, as for supported cooperative application does
instance in the Simtalk platform (Sec- not need concurrency-control con-
tion 2.2). Peace is a typical example of straints as strong as those required for
an extremely careful design of a hierar- a banking application.1 The BAST
chy of thread abstractions. project [Garbinato and Guerraoui 1997]
An example of developing concurrency aims at defining reliable distributed
abstractions complementary to program protocols from a set of minimal abstrac-
abstractions can be found in the Deme- tions. One of these abstractions, the
ter environment [Lopes and Lieberherr consensus, plays the role of the sema-
1994]. The abstract specification of a phore in a distributed context.
program is decomposed into two loosely
coupled dimensions: the “structural 3. AN INTEGRATIVE APPROACH
block,” which represents relations be-
tween classes, and the “behavioral 3.1 Unification Needs
block,” which describes the operations.
The number of issues and concepts re-
A third dimension has recently been
quired is one of the major difficulties of
added: the “concurrency block,” which
describes the abstract synchronization 1
The former application requires strict serializa-
patterns between processes. The ab- tion of transactions through a locking mechanism,
stract specifications and the relative in- whereas the latter does not.

ACM Computing Surveys, Vol. 30, No. 3, September 1998


302 • J.-P. Briot et al.

concurrent and distributed program- guage or system may follow one dimen-
ming. In addition to classical constructs sion of integration but not another.
of sequential programming, concurrent
and distributed computation introduces (1) A first level of integration between
concepts such as process, semaphore, the concept of an object and the
monitor, and transaction. The library concept of a process (more generally
approach helps in structuring concur- speaking, the concept of an autono-
rency and distribution concepts and mous activity) leads to the concept
mechanisms, but keeps them disjoint of an active object. Indeed, an object
from the objects structuring the applica- and a process may both be consid-
tion programs. In other words, the pro- ered as communicating encapsu-
grammer still faces at least two differ- lated units (as noted in Meyer
ent major issues: programming with [1993]). Actor languages [Lieberman
objects and managing concurrency and 1987; Agha 1986] are typical exam-
distribution of the program, also with ples of programming languages
objects but not the same objects! based on the notion of an active
Furthermore, when using libraries, object. Objects that are not active
the programming style may become a are sometimes called passive.
little cumbersome, as the concurrency (2) A second level of integration associ-
and distribution aspects (and more spe- ates synchronization with object ac-
cifically the manipulation of the objects tivation, leading to the notion of a
implementing them) add to the stan- synchronized object. Message pass-
dard programming style. For instance, a ing is then considered an implicit
library implementing asynchronous and synchronization between the sender
remote communication in Eiffel will and the receiver. Furthermore, one
force the programmer to do some often associates mechanisms for
amount of explicit message manipula- controlling the activation of invoca-
tion (see Karaorman and Bruno [1993, tions at the level of an object, for
pp. 109–111]), as opposed to standard example, by attaching a guard to
implicit message passing. One may then each method. Note that the concept
choose to integrate such constructs di- of an active object already implies
rectly into the programming language some form of synchronized object, as
as the extension of a standard language, the existence of a (single) activity
for example, Eiffel// [Caromel 1990], or private to the object actually en-
to define a brand-new language contain- forces the serialization of invoca-
ing that construct. tions. However, some languages or
Rather than leaving the object pro- systems, such as Guide [Balter et al.
grams and the management of concur- 1994] or Arjuna [Parrington and
rency and distribution orthogonal, the Shrivastava 1988], associate syn-
integrative approach aims to merge chronization with objects although
them by integrating concepts and offer- they distinguish the notions of ob-
ing the programmer a unified object ject and autonomous activity. An-
model. other more recent example is Java
[Lea 1997], where a new private
lock is implicitly associated with
3.2 Dimensions of Integration
each newly created object.
There are various possible levels of inte- (3) A third level of integration considers
gration between object-oriented pro- the object as the unit of distribution,
gramming concepts and concurrency leading to the notion of a distributed
and distribution concepts. Here we dis- object. Objects are seen as entities
tinguish three main levels. Note that that may be distributed and repli-
they are relatively independent of each cated on several processors. The
other. Thus, as we show, a given lan- message-passing metaphor is seen

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 303

as a transparent way of invoking —Concurrent. There is true intraobject


either local or remote objects. Emer- concurrency but some degree of con-
ald [Black et al. 1987] is an example trol (i.e., restrictions) applies, as spec-
of a distributed programming lan- ified by the programmer. Example
guage based on the notion of distrib- languages are actor languages such
uted object. One can also further as ACT11 [Kafura and Lee 1990]
integrate message passing with the and also CEiffel [Löhr 1993].
transaction concept, so as to support —Fully concurrent. Concurrency within
interobject synchronization and the object is not restricted. This usu-
fault tolerance [Liskov and Sheifler ally means that such objects are func-
1983; Guerraoui et al. 1992]. tional (they have no state or at least
no changing state). Actor languages
3.3 Active Objects support such fully concurrent objects,
where they are called unserialized ac-
The basic idea leading to the concept of tors.
an active object is to consider an object
having its own computing resource, that Setting the possible level (or levels) of
is, its own private activity. This ap- object-internal concurrency for a pro-
proach, simple and natural, is quite in- gramming language is a design deci-
fluential [Yonezawa and Tokoro 1987], sion, and an important one. Some re-
following the course of actor languages searchers have argued that intraobject
[Lieberman 1987; Agha 1986]. concurrency should be banished alto-
gether because reasoning about pro-
3.3.1 Levels of Object Concurrency. grams that contain only serial objects is
The independence of object activities much easier [Meyer 1993]. But single-
provides what is usually called interob- threaded active objects are prone to the
ject concurrency. Some languages (e.g., same pitfalls as nested monitors, al-
POOL [America and van der Linden though the problem is mitigated when
1990]) provide only this level of concur- using asynchronous invocation. Allow-
rency. In several computation models, ing intraobject concurrency increases
however (e.g., Actors [Agha 1986]), an the expressive power as well as the
active object is allowed to process sev- overall concurrency, but requires some
eral requests simultaneously, thus own- additional concurrency control in order
ing more than one internal activity: this to ensure object state consistency, and
is called intraobject concurrency. some careful management of resources
More generally, one may consider dif- in order to maintain efficient implemen-
ferent levels of object concurrency. Our tations.
classification extends that of Wegner Last, note that for efficiency reasons,
[1990]. An active object may be: fully concurrent objects are usually im-
plemented as passive objects (i.e., stan-
—Serial or atomic. Only one message is dard objects without any activity) with-
computed at a time. Examples of lan- out any synchronization, and are
guages offering serial active objects replicated on every processor. Thus ev-
are POOL [America 1987] and Eiffel// ery invocation from an active object is
[Caromel 1990]. immediately processed in the resource
—Quasiconcurrent. Several method ac- (process) of the sender.
tivations may coexist, but at most one
of them is not suspended. (This is 3.3.2 Reactivity Versus Autonomy.
similar to a monitor using event vari- One of the important characteristics of
ables to suspend processes.) Examples object-oriented programming is the re-
of languages are ABCL/1 [Yonezawa activity principle (as stated by Kay in
et al. 1986] and ConcurrentSmalltalk the late ’60s [Kay 1969]). An object is
[Yokote and Tokoro 1987]. said to be reactive in the sense that it

ACM Computing Surveys, Vol. 30, No. 3, September 1998


304 • J.-P. Briot et al.

reacts to an event (when receiving a issue, one’s first impression could be


message). Moreover, the only way to that reactivity always implies implicit
activate an object is by sending a mes- acceptance and that autonomy always
sage to it. This is opposed to the idea of implies explicit acceptance. This is often
a process, which starts processing as the case, but not always.
soon as created.
—ABCL/1 is a programming language
The integration of object with process
based on the concept of reactive active
(the concept of active object) raises the
object that offers explicit message ac-
issue of whether reactivity will be pre-
ceptance from within a method.
served or shadowed by the autonomous
behavior of the process. We may distin- —CEiffel supports autonomous objects.
guish two families of active objects: But methods are activated implicitly,
independently of any explicit message
—Reactive active object. It adheres to acceptance (see Section 3.3.5).
the reactivity principle, and thus can —The synchronization scheme, abstract
be activated only through message states, (described in Section 3.4.3)
passing. Example languages are ac- combines implicit acceptance with
tors, as in ACT11 and also CEiffel. some explicit matching of a message.
—Autonomous active object. It may com-
pute before being sent a message. Ex- 3.3.4 The Concept of a Body. Most
ample languages are POOL and languages following the model of an au-
Eiffel//. tonomous active object are based on the
concept of a body: some distinguished
Although the models are opposite, centralized operation that explicitly de-
please note that they can very easily scribes the types and sequence of re-
simulate each other. A reactive active quests the object will accept during its
object having a method whose body is activity. This concept is actually a di-
an endless loop will turn into an auton- rect offspring of the Simula-67
omous active object after receiving a [Birtwistle et al. 1973] concept of body,
corresponding message. An autonomous which included support for coroutines.
active object whose activity is to keep This initial potential of objects for con-
accepting incoming messages actually currency was, however, abandoned, for
models a reactive active object. (See the both technological and cultural reasons,
example of POOL in Section 3.3.4, by most Simula-67 followers.
where this is actually the default case.) The concept of body and explicit ac-
ceptance is close to the Ada tasking
3.3.3 Implicit Versus Explicit Accep-
model. The body of an Ada task encap-
tance of Messages. Another issue re-
sulates state variables and a statement
lated to the reactivity of active objects is
sequence that begins executing as soon
whether there should be implicit or ex-
as the task is created. A set of entries,
plicit acceptance of messages (or even
comparable to operation signatures, is
both). Implicit acceptance means that a
associated with a task. A remote invoca-
message is automatically accepted after
tion—looking like a procedure call—re-
it is received (the actual processing may
fers to one of these entries. A task uses
be delayed after receipt of the message
explicit accept statements for accepting
because of synchronization require-
invocations and executing the requested
ments). Explicit acceptance means that
service.
the object explicitly states that it is
POOL2 and Eiffel// [Caromel 1993]
willing to accept a certain pattern of
are typical representatives of the body
message. This is analogous to the task
concept. A POOL class for active Queue
entry statement in Ada.
In looking at the relation between the
reactivity versus autonomy issue and 2
Actually, there are three different versions of
the implicit versus explicit acceptance Pool: POOL-T, POOL2, and POOL-I.

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 305

Figure 6. Active queue in POOL.

objects is shown in Figure 6. The declar- a (direct or indirect) subclass of PRO-


ative part for local data is omitted. Op- CESS are active objects. The object body
erations such as METHOD enq are de- is represented by a routine Live, which
clared just as for passive objects. A has a default implementation in PRO-
Queue object has a single thread of con- CESS and is usually redefined in sub-
trol. Its activity is described by the classes of PROCESS (comparable to
statements enclosed in the BODY/YDOB POOL’s BODY). Several other routines
keywords (DO/OD is an infinite loop). As inherited from PROCESS enable an ac-
opposed to Ada, the accept statements, tive object to control the acceptance of
starting with the keyword ANSWER, just invocations in its Live routine, much as
refer to one or more operation names is done with ANSWER in the POOL lan-
(ANY meaning all operation names). guage.
A queue is in fact usually imple-
mented as a passive object. It is only for 3.3.5 Autonomy Without Body.
demonstration purposes that we present Although most autonomous active ob-
an “active queue.” And it should be kept jects models are based on the concept of
in mind that the body of a POOL class body with explicit acceptance state-
can of course be of arbitrary complexity. ments, there may be some alternatives.
Notice that a missing body defaults to In CEiffel, operations can be specified
DO ANSWER ANY OD, which actually as autonomous using the autonomy an-
models a reactive active object. notation --.--. Note that a CEiffel
In a very similar spirit, Eiffel// has a annotation always starts with the char-
predefined class PROCESS. Instances of acters --, just like an Eiffel comment,

ACM Computing Surveys, Vol. 30, No. 3, September 1998


306 • J.-P. Briot et al.

Figure 7. Modeling autonomous moving objects in CEiffel.

but is identified as an annotation by the in CEiffel by other kind of annotations,


next character. Being comments, anno- namely compatibility annotations (see
tations are not interpreted by a stan- Section 3.4.3).
dard Eiffel compiler, but only by a spe- Figure 7 shows the example of class
cific CEiffel precompiler (and associated Moving, which models objects moving
runtime) [Löhr 1993]. autonomously in the plane.
An autonomous operation is executed
repeatedly, without being invoked. More 3.4 Synchronized Objects
precisely, when an autonomous opera-
tion finishes, it is implicitly invoked The presence of concurrent activities re-
anew. The scheduling mechanism does quires some degree of synchronization,
not distinguish between explicit and im- that is, constraints, in order to ensure
plicit invocations. Note that the degree correct program execution. Synchroni-
of intraobject concurrency is controlled zation may be associated with objects

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 307

Figure 8. Synchronization by need in Eiffel//.

and with their communication means kind of transmission that immediately


(i.e., message passing) through various returns an eager promise for (i.e., a
(sub-)levels of identification. handle to) a future reply, without wait-
ing for the actual completion of the in-
3.4.1 Synchronization at the Message-
vocation. It is thus possible to decouple
Passing Level. A straightforward
invocation and waiting for a result.
transposition of the message-passing
Only when the caller really needs the
mechanism from a sequential comput-
result—that is, is going to operate on
ing context to a concurrent one leads to
it—is synchronization with the service
the implicit synchronization of the
provider required. Integration of fu-
sender (caller) to the receiver (callee).
tures into the invocation mechanism
This is called synchronous transmission:
has the effect that the strict synchroni-
to resume its own execution, the sender
zation inherent in synchronous invoca-
object waits for (1) completion by the
tion is replaced with synchronization by
receiver of the invoked method execu-
need, also sometimes called lazy syn-
tion and then (2) the return of the reply.
chronization. The concept of future orig-
In the case of active objects, the
inated in the actor languages. It was
sender and the receiver own indepen-
included as a specific type of message
dent activities. It is therefore useful to
transmission in early object-oriented
introduce some asynchronous type of
concurrent languages, notably ABCL/1,3
transmission by which the sender re- and was later integrated into some ex-
sumes its execution as soon it has sent tensions of existing languages, like
the message, that is, without waiting Eiffel// [Caromel 1990] where it is
for completion of the invoked method by known as wait-by-necessity.
the receiver. This type of transmission Service execution is always asynchro-
introduces further concurrency through nous in Eiffel//. If there is a result, lazy
communication. It is well suited for a synchronization takes effect. In Figure
distributed architecture, because if the 8, the calling client may proceed imme-
receiver (the server) is located on a dis- diately after the invocation, becoming
tant processor, the addition of the com- blocked only when it tries prematurely
munication latency to the processing to invoke the result object.
time may be significant. Note that this
implies associating with an active object 3.4.2 Synchronization at the Object(s)
a mail queue that will buffer incoming Level. The identification of synchroni-
messages (usually in the ordering of
their arrival) before the active object is 3
ABCL/1 actually offers three types of message
ready to compute them. transmission: synchronous (called now type),
Finally, some languages (e.g., ABCL/1 asynchronous (called past type), and with eager-
and ACT11) introduce some mixed reply (called future type).

ACM Computing Surveys, Vol. 30, No. 3, September 1998


308 • J.-P. Briot et al.

zation with message passing has the at the object level of what is called
advantage of transparently ensuring condition synchronization at the data
some significant part of the synchroni- level. (Andrews [1991] is an excellent
zation concerns. Indeed, synchroniza- book on synchronization principles and
tion of requests is transparent to the terminology.)
client object, being managed by the ob-
ject serving requests. Interobject Synchronization. Finally,
In the case of serialized active objects, it may be necessary to ensure some
requests are processed one at a time, consistency, not just individual but also
according to their order of arrival. Some global (coordination) between mutually
finer-grain or rather more global con- interacting objects. Consider a money
currency control may, however, be nec- transfer between two bank accounts.
essary for objects. We distinguish three The issue is ensuring the invisibility of
different levels of synchronization at possible transient and inconsistent
the object(s) level, which correspond re- global states while the transfer takes
spectively to the internal processing of place. Intraobject or behavioral synchro-
an object, its interface, and the coordi- nization are not sufficient, and a notion
nation between several objects. such as an atomic transaction [Bern-
stein et al. 1987] is needed to coordinate
Intraobject Synchronization. In in- the different invocations.
traobject concurrency (i.e., an object si-
multaneously computing several re- 3.4.3 Synchronization Schemes. Vari-
quests), it is necessary to include some ous synchronization schemes have been
concurrency control in order to ensure proposed to address these different lev-
the consistency of the object state. Usu- els of concurrency control. Many of
ally, the control is expressed in terms of them are actual derivations from gen-
exclusions between operations.4 The eral concurrent programming and have
typical example is the readers and writ- been more or less integrated within an
ers problem, where several readers are object-oriented concurrent program-
free to access simultaneously a shared ming framework.
book but the presence of one writer ex- We may make a general distinction
cludes all others (writers and readers). with regard to whether synchronization
Note that intraobject synchronization is specifications are centralized.
the equivalent at the object level of
what is called (mutual) exclusion syn- —Centralized schemes, such as path ex-
chronization at the data level. pressions, specify in an abstract and
centralized way the synchronization
Behavioral Synchronization. It is of the object. As they are centralized,
possible that an object may temporarily they tend to be naturally associated
be unable to process a certain kind of and then integrated with the class.
request that is nevertheless part of its —Decentralized schemes, such as
interface. The typical example is the guards, specify at the program-area
bounded buffer example, which may not level the synchronization of the ob-
accept some insertion request while it is ject. As they are decentralized, they
full. Rather than signaling an error, it tend to be naturally associated and
may delay the acceptance of that re- then integrated with a method.
quest until it is no longer full. This
makes synchronization of services be- There has been considerable debate
tween objects fully transparent. Behav- about the pros and cons of various
ioral synchronization is the equivalent schemes in these two general catego-
ries. Important issues are: expressivity,
4
Note that the case of a mutual exclusion be- reusability, provability, and efficiency.
tween all methods subsumes the case of a serial- Several variations are described in the
ized object (as defined in Section 3.3.1). following, always with a focus on how

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 309

Figure 9. Behavior replacement of an actor.

they can be integrated with the object needs to be rewritten from scratch. The
concepts (for a more detailed and ex- general problem of reusing synchroniza-
haustive presentation, please see An- tion specifications is addressed in Sec-
drews [1991]). Note that most activity, tion 3.6.1.
synchronization, and communication
models described in these sections have Behavior Replacement. The Actor
been implemented as various compo- model of computation [Agha 1986] is
nent libraries in a common framework based on three main concepts: active
for object-oriented concurrent program- object, asynchronous message passing,
ming called Actalk [Briot 1996]. This and behavior replacement. This last
framework provides a relatively neutral concept is both simple and very expres-
foundation and platform to study, com- sive. When created, an actor is com-
pare, and experiment with various mod- posed of an address—with which is as-
els of activity (reactivity, body, etc.), sociated a mail queue buffering
communication (synchronous, asynchro- incoming messages—and an initial be-
nous, etc.) and synchronization. havior. The behavior may be described
as a set of variables/data and a set of
Path Expressions. A first example of methods, just as a standard object. The
a centralized scheme is the concept of behavior computes the first incoming
path expressions, which specifies in a message5 and specifies the replacement
compact notation the possible interleav- behavior, that is, the behavior that will
ing of invocations. The Procol language compute the next message (see Figure
[van den Bos and Laffra 1991] is an 9). As one may imagine, once triggered
example of integration of path expres- by an incoming message, the replace-
sions (called protocols in Procol) with ment behavior will specify in turn its
objects. own replacement behavior, and so on.
Note that as soon as the replacement
The Body Revisited. Another cen- behavior is specified, the computation of
tralized scheme is the concept of body, the next message may start. This im-
described Section 3.3.4. An important plies intraobject concurrency. Con-
observation is that in complex cases the versely, as long as the replacement be-
body may describe both application-spe- havior is not specified, the computation
cific behavior and the logic for accepting of the next message will not proceed.
invocations. The missing distinction This implies synchronization, to be
among these very different issues, their
centralized handling in the body plus its
imperative nature, are the source of 5
In a similar way to objects, the message will
several problems when specializing ob- select a method to be evaluated in the environ-
ject behaviors. In most cases the body ment of the behavior.

ACM Computing Surveys, Vol. 30, No. 3, September 1998


310 • J.-P. Briot et al.

more precise, intraobject synchroniza- operations such as signaling a monitor


tion. event or a semaphore are more efficient.
In the distributed programming lan-
Abstract States. The concept of re-
guage Guide, the guards are gathered in
placement behavior encompasses the
a central location of the class called the
notion of a possibly changing behavior.
control clause (keyword CONTROL; see
If we combine that concept with the
Figure 11, lower part).
requirements for behavioral synchroni-
Synchronization counters are counters
zation described previously (i.e., to de-
recording the invocation status for each
lay the acceptance of a request until a
method, that is, the number of received,
service is available; see Section 3.4.26),
started, and completed invocations. As-
and if we assume that the active object
sociated with guards, they provide very
is serial, we obtain the concept of ab-
fine-grained control of intraobject syn-
stract states.
chronization. Referring to counters has
The idea is the following: an object
the advantage of representation-inde-
conforms to some abstract state repre-
pendence.
senting a set of enabled methods (see,
Note that, although integration of
e.g., Matsuoka and Yonezawa [1993] for
synchronization schemes with object
a more detailed description). In the ex-
models is usually straightforward, this
ample of the bounded buffer, three ab-
integration has an impact on the reuse
stract states are needed: empty, full,
of synchronization specifications (see
and partial. The abstract state par-
Section 3.6.1).
tial is expressed as the union of empty
and full, and consequently is the only
Locks. The concept of a lock is one of
one to enable both insertion and extrac-
the basic synchronization abstractions.
tion methods. After completing the pro-
It is very natural to associate a lock
cessing of an invocation, the next ab-
with each object (or two locks, in order
stract state is computed to possibly
to distinguish between readers and
update the state and services availabil-
writers methods) in order to make it a
ity of the object.
synchronized object. This is the ap-
The corresponding program in
proach followed by the Java program-
ACT11, which is based on this idea, is
ming language. Like Guide, Java is par-
shown in Figure 10.
tially integrated in that it follows a
Guards. The notion of guard is a model of synchronized objects, but not a
major example of a decentralized syn- model of active objects (object and
chronization scheme. A guard is basi- thread are kept separate). A private
cally a Boolean activation condition that lock is implicitly associated with each
is associated with a procedure. The inte- Java object at its creation. Although
gration with objects is easy and natural: this basic synchronization abstraction is
each method has one associated guard. centralized in the object, the interface
Guards achieve a good integration be- for the programmer is decentralized.
cause they do not require any synchro- Qualifying a method with the synchro-
nization statements in the implementa- nized keyword indicates that this
tion of the object’s operations. Activities method is mutually exclusive with other
are blocked or awakened implicitly. The qualified methods of the same class (or
price that must be paid for this auto- superclass). Actually, the synchro-
matic scheme is performance; explicit nized keyword can also be used for
establishing arbitrary critical regions.
6
Condition synchronization is handled
This is realized by adding some degree of explicit using events, another indication that
message acceptance. Current behavior selects and
computes, not the first pending message but the Java favors a low degree of integration.
first pending message that matches one of its A language that allows specifying
methods. reader/writer exclusion is Distributed

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 311

Figure 10. Bounded buffer in ACT11.

Eiffel [Gunaseelan and LeBlanc 1992], If neither qualification is present, no


designed as a modified Eiffel for pro- lock is acquired.
gramming distributed applications on
top of the Clouds distributed operating Annotations. This approach is gen-
system. An operation can be qualified as eralized in another Eiffel extension,
ACCESSES (or MODIFIES), meaning that CEiffel [Löhr 1993]: using annotations
it has to acquire a read lock (or a write to the operations, a binary, symmetric
lock) on the object before it can execute. compatibility relation among the opera-

ACM Computing Surveys, Vol. 30, No. 3, September 1998


312 • J.-P. Briot et al.

Figure 11. Guarded remove operation in Guide class Queue.

tions of an object can be specified. If (2) When a subclass extends the set of
operation op1 is declared compatible operations of the superclass, a new
with operation op2, both can be exe- operation is incompatible with all
cuted in an overlapping fashion. Incom- the inherited operations, unless ex-
patible operations are mutually exclu- plicitly stated otherwise.
sive. This approach can be traced back
to Andrews [1991], where a centralized Figure 12 shows the example of read-
ers and writers in Distributed Eiffel.
parallel clause is used to specify com-
Figure 13 shows the equivalent pro-
patibility in a precursor of the SR pro-
gram in CEiffel.
gramming language. Note that declar-
ing compatibilities is safer than
declaring exclusion requirements. 3.5 Distributed Objects
(1) When a given sequential class with- An object represents an independent
out any annotations is used as a unit of execution, encapsulating data,
template for shared objects, these procedures, and possibly private re-
objects are serial by default, thus sources (activity) for processing the re-
keeping their sequential semantics. quests. Therefore a natural option is to

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 313

is well suited for distributed-memory


architectures.7
ÉPÉE. ÉPÉE [Jézéquel 1993] fol-
lows the SPMD approach to data paral-
lelism: large data aggregates of Eiffel
code (such as matrices) are divided into
fragments. The fragments are distrib-
uted, together with replicated code, over
the CPUs of a multicomputer; each CPU
operates on its data fragment, commu-
nicating with the other CPUs as neces-
sary. ÉPÉE provides abstract structures
that may be placed on several proces-
sors, without any addition to the Eiffel
language.
The essentials of ÉPÉE are as follows.
(1) A data aggregate is an Eiffel [Meyer
1991] object. Its interface is given by
an Eiffel class. The class, however,
Figure 12. Reader/writer exclusion using Dis- describes the implementation of a
tributed Eiffel. fragment, not that of the complete
aggregate.
(2) Such a class for distributed aggre-
consider an object as the unit of distri- gates must be designed as a sub-
bution and possible replication. Fur- class of a given nondistributed class,
thermore, self-containedness of objects say Matrix, and the class DISTAGG.
(data plus procedures, plus possible in- (3) The original operations of Matrix
ternal activity) eases the issue of mov- must be redefined. Their implemen-
ing and migrating them around. Also, tation has to be modified in such a
note that message passing not only en- way that update operations in the
sures the separation between services code are applied to the local frag-
offered by an object and its internal ment only. DISTAGG manages the
representation but also provides the in- required interfragment data ex-
dependence of its physical location. change on remote read operations
Thus, message passing may subsume and provides various support func-
both local and remote invocation tions such as fragment-specific in-
(whether sender and receiver are on the dex mapping.
same or distinct processors is transpar- (4) There is no explicit process creation
ent to the programmer) as well as possi- or any visible message passing. The
ble inaccessibility of an object/service. fragments of a distributed object op-
3.5.1 Data-Parallelism for Distrib- erate concurrently, each with its
uted Machines. If the concurrent activ- own thread of control. If each frag-
ities of a program are to run in a truly ment is placed on a CPU of its own,
parallel fashion, the program has to be invoking the object causes all the
mapped to a multiprocessor, a multi-
computer, or a computer network, giv- 7
Note that the SPMD data-parallelism model is
ing rise to what is known as functional opposed to the MIMD (multiple program/data)
or task parallelism. For massive paral- activation/control-parallelism model. Examples of
the latter are languages based on the concept of
lelism, however, there is more potential active object (see Section 3.3). Indeed, objects rep-
in data parallelism of the SPMD type resent duality (and unification) between data and
(single-program, multiple-data), which procedures (potential activation).

ACM Computing Surveys, Vol. 30, No. 3, September 1998


314 • J.-P. Briot et al.

Figure 13. Reader/writer exclusion using CEiffel.

fragments to start operating in par- vantage of hiding the explicit operations


allel. for interfragment message passing from
the clients of an object, programming in
Note that ÉPÉE, although integrating
Charm11 is less cumbersome because
object and distribution through its con-
message passing is built into the lan-
cept of data aggregates, relies for its
guage—as chare invocation. In sum-
implementation on class libraries with-
mary, Charm11 achieves a better inte-
out changing the underlying language
gration, at the cost of extending its
(namely, Eiffel).
underlying language (namely, C11).
Charm11. The Charm11 language
supports both the MIMD and SPMD 3.5.2 Accessibility and Fault Recov-
style. Classes defined with the starting ery. In order to handle inaccessibility
keywords chare class implement re- of objects, in the Argus distributed oper-
active active objects, similar to actors. ating system [Liskov and Sheifler 1983]
But there exists a variant of the chare the programmer may associate an ex-
class concept called the branched chare ception with an invocation. If an object
class (instances of which are called is located on a processor that is inacces-
branched chares). The code of a sible because of a network or processor
branched chare is replicated among the fault, an exception is raised, for exam-
nodes of a computer network and each ple, to invoke another object. A transac-
node works on one fragment of the ob- tion is implicitly associated with each
ject. invocation (synchronous invocation in
Although they look similar at first Argus) to ensure atomicity properties.
glance, there is a big difference between For instance, if the invocation fails (e.g.,
the object models of ÉPÉE and if the server object becomes inaccessi-
Charm11: the interface of a branched ble), the effects of the invocation are
chare class reflects the fragmentation in canceled. The Karos distributed pro-
that it describes the messages it can gramming language [Guerraoui et al.
accept from other fragments, in addition 1992] extends the Argus approach by
to messages from other (outside) ob- allowing the association of nested trans-
jects. Thus, although ÉPÉE has the ad- actions to asynchronous invocations.

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 315

3.5.3 Migration. In order to improve rency and distribution mechanisms.


the accessibility of objects, and also to This integration leads, however, to some
support load balancing, some languages conflicts that we discuss in the follow-
or systems provide mechanisms for ob- ing.
ject migration. In the Emerald distrib-
uted programming language [Jul et al. 3.6.1 Inheritance Anomaly. Inher-
1988], and the COOL generic run-time itance is one of the key mechanisms for
layer [Lea et al. 1993], the programmer achieving reuse of object-oriented pro-
may decide to migrate an object from grams. It is therefore natural to use
one processor. In Emerald, this may be inheritance to specialize synchroniza-
expressed at the message-passing level tion specifications associated with a
as the migration of a parameter when class of objects. Unfortunately, experi-
the invocation is distant. This could be a ence shows that: (1) synchronization is
permanent move (“called-by move”), or difficult to specify and moreover to re-
temporary (“call-by-visit”). The pro- use because of the high interdependency
grammer may control (in terms of at- among the synchronization conditions
tachments) which other related objects for different methods, (2) various uses of
should also migrate together. Similar inheritance (to inherit variables, meth-
concepts have also been included in a ods, and synchronizations) may conflict
more recent, and truly object-oriented, with each other, as noted in McHale
system named Dowl [Achauer 1993], a [1994] and Baquero et al. [1995]. In
distributed extension of the Trellis/Owl some cases, defining a new subclass,
language [Moss et al. 1987]. even only with one additional method,
may force the redefinition of all syn-
3.5.4 Replication. As for migration, chronization specifications. This limita-
a first motivation of replication is to tion has been named the inheritance
increase the accessibility of an object by anomaly phenomenon [Matsuoka and
replicating it onto the processors of its Yonezawa 1993].
(remote) clients. A second motivation is Specifications along centralized
fault tolerance: by replicating an object schemes (see Section 3.4.3) turn out to
on several processors, its services be- be very difficult to reuse and often must
come robust against possible processor be completely redefined. This is, for in-
failure. In both cases, a fundamental stance, the case in POOL with the con-
issue is to maintain the consistency of cept of body. The body is imperative
the replicas, that is, to ensure that all rather than declarative, lacking the
replicas hold the same values. In the structure achieved by associating
Electra [Maffeis 1995] distributed sys- guards with operations. Figure 14
tem, the concept of remote invocation shows the definition in POOL of a sub-
has been extended in the following fash- class of class Queue (defined in Figure
ion. Invoking an object leads to the in- 6) named ExtendedQueue. A new oper-
vocation of all its replicas while ensur- ation delete for deleting the last ele-
ing that concurrent invocations are ment has been added. Note that there is
ordered along the same (total) order for no way of reusing the body of the super-
all replicas. Black and Immel [1993] class; a complete redefinition is re-
also introduced a general mechanism quired. Recognizing this, POOL re-
for group invocation well suited for rep- quires that every class provide its own
licated objects. body. Thus, inheritance anomaly is the
rule rather than the exception, except
3.6 Limitations of the Integrative for the special case of empty bodies in
Approach both superclass(es) and subclass.
Decentralized schemes, being modu-
The integrative approach attempts to lar by essence, are better suited for se-
unify object mechanisms with concur- lective specialization. However, this

ACM Computing Surveys, Vol. 30, No. 3, September 1998


316 • J.-P. Briot et al.

Figure 14. Class ClearableQueue in POOL— body needs to be completely rewritten.

fine-grained decomposition, down at the anomaly have been carefully studied


level of each method, is only partially and classified in Matsuoka and Yon-
successful. This is because synchroniza- ezawa [1993].
tion specifications, even if decomposed Among the recent directions proposed
for each method, still remain more or for minimizing the problem, we may
less interdependent. As, for instance, in cite:
the case of intraobject synchronization
with synchronization counters, adding a (1) specifying and specializing indepen-
new write method in a subclass may dently behavioral synchronization
force redefinition of other methods’ and intraobject synchronization
guards in order to take into account the [Thomas 1992] as well as autonomy/
new mutual-exclusion constraint. asynchrony [Löhr 1993];
The fact that intraobject concurrency (2) specifying disabled methods rather
(exclusion synchronization) is imple- than enabled methods, as usually
mentation-dependent and therefore disabled methods remain disabled
conceptually different from behavioral in subclasses [Frølund 1992];
synchronization (condition synchroniza-
(3) allowing the programmer to select
tion) is recognized by some, though not
among several schemes [Matsuoka
all, languages. Guide employs counters
and Yonezawa 1993];
not only for condition synchronization,
as mentioned previously, but also for (4) offering a framework to help in de-
exclusion synchronization. Unfortunately, signing, customizing, and combining
this approach makes specifications more between various synchronization
difficult to reuse. Figure 15 shows the schemes [Briot 1996]; and
definition in Guide of the same subclass (5) instantiating abstract specifications
ClearableQueue (see the original defi- as an alternative to inheritance for
nition of Queue in Guide in Figure 11). reusing synchronization specifica-
Note that it does not suffice to add a tions [McHale 1994]. Another exam-
new guard for clear to the control ple of a high-level approach is the
clause. Annoyingly, we have to redefine coordination patterns proposed by
the remove guard although remove it- Frölund [1996], with a specific focus
self is not redefined. on interobjects synchronization.
The various cases of inheritance These abstractions are specified in-

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 317

Figure 15. Class ClearableQueue in Guide—major redefinition is necessary.

dependently of how an implementa- posed approach to that problem is to


tion can be (automatically) derived define local conditions, to be verified by
in order to help in reusing them. objects, in order to ensure their compat-
ibility [Weihl 1989; Guerraoui 1995].
3.6.2 Compatibility of Transaction
Protocols. It is tempting to integrate 3.6.3 Replication of Objects and Com-
transaction concurrency control proto- munications. The communication pro-
cols into objects so that one could locally tocols that have been designed for fault-
define, for a given object, the optimal tolerant distributed computing (see
concurrency control or recovery proto- Section 3.5.4) consider a standard cli-
col. For instance, commutativity of oper- ent/server model. The straightforward
ations makes possible the interleaving transposition of such protocols to the
(without blocking) of transactions on a object model leads to unexpected dupli-
given object. Unfortunately, the gain in cation of invocations. Indeed, an object
modularity and specialization may lead usually acts conversely as a client and
to incompatibility problems [Weihl as a server. Thus an object that has
1989]. Broadly speaking, if objects use been replicated as a server may itself in
different transaction serialization proto- turn invoke other objects (as a client).
cols (i.e., serialize the transactions As a result, all replicas of the object will
along different orders), global execu- invoke these other objects several times.
tions of transactions may become incon- This unexpected duplication of invoca-
sistent, that is, nonserializable. A pro- tions may lead in the best case to ineffi-

ACM Computing Surveys, Vol. 30, No. 3, September 1998


318 • J.-P. Briot et al.

ciency, and in the worst case to incon- that may not understand a message will
sistencies (by invoking the same then delegate it (i.e., forward it) to an-
operation several times). A solution pro- other object called its proxy. (Note that,
posed in Mazouni et al. [1995] is based in order to handle recursion properly,
on prefiltering and postfiltering. Prefil- the delegated message will include the
tering consists of coordinating process- initial receiver.) The proxy will process
ing by the replicas (when considered as the message in place of the initial re-
a client) in order to generate a single ceiver, or it can also delegate it itself
invocation. Postfiltering is the dual op- further to its own designated proxy.
eration for the replicas (when consid- This alternative to inheritance is very
ered as servers) in order to discard re- appealing as it relies only on message
dundant invocations. passing and hence fits well with a dis-
tributed implementation. Meanwhile,
3.6.4 Factorization Versus Distribu- the delegation mechanism needs some
tion. A more general limitation (i.e., nontrivial synchronization mechanism
less specific to the integrative approach) to ensure the proper handling (ordering)
comes from standard implementation of recursive messages, prior to other
frameworks for object factorization incoming messages. Thus, it may not
mechanisms, which usually rely on offer a general and complete alternative
strong assumptions about centralized solution [Briot and Yonezawa 1987].
(single memory) architectures.
The concept of class variables, sup- 4. THE REFLECTIVE APPROACH
ported by several object-oriented pro-
gramming languages (e.g., Smalltalk), 4.1 Combining Flexibility and
is difficult and expensive to implement Transparency
for a distributed system. Unless com-
plex and costly transaction mechanisms As discussed earlier, the library ap-
are introduced, their consistency is hard proach (library-based approach) helps
to maintain once instances of a same in structuring concurrent and distrib-
class can be distributed among proces- uted programming concepts and mecha-
sors. Note that this problem is general nisms, thanks to encapsulation, generic-
for any kind of shared variable. Stan- ity, class, and inheritance concepts. The
dard object-oriented methodology tends integrative approach minimizes the
to forbid the use of shared variables, but number of concepts to be mastered by
may advocate using class variables in- the programmer and makes mecha-
stead. nisms more transparent, but at the cost
In a related problem, implementing of possibly reducing the flexibility and
inheritance on a distributed system the efficiency of mechanisms offered. In-
leads to the problem of accessing remote deed, programming languages or sys-
code for superclasses, unless all class tems built from libraries are often more
code is replicated to all processors, extensible than languages designed
which has obvious scalability limita- with an integrative approach. In other
tions. A semi-automatic approach con- words, libraries help structure and sim-
sists of grouping classes into autono- ulate various solutions and thus usually
mous modules so as to help partition bring good flexibility, whereas brand-
the class code among processors. new languages may freeze their compu-
A radical approach replaces the inher- tation and communication models too
itance mechanism between classes by early. It would thus be interesting to
the concept/mechanism of delegation be- keep the unification and simplification
tween objects. This mechanism was ac- advantages of the integrative approach,
tually introduced in the Actor concur- while retaining the flexibility of the li-
rent programming language Act 1 brary approach.
[Lieberman 1987]. Intuitively, an object One important observation is that the

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 319

library approach and the integrative ap- sponding metaprograms is strictly en-
proach actually address different levels forced.
of concerns and use: the integrated ap- Reflection helps in decorrelating li-
proach is for the application program- braries specifying implementation and
mer and the library approach is for the execution models (execution strategies,
system programmer. The end user pro- concurrency control, object distribution)
grams applications with an integrative from the application programs. This in-
(simple and unified) approach in mind. creases modularity, readability, and re-
The system programmer, or the more usability of programs. Reflection also
expert user, builds or customizes the provides a methodology for opening up
system, through the design of libraries and making adaptable, through a meta-
of protocol components, along a library interface,8 implementation decisions
approach. and resource management that are of-
Therefore—and as opposed to what ten hard-wired and fixed or delegated
one may think at first glance—the li- by the programming language to the
brary approach and the integrative ap- underlying operating system.
proach are not in competition but rather In summary, reflection helps inte-
complementary. The issue is then: how grate protocol libraries intimately
can we actually combine these two lev- within a programming language or sys-
els of programming? To be more precise: tem, thus providing the interfacing
how do we interface them? It turns out framework (the glue) between the li-
that a general methodology for adapting brary and the integrative approaches/
the behavior of computing systems levels.
called reflection offers such a glue.
4.3 Reflection and Objects

Reflection fits especially well with ob-


4.2 Reflection ject concepts, which enforce good encap-
Reflection is a general methodology for sulation of levels and modularity of ef-
describing, controling, and adapting the fects. It is therefore natural to organize
behavior of a computational system. the control of the behavior of an object-
The basic idea is to provide a represen- oriented computational system (its
tation of the important characteristics/ meta-interface) through a set of objects.
parameters of the system in terms of This organization is named a meta-ob-
the system itself. Static representation ject protocol (MOP) [Kiczales et al.
characteristics as well as dynamic exe- 1991], and its components are called
cution characteristics of application pro- meta-objects [Maes 1987], as metapro-
grams are made concrete in one (or grams are represented by objects. They
more) program(s) that represent the de- may represent various characteristics of
fault computational behavior (interpret- the execution context such as: represen-
er, compiler, execution monitor, and so tation, implementation, execution, com-
on). Such a description/control program munication, and location. Specializing
is called a metaprogram. Specializing meta-objects may extend and modify,
such programs enables us to customize locally, the execution context of some
the execution of the application pro- specific objects of the application pro-
gram, by possibly changing data repre- gram.
sentation, execution strategies, mecha- Reflection may also help in expressing
nisms, and protocols. Note that the
8
same language is used both for writing This meta-interface enables the client program-
application programs and for metapro- mer to adapt and tune the behavior of a software
module independently of its functionalities, which
grams controlling their execution. How- are accessed through the standard (base) inter-
ever, the complete separation between face. This has been termed the concept of open
the application program and the corre- implementation by Kiczales [1994].

ACM Computing Surveys, Vol. 30, No. 3, September 1998


320 • J.-P. Briot et al.

Figure 16. Metacomponents in CodA.

and controlling resource management, first-class objects (see Section 2.2), a


not only at the level of an individual few very powerful reflective mecha-
object but also on a broader level such nisms offer some control over program
as scheduler, processor, name space, ob- execution, such as redefinition of error-
ject group, and the like, such resources handling messages, reference to current
being also represented by meta-objects. context, references swap, and changing
This helps with the very fine-grained the class of an object. Such facilities
control (e.g., for scheduling and load actually help in building and integrat-
balancing) with the whole expressive ing various platforms for concurrent
power of a full programming language and distributed programming, such as
[Okamura and Ishikawa 1994], as op- CodA, Actalk, and GARF.
posed to some global and fixed algo-
rithm (which is usually optimized for a CodA. The CodA architecture [McAf-
specific kind of application or an aver- fer 1995] is a representative example of
age case). a general object-based reflective archi-
tecture (i.e., a MOP) based on meta-
4.4 Examples of Meta-Object Protocols components. (Note that metacompo-
(MOPs) nents are indeed meta-objects. In the
following, we prefer the term metacom-
Smalltalk. Depending on the actual ponent to emphasize the pluggability as-
goals and the balance expected among pects of a reflective architecture (MOP)
flexibility, generality, simplicity, and ef- such as CodA. Also, for simplificity, we
ficiency, design decisions will dictate often use the term component in place of
the amount and scope of the mecha- metacomponent.) CodA considers by de-
nisms to be opened up to the metalevel. fault seven metacomponents associated
Therefore, some mechanisms may be with each object (see Figure 16), corre-
represented as reflective methods but sponding to: message sending, receiv-
belong to standard object classes, that ing, buffering, selection, method lookup,
is, without explicit and complete meta- execution, and state accessing. An ob-
objects. ject with default metacomponents be-
Smalltalk is a representative example haves as a standard (sequential and
of that latter category. In addition to passive) object (to be more precise, as a
the (meta-)representation of the pro- standard Smalltalk object, as CodA is
gram structures and mechanisms as currently implemented in Smalltalk).

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 321

Attaching specific (specialized) meta- concurrency and distribution aspects


components allows selectively changing and protocols by specializing libraries of
a specific aspect of the representation or metacomponents.
execution model for a single object. A
4.5.1 Concurrency Models. In order
standard interface between metacompo-
to introduce concurrency for a given ob-
nents helps in composing metacompo-
ject (by making it into an active object,
nents from different origins.
in an integrated approach), two meta-
Actalk and GARF. Some other re- components are specialized: the special-
flective architectures may be more spe- ized message-buffering component9 is a
cialized and may offer a more reduced queue to buffer incoming messages, and
(and abstract) set of metacomponents. the specialized execution component as-
Examples are the Actalk and GARF sociates an independent activity
platforms, where fewer metacompo- (thread) with the object. This thread
nents may be in practice sufficient to processes an endless loop for selecting
express a large variety of schemes and and performing the next message from
application problems. the buffering component.
The Actalk platform [Briot 1989; 4.5.2 Distribution Models. In order
1996] helps in experimenting with vari- to introduce distribution, a new meta-
ous synchronization and communication component is added for marshaling
models for a given program by changing messages to be sent remotely. In addi-
and specializing various models/compo- tion, two new specific objects are intro-
nents of: (1) activity (implicit or explicit duced that represent the notion of a
acceptance of requests, intraobject con- remote reference (to a remote object)
currency, etc.) and synchronization and the notion of a (memory/name)
(abstract behaviors, guards, etc.), (2) space. The remote reference object has a
communication (synchronous, asynchro- specialized message-receiving compo-
nous, etc.), and (3) invocation (time nent that marshals the message into a
stamp, priority, etc.). The GARF plat- stream of bytes and sends it through
form [Garbinato et al. 1994] for distrib- the network to the actual remote object,
uted and fault-tolerant programming of- which has another specialized message-
fers a variety of mechanisms along two receiving component that reconstructs
dimensions/components: (1) object con- and actually receives the message. Mar-
trol (persistence, replication, etc.) and shaling decisions, for example, which
(2) communication (multicast, atomic, argument should be passed by refer-
etc.). ence, by value (i.e., a copy), up to which
level, may be specialized by a marshal-
4.5 Examples of Applications ing descriptor supplied by the marshal-
ing component.
To illustrate how reflection may help in
mapping various computation models 4.5.3 Migration and Replication Mod-
and protocols onto user programs, we els. Migration is introduced by a new
quickly survey some examples of exper- metacomponent describing the form and
iments with a specific reflective archi- the policies (i.e., when it should occur)
tecture. (We chose CodA; see McAffer for migration. Replication is managed
[1995] for a more detailed description of by adding two new dual metacompo-
its architecture and libraries of compo- nents: the first is in charge of control-
nents.) ling access to the state of the original
Note that, in the CodA system, as object, and the other controls access to
well as almost all other reflective sys-
tems described, the basic programming 9
The default buffering component actually passes
model is integrative, whereas reflection on incoming messages directly to the execution
makes possible the customization of component.

ACM Computing Surveys, Vol. 30, No. 3, September 1998


322 • J.-P. Briot et al.

each of its replicas. Again, marshaling Emerald [Black et al. 1987]). It may be
decisions, such as which argument interesting to semi-automate such deci-
should be passed by reference, by value, sions using various considerations such
by move (i.e., migrated, as in Emerald as processor load and ratio of remote
[Black et al. 1987]), with attachments, communications. Reflection helps in in-
may be specialized through the mar- tegrating such statistical data (residing
shaling descriptors supplied by the cor- for physical and shared resources) and
responding component. One may also in using them by various migration al-
specialize such aspects as which parts of gorithms described at the metalevel
the object should be replicated, and var- [Okamura and Ishikawa 1994].
ious management policies for enforcing
consistency between the original object 4.6.3 Customizing System Policies.
and its replicas. The Apertos distributed operating sys-
tem [Yokote 1992] is a significant and
4.6 Other Examples of Reflective innovative example of a distributed op-
Architectures erating system completely designed
along an object-based reflective archi-
Other examples of representative reflec- tecture (MOP). Supplementary to the
tive architectures and their applications modularity and the genericity of the
are mentioned in the following. Note architecture gained by using a library
that this is by no means an exhaustive (object-oriented) approach (as for
study. Choices, already discussed in Section
4.6.1 Dynamic Installation and Com- 2.3.2), reflection brings the (possibly dy-
position of Protocols. The general namic) customization of the system to-
MAUD methodology [Agha et al. 1993] wards application requirements; for in-
focuses on fault-tolerance protocols, stance, one may easily specialize the
such as server replication and check scheduling policy in order to support
point. Its strength is in offering a various kinds of schedulers, such as a
framework for dynamic installation and real-time scheduler. Another gain is in
composition of specialized metacompo- the size of the microkernel obtained,
nents. The dynamic installation of which is particularly small, as it is re-
metacomponents makes possible the in- duced to supporting the basic reflective
stallation of a given protocol only when operations and the basic resource ab-
needed and without stopping program stractions. This helps in both under-
execution. The possibility of associating standing and porting the system.
metacomponents not only to objects but
also to other metacomponents (which 4.6.4 Reflective Extension of an Exist-
are first-class objects) makes possible ing Commercial System. A reflective
the layered composition of protocols. A methodology has recently been used in
higher-level layer for specification of de- order to incorporate extended (i.e., re-
pendability protocols (called DIL [Stur- laxing some of the standard (ACID)
man and Agha 1994]) has been designed transaction properties) transaction
that makes use of the underlying models into an existing commercial
MAUD reflective architecture. transaction processing system. It ex-
tends a standard transaction processing
4.6.2 Control of Migration. The au- monitor in a minimal and disciplined
tonomy and self-containedness of ob- way (based on upcalls) to expose fea-
jects, further reinforced in the case of tures such as: lock delegation, depen-
active objects, makes them easier to mi- dency tracking between transactions,
grate as a single piece. Nevertheless, and definition of conflicts, and to repre-
the decision to migrate an object is an sent them as reflective operations
important issue that often remains the [Barga and Pu 1995]. These reflective
programmer’s responsibility (e.g., in primitives are then used to implement

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 323

various extended transaction models, plex systems that ultimately use very
such as: split/join, cooperative groups, low-level mechanisms, for example, net-
and the like. work communication. Furthermore,
such systems are often developed by
4.7 Related Models teams of programmers, and in such a
context, having separate modules with
We finally mention two models for cus- well-defined interfaces is of primary im-
tomizing computational behaviors that portance. The difficulty in maintaining
are closely related to reflection. and extending UNIX-like systems
comes mainly from their low modularity
4.7.1 The Composition-Filters Model.
The SINA language is based on the no- and insufficient level of abstraction.
tion of a filter, a way to specify arbitrary Although progress is being made in
manipulation and actions for messages that direction, it is still too early to
sent to (or from) an object [Aksit et al. exhibit a standard class library for con-
1994]. In other words, filters represent current and distributed programming.
some reification of the communication We need both a good knowledge of the
and interpretation mechanism between minimal mechanisms required and a
objects. By combining various filters for consensus on a set of such mechanisms
a given object, one may construct com- involving different technical communi-
plex interaction mechanisms in a com- ties, notably programming languages,
posable way. operating systems, distributed systems,
and databases. The fact that the sema-
4.7.2 Generic Run-Time as a Dual phore abstraction became a standard
Approach. The frontier between pro- primitive for synchronization leads us
gramming languages and operating sys- to think, however, that other abstrac-
tems is getting thinner. Reflective pro- tions for concurrent and distributed pro-
gramming languages have some high- gramming can also be identified and
level representation of the underlying adopted.
execution model. Conversely, and dual
to reflection, several distributed operat- 5.2 The Integrative Approach
ing systems provide a generic run-time
layer such as the COOL layer in the The integrative approach is very ap-
Chorus operating system [Lea et al. pealing in its merging of concepts from
1993]. These generic run-time layers object-oriented programming and those
are designed to be used by various pro- from concurrent and distributed pro-
gramming languages, thanks to some gramming. It thus provides a minimal
upcalls that delegate specific represen- number of concepts and a single concep-
tation decisions to the programming tual framework to the programmer.
language. Nevertheless, this approach unfortu-
nately has limitations in some aspects
5. PERSPECTIVES of the integration (e.g., inheritance
anomaly and duplication anomaly).
5.1 The Library Approach Another potential weakness is that a
too systematic unification/integration
The library approach aims at increasing may lead to a too restrictive model—
the flexibility, yet reducing the complex- “too much uniformity kills variety!”—
ity, of concurrent and distributed com- and may also lead to inefficiencies. For
puting systems by structuring them as instance, stating that every object is
class libraries. Each aspect or service is active and/or every message transmis-
represented by an object. Such modular- sion is a transaction may be inappropri-
ity and abstraction objectives are very ate for some applications not necessar-
important because concurrent and dis- ily requiring such protocols, and their
tributed computing systems are com- associated computational load. A last

ACM Computing Surveys, Vol. 30, No. 3, September 1998


324 • J.-P. Briot et al.

important limitation is the legacy prob- consequence of extra indirections and


lem, that is, the possible difficulty of interpretations. Some alternative direc-
reusing standard sequential programs. tions are: (1) to reduce the scope of
A straightforward way of handling this reflection at compile-time as shown by
is the encapsulation of sequential pro- the evolution of the initial reflective
grams into active objects. However, co- OpenC11 architecture into a compile-
habitation of active objects and stan- time reflective architecture, thus get-
dard ones (i.e., passive objects), is ting closer to metacompilers [Chiba
nonhomogeneous and requires specific 1995], or (2) to use program transforma-
methodological rules for distinction be- tion techniques, notably partial evalua-
tween active objects and passive objects tion (also called program specializa-
[Caromel 1993]. tion), to minimize metainterpretation
overheads [Masuhara et al. 1995].
5.3 The Reflective Approach
5.4 Integrating the Approaches
Reflection provides a general frame-
work for customizing concurrency and As remarked in Section 1.2, the library,
distribution aspects and protocols, by integrative, and reflective approaches
specializing and integrating (meta-)li- are not in conflict but are complemen-
braries intimately within a language or tary. This complementarity extends to
system while separating them from the their relationship to language: the li-
application program. brary approach does not change the un-
Many reflective architectures are cur- derlying language but either defines a
rently being proposed and evaluated. It new language or adds new concepts to
is too early yet to validate some general the language; and the reflective ap-
and optimal reflective architecture for proach requires the use of a specific
concurrent and distributed program- type of language.
ming (although we believe that CodA Among the examples of languages and
[McAffer 1995] is a promising step in systems given in the article, some have
that direction). Note that there is cur- been built following more than one ap-
rently a large effort in designing reflec- proach. This is the case, for instance, of
tive architectures (MOPs) for the C11 the ÉPÉE [Jézéquel 1993a] parallel sys-
programming language. The goal is to tem (see Section 3.5.1), which is based
offer some generic framework in order on the integration of object with distri-
to express various models and protocols bution, and is also implemented with
of parallel and distributed program- libraries. Other examples are Actalk
ming. Two significant examples of such [Briot 1989] and GARF [Garbinato et al.
efforts are OpenC11 [Chiba 1995] and 1994] (see Section 2.2), which offer li-
C11// [Caromel et al. 1996]. braries of abstractions for concurrent
Meanwhile, we still need more experi- and distributed programming that can
ence in the practical use of reflection in be transparently applied to programs
order to find good tradeoffs among the thanks to the reflective facilities of
flexibility required, the architecture Smalltalk.
complexity, and the resulting efficiency. We believe that future developments
One possible (and currently justified) in object-based concurrent and distrib-
complaint concerns the actual relative uted systems will integrate aspects of
complexity of reflective architectures. the three approaches. A very good ex-
Nevertheless, and independently of the ample is the current development
required cultural change, we believe around the Common Object Request
that this is the price to be paid for the Broker Architecture (CORBA) of the
increased, albeit disciplined, flexibility OMG [Mowbray and Zahavi 1995].
that they offer. Another significant cur- CORBA integrates object and distribu-
rent limitation concerns efficiency, as a tion concepts through an object request

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 325

broker (which provides remote commu- possibly reducing the flexibility and ef-
nication facilities). In that sense, ficiency of the mechanisms. The inte-
CORBA follows the integrative ap- grative approach can be viewed as a
proach. CORBA also specifies a set of top-down approach and is directed to-
services to support more advanced dis- wards application-builders.
tributed features such as transactions. By providing a framework for inte-
The CORBA object transaction service grating protocol libraries intimately
(named OTS) is specified and imple- within a programming language or sys-
mented in the form of a class library of tem, the reflective approach provides
distributed protocols, such as locking the interfacing framework (the glue) be-
and atomic commitment. In that sense, tween the library and the integrative
CORBA follows the library approach. approaches/levels. Meanwhile, it en-
Finally, most CORBA implementations forces the separation of their respective
provide facilities for message reification levels. In other words, reflection pro-
(messages can be considered as first- vides the meta-interface through which
class entities), and hence support cus- the system designer may install system
tomization of concurrency and distribu- customizations and thus change the ex-
tion protocols. In that sense, CORBA ecution context (concurrent, distributed,
implementations follow (to some extent) fault-tolerant, real-time, adaptive, and
the reflective approach. so on) with minimal changes in the ap-
plication programs.
6. SUMMARY The reflective approach contributes to
blurring the distinction between pro-
In order to understand and evaluate gramming language, operating system,
various object-based concurrent and dis- and database, and at easing the devel-
tributed developments, we have pro- opment, adaptation, and optimization of
posed a classification of the different a minimal dynamically extensible com-
ways in which the object paradigm is puting system. Nevertheless, we stress
used in concurrent and distributed con- that this does not free us from the ne-
texts. The three approaches we have cessity of having a good basic design
identified convey different yet comple- and finding a good set of foundational
mentary research streams in the object- abstractions [Guerraoui et al. 1996].
based concurrent and distributed sys-
tem community. ACKNOWLEDGMENT
The library approach (library-based
The comments of the reviewers have greatly con-
approach) helps in structuring concur- tributed to improving the quality of this article.
rent and distributed-programming con-
cepts and mechanisms through encapsu-
lation, genericity, class, and inheritance REFERENCES
concepts. The principal limitation of the
approach is that the programming of ACHAUER, B. 1993. The Dowl distributed object-
the application and that of the concur- oriented language. Commun. ACM 36, 9.
rent and distribution architecture, is ADA 1983. The Programming Language Ada
Reference Manual. In Lecture Notes in Com-
represented by unrelated sets of con- puter Science, vol. 155. Springer-Verlag, New
cepts and objects. The library approach York.
can be viewed as a bottom-up approach AGHA, G. 1986. Actors: A Model of Concurrent
and is directed towards system-builders. Computation in Distributed Systems. Series in
The integrative approach minimizes Artificial Intelligence, MIT Press, Cambridge,
the concepts to be mastered by the pro- MA.
grammer and makes mechanisms more AGHA, G. A., FRØLUND, S., PANWAR, R., AND STUR-
MAN, D. 1993. A linguistic framework for
transparent by providing a unified con- dynamic composition of dependability proto-
current and distributed high-level ob- cols. In Dependable Computing for Critical
ject model. However, this has the cost of Applications III (DCCA-3). IFIP Transactions,

ACM Computing Surveys, Vol. 30, No. 3, September 1998


326 • J.-P. Briot et al.

Elsevier-North Holland, Amsterdam, The ery in Database Systems. Addison-Wesley,


Netherlands, 197–207. Reading, MA.
AGHA, G. A., HEWITT, C., WEGNER, P., AND YON- BERSHAD, B. N., LAZOWSKA, E. D., AND LEVY,
EZAWA, A., EDS. 1991. Proceedings of the H. M. 1988. PRESTO: A system for object-
OOPSLA/ECOOP ’90 Workshop on Object- oriented parallel programming. Softw. Pract.
Based Concurrent Programming, ACM OOPS Exper. 18, 8, 713–732.
Mess. 2, 2. BÉZIVIN, J. 1987. Some experiments in object-
AGHA, G. A., WEGNER, P., AND YONEZAWA, A., oriented simulation. In Proceedings of the
EDS. 1989. Proceedings of the ACM SIG- ACM Conference on Object-Oriented Program-
PLAN Workshop on Object-Based Concurrent ming Systems, Languages and Applications
Programming, ACM SIGPLAN Not. 24, 4. (OOPSLA ’87), 394 – 405.
AGHA, G. A., WEGNER, P., AND YONEZAWA, A., BIRTWISTLE, G. M., DAHL, O.-J., MYHRHAUG, B.,
EDS. 1993. Research Directions in Concur- AND NYGAARD, K. 1973. Simula Begin. Pet-
rent Object-Oriented Programming, MIT rocelli Charter.
Press, Cambridge, MA. BLACK, A. P. 1991. Understanding transactions
AKSIT, M., WAKITA, K., BOSCH, J., BERGMANS, L., in the operating system context. Oper. Syst.
AND YONEZAWA, A. 1994. Abstracting object Rev. 25, 73–77.
interactions using composition filters. In Pro- BLACK, A. P. AND IMMEL, M. P. 1993. Encapsu-
ceedings of the ECOOP ’93 Workshop on Ob- lating plurality. In Proceedings of the Euro-
ject-Based Distributed Programming, pean Conference on Object-Oriented Program-
Guerraoui et al., Eds. Lecture Notes in Com- ming (ECOOP ’93). Lecture Notes in
puter Science, vol. 791. Springer-Verlag, New Computer Science, vol. 707. Springer-Verlag,
York, pp. 152–184. New York, 57–79.
AMERICA, P. H. M. 1987. Pool-T: A parallel ob- BLACK, A. P., HUTCHINSON, N., JUL, E., LEVY, H.,
ject-oriented language. In Object-Oriented AND CARTER, L. 1987. Distribution and ab-
Concurrent Programming, A. Yonezawa and stract types in Emerald. IEEE Trans. Softw.
M. Tokoro, Eds. Computer Systems Series, Eng. 13, 1.
MIT Press, Cambridge, MA.
VAN DEN BOS, J. AND LAFFRA, C. 1991. Procol—A
AMERICA, P. H. M. 1988. Definition of Pool2, a concurrent object-oriented language with pro-
parallel object-oriented language. ESPRIT tocols, delegation and constraints. Acta Inf.
project 415-A, Tech. Rep. 364, Philips Re- 28, 511–538.
search Laboratories.
BRANDT, S. AND LEHRMANN MADSEN, O. 1994.
AMERICA, P. H. M. 1989. Issues in the design of
Object-oriented distributed programming in
a parallel object-oriented language. Formal
BETA. In Proceedings of the ECOOP ’93
Aspects Comput. 1, 366 – 411.
Workshop on Object-Based Distributed Pro-
AMERICA, P. H. M. AND VAN DER LINDEN, F. 1990. gramming, R. Guerraoui et al. Eds. Lecture
A parallel object-oriented language with in- Notes in Computer Science, vol. 791. Spring-
heritance and subtyping. In Proceedings of er-Verlag, New York, 185–212.
OOPSLA/ECOOP ’90, ACM SIGPLAN Not.
BRIOT, J.-P. 1989. Actalk: A testbed for classify-
25, 10.
ing and designing actor languages in the
ANDREWS, G. R. 1991. Concurrent Program- Smalltalk-80 environment. In Proceedings
ming—Principles and Practice. Benjamin/ European Conference on Object-Oriented Pro-
Cummings, Redwood City, CA. gramming (ECOOP ’89). Cambridge Univer-
ANDREWS, G. R. AND OLSSON, R. A. 1993. The sity Press, New York, 109 –129.
SR Programming Language. Benjamin/Cum- BRIOT, J.-P. 1996. An experiment in classifica-
mings, Redwood City, CA. tion and specialization of synchronisation
BALTER, R., LACOURTE, S., AND RIVEILL, M. 1994. schemes. In Proceedings of the Second Inter-
The Guide language. Comput. J. 37, 6, 519 – national Symposium on Object Technologies
530. for Advanced Software (ISOTAS ’96). Lecture
BAQUERO, C., OLIVEIRA, R., AND MOURA, F. Notes in Computer Science, Springer-Verlag,
1995. Integration of concurrency control in a New York.
language with subtyping and subclassing. In BRIOT, J.-P. AND YONEZAWA, A. 1987. Inheri-
Proceedings of the USENIX COOTS Confer- tance and synchronisation in concurrent OOP.
ence (COOTS ’95) (Monterey, CA). In Proceedings of the European Conference on
BARGA, R. AND PU, C. 1995. A practical and Object-Oriented Programming (ECOOP ’87).
modular implementation of extended transac- Lecture Notes in Computer Science, vol. 276.
tion models. Tech. Rep. 95-004, CSE, Oregon Springer-Verlag, New York, 32– 40.
Graduate Institute of Science & Technology, BRIOT, J.-P., GEIB, J.-M., AND YONEZAWA, A.,
Portland, Ore. EDS. 1995. In Proceedings of the France–
BERNSTEIN, P., HADZILACOS, V., AND GOODMAN, Japan Workshop on Object-Based Parallel
N. 1987. Concurrency Control and Recov- and Distributed Computation. Lecture Notes

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 327

in Computer Science, vol. 1107. Springer-Ver- GARF. In Proceedings of the ECOOP ’93
lag, New York. Workshop on Object-Based Distributed Pro-
CAMPBELL, R., ISLAM, N., RAILA, D., AND MADANY, gramming, LNCS 791, Springer-Verlag, 225–
P. 1993. Designing and implementing 239.
Choices: An object-oriented system in C11. GARBINATO, B., GUERRAOUI, R., AND MAZOUNI,
Commun. ACM 36, 9, 117–126. K. R. 1995. Implementation of the GARF
CAMPBELL, R. H. AND HABERMANN, A. N. 1974. Replicated Objects Platform. Distrib. Syst.
The specification of process synchronisation Eng. J. (Feb.), 14 –27.
by path expressions. In Operating Systems, E. GOLDBERG, A. AND ROBSON, D. 1989. Smalltalk-
Gelenbe and C. Kaiser, Eds. 80. The Language. Addison-Wesley, Reading,
CAROMEL, D. 1989. Service, asynchrony and MA.
wait-by-necessity. J. Object-Oriented Pro- GUERRAOUI, R. 1995. Modular atomic objects.
gram. 2, 4. Theor. Pract. Object Syst. 1, 2, 89 –99.
CAROMEL, D. 1990. Concurrency and reusabil- GUERRAOUI, R., CAPOBIANCHI, R., LANUSSE, A., AND
ity: From sequential to parallel. J. Object- ROUX, P. 1992. Nesting actions through
Oriented Program. 3, 3. asynchronous message passing: The ACS pro-
CAROMEL, D. 1993. Towards a method of object- tocol. In Proceedings of the European Confer-
oriented concurrent programming. Commun. ence on Object-Oriented Programming
ACM 36, 9, 90 –102. (ECOOP ’92). Lecture Notes in Computer Sci-
ence, vol. 615. Springer-Verlag, New York,
CAROMEL, D., BELLONCLE, F., AND ROUDIER, Y. 170 –184.
1996. The C11// System. In Parallel Pro-
gramming Using C11, G. V. Wilson and P. GUERRAOUI, R., NIERSTRASZ, O., AND RIVEILL, M.,
EDS. 1994. Proceedings of the ECOOP ’93
Lu, Eds., MIT Press, Cambridge, MA, 257–
296. Workshop on Object-Based Distributed Pro-
gramming. Lecture Notes in Computer Sci-
CHIBA, S. 1995. A metaobject protocol for C11. ence, vol. 791. Springer-Verlag, New York.
In Proceedings of the ACM Conference on Ob-
ject-Oriented Programming Systems, Lan- GUERRAOUI, R., ET AL. 1996. Strategic research
guages and Applications (OOPSLA ’95), Spe- directions in object oriented programming.
cial Issue of SIGPLAN Not. 30, 10 (Oct.), ACM Comput. Surv. 28, 4, 691–700.
285–299. GUNASEELAN, L. AND LEBLANC, R. J. 1992.
FINKE, S., JAHN, P., LANGMACK, O., LÖHR, K.-P., Distributed Eiffel: A language for program-
ming multi-granular distributed objects. In
PIENS, I., AND WOLFF, T. 1993. Distribution
Proceedings of the Fourth International Con-
and inheritance in the HERON approach to
ference on Computer Languages. IEEE Com-
heterogeneous computing. In Proceedings of
puter Science Press, Los Alamitos, Calif.
the Thirteenth International Conference on
Distributed Computing Systems. HALSTEAD, R. H. 1985. Multilisp: A language
for concurrent symbolic computation. ACM
FRØLUND, S. 1992. Inheritance of synchronisa-
Trans. Program. Lang. Syst. 7, 4.
tion constraints in concurrent object-oriented
programming languages. In Proceedings of the JÉZÉQUEL, J.-M. 1993. EPEE: An Eiffel envi-
European Conference on Object-Oriented Pro- ronment to program distributed-memory par-
gramming (ECOOP ’92). Lecture Notes in allel computers. J. Object-Oriented Program.
Computer Science, vol. 615. Springer-Verlag, 6, 2.
New York. JUL, E., LEVY, H. M., HUTCHINSON, N. C., AND
FRØLUND, S. 1996. Coordinating Distributed BLACK, A. P. 1988. Fine-grained mobility in
Objects. MIT Press, Cambridge, MA. the Emerald system. ACM Trans. Comput.
Syst. 6, 1.
GARBINATO, B. AND GUERRAOUI, R. 1997. Using
the strategy design pattern to compose reli- KAFURA, D. G. AND LEE, K. H. 1990. ACT11:
able distributed protocols. In Proceedings of Building a concurrent C11 with actors. J.
the Usenix Conference on Object-Oriented Object-Oriented Program. 3, 1.
Technologies and Systems (COOTS ’97) KALÉ, L. V. AND KRISHNAN, S. 1993. Charm11:
(June), S. Vinoski, Ed., Usenix. A portable concurrent object-oriented system
GARBINATO, B., FELBER, P., AND GUERRAOUI, R. based on C11. In Proceedings of the ACM
1996. Protocol classes for designing reliable Conference on Object-Oriented Systems, Lan-
designing reliable distributed environments. guages and Applications (OOPSLA ’93), ACM
In Proceedings of the European Conference on SIGPLAN Not. 28.
Object Oriented Programming (ECOOP ’96), KARAORMAN, M. AND BRUNO, J. 1993. Intro-
(June) P. Cointe, Ed. Lecture Notes in Com- ducing concurrency to a sequential language.
puter Science, vol. 1098. Springer-Verlag, Commun. ACM 36, 9, 103–116.
New York, 316 –343. KAY, A. 1969. The reactive engine. Ph.D. The-
GARBINATO, B., GUERRAOUI, R., AND MAZOUNI, sis, University of Utah.
K. R. 1994. Distributed programming in KICZALES, G., ED. 1994. Foil for the workshop on

ACM Computing Surveys, Vol. 30, No. 3, September 1998


328 • J.-P. Briot et al.

open implementation. Available at http: gramming, G. A. Agha et al., Eds., MIT Press,
//www.parc.xerox.com/PARC/spl/eca/ Cambridge, MA, 107–150.
oi/workshop-94/foil/main.html. MAZOUNI, K., GARBINATO, B., AND GUERRAOUI,
KICZALES, G., DES RIVIÈRES, J., AND BOBROW, D. R. 1995. Building reliable client-server
1991. The Art of the Meta-Object Protocol, software using actively replicated objects. In
MIT Press, Cambridge, MA. Proceedings of TOOLS Europe ’95, Prentice-
LEA, D. 1997. Concurrent Programming in Hall, Englewood Cliffs, NJ, 37–53.
Java. Addison-Wesley, Reading, MA. MCAFFER, J. 1995. Meta-level programming
LEA, R., JACQUEMOT, C., AND PILLEVESSE, E. 1993. with CodA. In Proceedings of the European
COOL: System support for distributed pro- Conference on Object-Oriented Programming
gramming. Commun. ACM 36, 9, 37– 47. (ECOOP ’95). Lecture Notes in Computer Sci-
ence, vol. 952. Springer-Verlag, New York,
LEHRMANN MADSEN, O., MØLLER-PEDERSEN, B., AND 190 –214.
NYGAARD, K. 1993. Object-Oriented Pro-
MCHALE, C. 1994. Synchronisation in concur-
gramming in the BETA Programming Lan-
rent, object-oriented languages: Expressive
guage. Addison-Wesley, Reading, MA.
power, genericity and inheritance. Ph.D. dis-
LIEBERMAN, H. 1987. Concurrent object-ori- sertation. Dept. of Computer Science, Trinity
ented programming in Act 1. In Object-Ori- College, Dublin, Ireland.
ented Concurrent Programming, A. Yonezawa
MEYER, B. 1991. Eiffel: The Language, Pren-
and M. Tokoro, Eds., Computer Systems Se- tice-Hall, Englewood Cliffs, NJ.
ries, MIT Press, Cambridge, MA, 9 –36.
MEYER, B. 1993. Systematic concurrent object-
LISKOV, B. AND SHEIFLER, R. 1983. Guardians oriented programming. Commun. ACM 36, 9,
and actions: Linguistic support for robust, 56 – 80.
distributed programs. ACM Trans. Program.
MOSS, J. E. B. AND KOHLER, W. H. 1987.
Lang. Syst. 5, 3.
Concurrency features for the Trellis/Owl lan-
LÖHR, K.-P. 1992. Concurrency annotations. In guage. In Proceedings of the European Confer-
Proceedings of the ACM Conference on Object- ence on Object-Oriented Programming
Oriented Systems, Languages and Applica- (ECOOP ’87). Lecture Notes in Computer Sci-
tions (OOPSLA ’92), ACM SIGPLAN Not. 27, ence, vol. 276. Springer-Verlag, New York.
10. MOWBRAY, T. J. AND ZAHAVI, R. 1995. The Es-
LÖHR, K.-P. 1993. Concurrency annotations for sential CORBA: System Integration Using
reusable software. Commun. ACM 36, 9, 81– Distributed Objects. John Wiley & Sons and
89. The Object Management Group, New York.
LOPES, C. V. AND LIEBERHERR, K. J. 1994. NICOL, J., WILKES, T., AND MANOLA, F. 1993.
Abstracting process-to-function relations in Object-orientation in heterogeneous distrib-
concurrent object-oriented applications. In uted computing systems. IEEE Comput. 26, 6,
Proceedings of the European Conference on 57– 67.
Object-Oriented Programming (ECOOP ’94). OKAMURA, H. AND ISHIKAWA, Y. 1994. Object lo-
Lecture Notes in Computer Science, vol. 821. cation control using metalevel programming.
Springer-Verlag, New York, 81–99. In Proceedings of the European Conference on
MAES, P. 1987. Concepts and experiments in Object-Oriented Programming (ECOOP ’94).
computational reflection. In Proceedings of Lecture Notes in Computer Science, vol. 821.
the ACM Conference on Object-Oriented Pro- Springer-Verlag, New York, 299 –319.
gramming Systems, Languages and Applica- OMG 1995. The Common Object Request Bro-
tions (OOPSLA ’87), ACM SIGPLAN Not. 22, ker: Architecture and Specification (Revision
12, 147–155. 2.0). Object Management Group, Framing-
MAFFEIS, S. 1995. Run-time support for object- ham, MA.
oriented distributed programming. Ph.D. Dis- OSF 1994. DCE Application Development
sertation, Universität Zürich. Guide (Revision 1.0.2). Open Software Foun-
MASUHARA, H., MATSUOKA, S., ASAI, K., AND YON- dation, Cambridge, MA.
EZAWA, A. 1995. Compiling away the meta- PAPATHOMAS, M. 1989. Concurrency issues in
level in object-oriented concurrent reflective object-oriented programming languages. In
languages using partial evaluation. In Pro- Object-Oriented Development, D. C. Tsichritzis,
ceedings of the ACM Conference on Object- ed. Centre Universitaire d’Informatique, Uni-
Oriented Programming Systems, Languages versité de Genève, Geneva, Switzerland.
and Applications (OOPSLA ’95), ACM SIG- PAPATHOMAS, M. 1995. Concurrency in object-
PLAN Not. 30, 10, 300 –315. oriented programming languages. In Object-
MATSUOKA, S. AND YONEZAWA, A. 1993. Analysis Oriented Software Composition, O. Nierstrasz
of inheritance anomaly in object-oriented con- and D. Tsichritzis, Eds. Prentice-Hall, Engle-
current programming languages. In Research wood Cliffs, NJ, 31– 68.
Directions in Concurrent Object-Oriented Pro- PARRINGTON, G. D. AND SHRIVASTAVA, S. K. 1988.

ACM Computing Surveys, Vol. 30, No. 3, September 1998


Concurrency and Distribution • 329

Implementing concurrency control in reliable (PARLE ’92). Lecture Notes in Computer Sci-
distributed object-oriented systems. In Pro- ence, vol. 605. Springer-Verlag, New York,
ceedings of the European Conference on Ob- 261–275.
ject-Oriented Programming (ECOOP ’88). Lec- TOKORO, M., NIERSTRASZ, O. M., AND WEGNER, P.,
ture Notes in Computer Science, vol. 322. EDS. 1992. Proceedings ECOOP ’91 Work-
Springer-Verlag, New York, 234 –249. shop on Object-Based Concurrent Computing.
ROZIER, M. 1992. Chorus. In Proceedings of the Lecture Notes in Computer Science, vol. 612.
Usenix International Conference on Micro- Springer-Verlag, New York.
Kernels and Other Kernel Architectures, 27– WEGNER, P. 1990. Concepts and paradigms of
28. object-oriented programming. ACM OOPS
SCHILL, A. AND MOCK, M. 1993. DC11: Distrib- Manager 1, 1.
uted object-oriented system support on top of WEIHL, W. 1989. Local atomicity properties:
OSF DCE. Distrib. Syst. Eng. 1, 2, 112–125. Modular concurrency control for abstract data
SCHMID, D. C. 1995. An OO encapsulation of types. ACM Trans. Program. Lang. Syst. 11, 2.
lightweight OS concurrency mechanisms in WILSON, G. V. AND LU, P., EDS. 1996. Parallel
the ACE toolkit. Tech. Rep. TR WUCS-95-31, Programming Using C11. MIT Press, Cam-
Dept. of Computer Science, Washington Uni- bridge, MA.
versity, St. Louis, Mo.
YOKOTE, Y. 1992. The Apertos reflective operat-
SCHRÖDER-PREIKSCHAT, W. 1994. The Logical ing system: The concept and its implementa-
Design of Parallel Operating Systems. Pren- tion. In Proceedings of the ACM Conference on
tice-Hall, Englewood Cliffs, NJ. Object-Oriented Programming Systems, Lan-
SHEFFLER, T. J. 1996. The Amelia vector tem- guages and Applications (OOPSLA ’92). ACM
plate library. In Parallel Programming Using SIGPLAN Not. 27, 10, 414 – 434.
C11, G. V. Wilson and P. Lu, eds. MIT Press, YOKOTE, Y. AND TOKORO, M. 1987. Experience
Cambridge, MA, 43–90. and evolution of Concurrent Smalltalk. In
SKJELLUM, A., LU, Z., BANGALORE, P. V., AND DOSS, Proceedings of the ACM Conference on Object-
N. 1996. MPI11. In Parallel Program- Oriented Programming Systems, Languages
ming Using C11, G. V. Wilson and P. Lu, and Applications (OOPSLA ’87). ACM SIG-
eds. MIT Press, Cambridge, MA, 465–506. PLAN Not. 22, 12.
STROUSTRUP, B. 1993. The C11 Programming YONEZAWA, A. AND TOKORO, M., EDS. 1987.
Language. Addison-Wesley, Reading, MA. Object-Oriented Concurrent Programming.
STURMAN, D. AND AGHA, G. 1994. A protocol de- Computer Systems Series, MIT Press, Cam-
scription language for customizing failure bridge, MA.
semantics. In Proceedings of the Thirteenth YONEZAWA, A., BRIOT, J.-P., AND SHIBAYAMA,
International Symposium on Reliable Distrib- E. 1986. Object-oriented concurrent pro-
uted Systems, 148 –157. gramming in ABCL/1. In Proceedings of the
SUN 1995. C114.1 Library Reference Manual, ACM Conference on Object-Oriented Program-
Section 2. Part No. 802-3045-10, Nov., Sun ming Systems, Languages and Applications
Microsystems, Inc. (OOPSLA ’86). ACM SIGPLAN Not. 21, 11.
THOMAS, L. 1992. Extensibility and reuse of ob- YONEZAWA, A., MATSUOKA, S., YASUGI, M., AND
ject-oriented synchronisation components. In TAURA, K. 1993. Implementing concurrent
Proceedings of the International Conference on object-oriented languages on multicomputers.
Parallel Languages and Environments IEEE Parallel Distrib. Technol. (May).

Received August 1996; revised August 1997; accepted January 1998

ACM Computing Surveys, Vol. 30, No. 3, September 1998

You might also like