Usermode Compatibility for Linux Kernel Code (UMC)
A shim for running some Linux kernel code in usermode
David A. Butterfield
The initial implementation of UMC emulates a sufficient subset of Linux kernel internal functions to support an SCST-based iSCSI storage server (based on ~80,000 lines of SCST kernel sources) running entirely in usermode on an unmodified kernel.
UMC emulates the necessary functionality using calls to the sys_service API implemented by the Multithreaded Event Engine (MTE) in libmte, and to functions in libpthread, libaio, libdl, and libc.
Most of the UMC code resides in usermode_lib.h (~2500 lines of code), supported by another ~300 LOC in usermode_lib.c. Another ~700 LOC implements a translation between the kernel's proc_dir_entry calls and fuse(8) calls, to support the kernel module's interface to system applications.
Although there are presently a small number of places in the code using Linux-specific system call options, these could easily be abstracted out to allow the possibility of running SCST also on non-Linux systems having gcc and the necessary libraries.
UMC depends on Multithreaded Engine (libmte) — a high-performance multi-threaded usermode event dispatching engine.
iSCSI-SCST Storage Server Usermode Adaptation — a port of the SCST iSCSI storage server to run entirely in usermode on an unmodified Linux kernel. [Paper describing the project in detail]