Distributed upcalls: a mechanism for layering asynchronous abstractions

Procedure calls provide a synchronous interface to call downward through successive layers of abstraction, and remote procedure calls allow the layers to reside in different address spaces. A design is given for distributed upcalls, a mechanism for propagating upcalls across address space boundaries. Distributed upcalls provide a natural complement to remote procedure calls, allowing the user to arbitrarily place abstractions in the server or in the client. A server structuring system called CLAM, which is currently being used to support an extensible window management system, is presented. The CLAM system, including distributed upcalls, remote procedure call extensions to C++, dynamic loading, and basic window classes, is currently running under 4.3BSD Unix on Microvax workstations.<<ETX>>