  The storage stack in the traditional operating system is primarily optimized
towards improving the CPU utilization and hiding the long I/O latency imposed
by the slow I/O devices such as hard disk drivers (HDDs). However, the emerging
storage media experience significant technique shifts in the past decade, which
exhibit high bandwidth and low latency. These high-performance storage devices,
unfortunately, suffer from the huge overheads imposed by the system software
including the long storage stack and the frequent context switch between the
user and kernel modes. Many researchers have investigated huge efforts in
addressing this challenge by constructing a direct software path between a user
process and the underlying storage devices. We revisit such novel designs in
the prior work and present a survey in this paper. Specifically, we classify
the former research into three categories according to their commonalities. We
then present the designs of each category based on the timeline and analyze
their uniqueness and contributions. This paper also reviews the applications
that exploit the characteristics of theses designs. Given that the user-space
storage is a growing research field, we believe this paper can be an
inspiration for future researchers, who are interested in the user-space
storage system designs.
