ABSTRACT

Resource sharing is a ubiquitous facet of computer systems. Time-sharing systems, virtual memory, and I/O device virtualization were among the early innovations by which physical resources such as the processor, primary memory, mass storage devices, and input/output units like card readers and printers were shared among concurrent applications. The primary motivation for these solutions was to increase the utilization of expensive hardware and amortize their cost over many concurrent users. Continuing evolution in technology, computing environments, and applications have dramatically changed the cost, requirements, and performance profiles of computer systems. Nevertheless, resource sharing remains a fundamental characteristic of modern computing. Cluster computing systems, for instance, must manage hundreds of processors, storage devices, and network connections on behalf of several concurrent applications, while giving each the abstraction of executing in isolation on a dedicated supercomputer. A router in a communication network is accessed by multiple traffic streams and must multiplex both its internal resources and the bandwidth of the shared communication link equitably among the streams to provide all users with acceptable rates of service. In data management applications, huge repositories of shared data are stored on thousands of storage devices, and accessed by hundreds of concurrent applications that

#2 ✐

query or update portions of the data. The storage manager needs to coordinate the traffic to and from the devices to ensure data integrity and provide performance guarantees.