\movedUpBody{-0.75in}{\Brown{Summary}}
\vspace{0.2in}
\begin{tabbing}
\= xx\= xxx\= \kill
\> $\bullet$ {\bf Solving Predicate Control:}\\[0.1in]
\>\> $-$ Predicate Control is NP-Complete in general. \\[2pt]
\>\> $-$ Efficient algorithm for disjunctive predicates.\\[2pt]
\>\> $-$ Efficient algorithms for mutual exclusion predicates and variants.\\[0.3in]
\> $\bullet$ {\bf Solving Predicate Detection in General Computations:}\\[0.2in]
\>\> $-$ Conjunctive Predicate Detection is NP-Complete.\\[2pt]
\>\> $-$ Efficient algorithm for receive-ordered (and send-ordered) computations.\\[2pt]
\>\> $-$ Improved (but exponential) algorithm for general computations\\[0.3in]
\> $\bullet$ {\bf Evaluating Controlled Re-execution:}\\[0.1in]
\>\> $-$ Tracing costs are: $<$ 1\% (time) and $<$ 3 MB/hour (space).\\[2pt]
\>\> $-$ Controlled re-execution has a significantly higher ability to tolerate races \\
\>\>\>  than simple and locked re-execution.
\end{tabbing}

%-------------------------------------------------------------------------------

\movedUpBody{-0.75in}{\Brown{Future Directions}}
\vspace{0.3in}
\begin{tabbing}
\= xxxx\= xxxxxxxxxxxx\= \kill
\> $\bullet$ {\bf A corrective approach to fault tolerance:}\\
\>\> $-$ \Red{predicate control for synchronization faults}\\
\>\> $-$ message re-ordering for message race faults\\
\>\> $-$ dynamic load balancing for peak load faults\\
\>\> $-$ switching compression modes for network congestion faults\\
\>\>\> ... \\
\>\> $-$ other forms of control for other types of faults 
\end{tabbing}
\vspace{0.6in}
	\begin{figure*}
	\epsfxsize=3.0in
	\rightline{\epsfbox{Figures/111.eps}}
	\end{figure*}
\vspace{-2.5in}
\begin{tabbing}
\= xxxx\= xxxxxxxxxxxx\= \kill
\> $\bullet$ {\bf A paradigm of observation and control:}\\
\>\> $-$ \Red{software fault tolerance systems}\\
\>\> $-$ debugging and testing environments\\
\>\> $-$ JVM, operating systems
\end{tabbing}
