Fast and Flexible Shared Libraries

Douglas Orr, John Bonn, Jay Lepreau, Robert Mecklenburg
Department of Computer Science
April 1993


Existing implementations of shared libraries sacrifice speed (in loading, linking, and executed code), for essential flexibility (in symbol binding, address space use, and interface evolution). Modern operating systems provide the primitives needed to make the dynamic linker and loader a persistent server which lives across program invocations. This can provide speed without sacrificing flexibility. The speed is gained primarily through caching of previous work, i.e., bound and relocated executable images and libraries. The flexibility comes from the server's being an active entity, capable of adapting to changing conditions, modifying its cached state, and responding to user directives. In this paper we present a shared library implementation based on OMOS, an Object/Meta-Object Server, which provides program linking and loading facilities as a special case of generic object instantiation. We discuss the architecture of OMOS and its support of module binding primitives, which make it more flexible and powerful than existing shared library schemes. Since our design does not require any support from the compiler, it is also language-independent and highly portable. Initial performance results, on two operating systems, show an average speedup of 20% (range 0 - 56%), on short running programs.

Full paper appeared in Proceedings of the Summer 1993 Usenix Conference.
Last modified on Tue Aug 8 1995.