|
Home
People
Research
Projects
Publications
Download
Laboratory
Support
CVSweb
Mailing Lists
Links
Funded by...
|
Mojave Project Overview
The Mojave research project is focused on the design of distributed
systems that range in size from local area networks to large-scale
systems that may be composed of thousands of cooperating processors.
We use advanced programming languages and compiler techniques to
develop design methods that
ensure safety, reliability, and robustness in the presence of
uncertainty and failure. Our specific goals include the following:
- Distribution of resources, including computation time, should be
as transparent as possible.
- The distributed system should handle faults gracefully, including
network and hardware failures.
- Performance should be maintained even in the presence of faults.
- Systems should scale efficiently to large numbers of members
- Distributed services, including fault-tolerant distributed
filesystems, distributed schedulers, and fault recovery algorithms. The
compiler is an integral part in recovering from faults. The most
promising direction is language and compiler support for speculative
execution. When a failure occurs during a distributed speculation, the
computation is "rolled-back", and restarted with a new state. With an
adequate level of abstraction, the details of fault-recovery do not
need to be addressed by the programmer.
We believe that programming languages, compilers, and operating
systems must work together to address these problems. An operating
system can address the problem of resource distribution for hardware
resources, but sharing of the CPU resource requires cooperation
from the compiler. We have several ongoing research activities in
this direction.
- Trustworthy, robust and extensible compilers implemented using
formal and semi-formal methods.
- Compilers for supporting process migration and distributed
speculations. When a failure occurs in a distributed system, it is
necessary to rebalance the network by migrating processes to new sites
and restarting the computation from a well-known safe state.
One focus of our research is robustness and reliability. To address
reliability adequately, we must understand the foundations of
computation--what does a program do, what does it mean? Are
there languages where program development is obvious? This is the
domain of formal methods, and we are developing Logical Programming
Environments, where we can specify new languages amenable to
extensive optimization and verification.
Past research efforts include
- Multi-language compilers. Large software systems are designed
over an extended period of time, and different parts often have
different design requirements. In general, "domain-specific"
programming languages are used, together with "legacy" code written in
languages like C. We develop integrated design environments where all
of these languages can be combined and reasoned about. We currently
support the C, Java, and ML programming languages in an automated
design environment where programs can be synthesized from
specifications. The compiler enforces safety: a process may access only
those objects it has defined, and objects offered by other processes
for sharing.
- Multi-vehicle wireless testbed. In collaboration with Richard
Murray's group in the Control and Dynamical Systems, we are building a
robotic testbed composed of several autonomous vehicles communicating
over a wireless network. The vehicles must must cooperate in real-time,
even in the presence of network failures.
|