Existing operating systems share a common kernel text section
amongst all processes. It is not possible to perform
kernel specialization or tuning such that different applications
execute text optimized for their kernel use despite the
benefits of kernel specialization for performance guided optimization,
exokernels, kernel fastpaths, and cheaper hardware
access. Current specialization primitives involve system
wide changes to kernel text, which can have adverse effects
on other processes sharing the kernel due to the global
side-effects.
We present shadow kernels: a primitive that allows multiple
kernel text sections to coexist in a contemporary operating
system. By remapping kernel virtual memory on a
context-switch, or for individual system calls, we specialize
the kernel on a fine-grained basis. Our implementation of
shadow kernels uses the Xen hypervisor so can be applied to
any operating system that runs on Xen.