  In this paper, we rethink how an OS supports virtual memory. Classical VM is
an opaque abstraction of RAM, backed by demand paging. However, most systems
today (from phones to data-centers) do not page, and indeed may require the
performance benefits of non-paged physical memory, precise NUMA allocation,
etc. Moreover, MMU hardware is now useful for other purposes, such as detecting
page access or providing large page translation. Accordingly, the venerable VM
abstraction in OSes like Windows and Linux has acquired a plethora of extra
APIs to poke at the policy behind the illusion of a virtual address space.
  Instead, we present Cichlid, a memory system which inverts this model.
Applications explicitly manage their physical RAM of different types, and
directly (though safely) program the translation hardware. Cichlid is
implemented in Barrelfish, requires no virtualization support, and outperforms
VMM-based approaches for all but the smallest working sets. We show that
Cichlid enables use-cases for virtual memory not possible in Linux today, and
other use-cases are simple to program and significantly faster.
