Fast and Flexible Shared Libraries
Douglas Orr, John Bonn, Jay Lepreau, Robert Mecklenburg
Department of Computer Science
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.