This paper describes Rhino, a transactional memory service that lets applications perform transactions on a virtual memory through ordinary loads and stores.
Rhino runs on the SPIN operating system, which lets user applications modify and augment the kernel by safely downloading code (extensions) into the kernel address space[spinSosp]. Rhino is implemented as an extension. Extensions can efficiently manipulate kernel resources such as virtual memory pages and files, and can thus avoid the performance bottlenecks that plague traditional systems.
We have developed several versions of Rhino as our understanding of SPIN and its target applications grew. These versions share the same transaction mechanisms, but they differ in the way they detect updates to memory and manage buffers. In this paper, we explore the tradeoffs among these systems under different workloads. We also show how SPIN's extension architecture enhances the performance of Rhino by comparing Rhino with its user-space, UNIX-based implementation.