The distributed file system name space is implemented by a collection of file servers and user-implemented services. The name space is unified using a light-weight, decentralized system based on prefix tables and a broadcast protocol. The system automatically adjusts to changes in the system's configuration so it remains easy to manage as the system grows.
The file servers are "stateful". Their state is needed to support a high-performance caching system. However, state complicates error recovery and process migration. This dissertation describes how the distributed state of the file system is maintained during normal operation, during the migration of processes between hosts, and during host failures. The semantics of shared I/O streams are maintained after migration by using shadow stream descriptors on the servers. Failure recovery involves a recovery protocol that relies on redundant state on the clients and servers instead of disk-logging techniques.
User-level services are integrated into the file system framework; they appear as files (pseudo-devices) or as directory hierarchies (pseudo-file-systems). The user-level services benefit from the shared name space and transparent remote access present to support the distributed file system. The file system interface is flexible enough to allow a variety of services to be implemented this way. Examples include an X window server, a TCP/IP protocol server, and an NFS file system server.
Virtually all features of the file system that are described in this dissertation have been implemented as part of the Sprite network operating system. Measurements of its use by a real user community are presented.