[comp.os.research] The Psyche project

scott@cs.rochester.edu (Michael Scott) (02/04/88)

The Psyche project at the University of Rochester is an attempt to
support truly general-purpose parallel computing.  We define
"general-purpose" to mean that the systems software must enable the
applications programmer to do anything for which the underlying
hardware is physically well-suited.  Our current work focusses on the
design of an operating system that will support the full range of
parallel programming models in a single programming environment.

Over the course of the past several years we have become increasingly
convinced that no single model of process state or style of communication
can be appropriate for all applications.  Traditional approaches ranging
all the way from the most tightly-coupled shared-memory model to the
most loosely-coupled form of message passing have applications for
which they are conceptually attractive.  Our goal is to allow each
application, and in fact each *part* of an application, to be written
under the model most appropriate for its own particular needs.

The Psyche user interface is based on passive data abstractions called
"realms." Each realm includes data and code.  The code constitutes a
protocol for manipulating the data and for scheduling threads of
control.  The intent is that the data should not be accessed except by
obeying the protocol.

To permit sharing of arbitrary realms at run time, Psyche arranges
for all realms to reside in what appears to be a single address space.
The portion of that address space that is actually visible to a thread of
control depends on the protection domain in which the thread executes.
Each protection domain is associated with a particular "root" realm, and
includes any other realms for which access rights have been demonstrated
to the kernel.

Depending on the degree of protection desired, an invocation of a realm
operation can be as fast as an ordinary procedure call or as slow as a
heavyweight process switch.  Unless the *caller* insists on protection,
the protected and optimized varieties of invocation both look exactly
like local subroutine calls.  The kernel implements protected invocations
by catching and interpreting page faults.

Multiple models of thread management are supported by moving most of
the responsibility for scheduling out of the kernel and into user
code.  The kernel on each processor time slices between protection
domains that are active on its node (a given protection domain may be
active on multiple nodes).  Upcalls are provided to user scheduling
routines whenever thread management might be required, including when
(1) an invocation into the domain has occurred (and a new thread
probably needs to be created), (2) an invocation out of the domain has
occurred (so the current thread is blocked and rescheduling is
appropriate), (3) an invocation has completed (so the calling thread
should be unblocked), (4) a user-specified timeout has expired, or (5)
a program fault has occurred (arithmetic, protection, etc.).

For hardware base, we are currently assuming a machine in which all or
most of the memory is accessible to every CPU.  We are interested in
very-large scale parallelism, so we expect to pay a penalty for
accessingly non-local memory.  We expect this so-called "NUMA problem"
(non-uniform memory access time) to be a major focus of our work.  We
are investigating both bottom-up approaches based on memory access
statistics and top-down approaches based on semantic knowledge about
realms and protection domains.

We are in the early stages of implementation on a BBN Butterfly 1000
Parallel Processor.  Two faculty members and 3 graduate students are
directly involved at present, with a perhaps a dozen others providing
regular critical input.  An early technical report (UR CS TR 223) was
circulated fairly widely last year.  A newer (and heavily revised)
version has been submitted for publication.

Contacts:
	Michael L. Scott             Thomas J. LeBlanc
	scott@cs.rochester.edu       leblanc@cs.rochester.edu
	(716) 275-7745               (716) 275-5426

	Department of Computer Science
	University of Rochester
	Rochester, NY  14627
-- 
Michael L. Scott
University of Rochester    (716) 275-7745
scott@cs.rochester.edu     scott%rochester@CSNET-RELAY
{decvax, allegra, cmcl2}!rochester!scott