Arvind Santhanam (arvind@cwc.ucsd.edu)
Mon, 5 Jun 2000 22:55:48 -0700 (PDT)


This paper describes the motivation, architecture and performance of SPIN,
an extensible OS. Extensions are written in a type-safe language and are
dynamically linked to the kernel. These extensions allow the application
to tailor the underlying OS to meet its needs, i.e. achieve a certain
level of performance while easily incorporating the functionality. The
paper stresses that SPIN achieves high performance without compromising
on safety. All kernel resources in SPIN are referenced by capabilities.
The name-space management is done at the language level. Operations like
create, resolve and combine ae used to craete domains, dynamically link
them and couple them respecively. Low cost is achieved by establishing
interaction between the domains through procedure calls.

SPIN's Virtual memory system providews fast fine-grained control
while ensuring low overhead invocation and protection services. The OS
thread management provides applications with interfaces for scheduling,
concurrency and synchronization. SPIN uses the concept of strands which is
similar to a thread except that it has no minimal kernel state other than
a name. The responsibility of scheduling and synch within the kernel rests
in the kernels hands ensuring safety. The global scheduler is a
round-robin, pre-emptive priority scheduler. Checkpoint and Resume
facilitate process migration/termination/resumption. Trusted services can
mediate with each other harmoniously while any random tertiary access for
raises an exception. This ensures fault isolation of extension's to
within themselves.

The paper demonstrates the efficient performance of SPIN by
running a variety of microbenchmarks to evaluate/compare the overhead for
functions like protected procedure call, thread mgmt, and virtual memory.
SPIN performs reasonably well in aeach of these realms. Since applications
are extensions to the kernel, this results in low-latency access to both
device and data. A server is allocated to maintain cache consistency and
avoid the problem of double buffering. Use of DMA helps reduces the
consumption of CPU resources for programmed I/O. This might be insinuate
good scalability.

Co-location, enforced modularity, logical protection domains and
dynamic call binding allow extensions to be dynamically defined and
accessed at the granularity of a procedure call.