My primary research interest is in the identification of abstractions that assist in the construction of concurrent and distributed programs. A distributed execution environment consisting of a (potentially large) number of independent computers communicating over a network offers the potential for supporting very large, very reliable applications. However, such an environment has hitherto been very complex to program. Some of the contributing factors include:
- unreliable communication
- no consistent notion of time
- failure of a part of the system (one or more processors), while the rest of the system continues to execute.
Abstractions can be defined at a number of different levels to assist in the construction of such applications. Programming language abstractions include replicated objects, mobile objects, and exception mechanisms that allow the application to be aware of the changes in configuration of the underlying system. At the operating system level, similar mechanisms for replication, mobility, and configuration management can be defined. Communication protocols are the building blocks from which all these abstractions are implemented.