Modern operating systems must support a wide variety of services for a diverse
set of users. Designers of these systems face a tradeoff between functionality
and performance. Systems like Mach provide a set of general abstractions and
attempt to handle every situation, which can lead to poor performance for
common cases. Other systems, such as Unix, provide a small set of abstractions
that can be made very efficient, at the expense of functionality. We are
implementing a flexible system building tool, FLEX, that allows us to support a
powerful operating systems interface efficiently by constructing specialized
module implementations at runtime. FLEX improves the performance of
existing systems by optimizing interprocess communications paths and
relocating servers and clients to reduce communications overhead. These
facilities improve the performance of Unix system calls on Mach from 20-400%.
Furthermore, FLEX can dynamically extend the kernel in a controlled fashion,
which gives user programs access to privileged data and devices not envisioned
by the original operating system implementor.