Non-volatile memory technologies (NVMs) are a new family of technologies that combine near memory level performance with near storage level cost density. The result is a new type of memory hierarchy layer that exists and performs somewhere between the two. These new technologies offer many opportunities for performance
improvement, but in order to take advantage of these system design needs to account for their particular characteristics. In this thesis, we focus on how to design memory management and caching systems for NVMs. Our work is broken into three major categories targeting different
primary performance metrics.
1. We study how to design algorithms and memory management to achieve fault tolerance with low cost and efficient recovery using NVMs.
2. We design an extension to the traditional model of caching to account for data writes in order to improve NVM device lifetime and energy consumption.
3. We investigate how to improve throughput in caches by taking advantage of granularity change in the memory hierarchy.
Throughout our work we rely on a blend of theoretical and practical approaches. We provide models for processor faults, cache writebacks, and cache-storage communication
that isolate the targeted effects from orthogonal complications. For each model, we show worst case theoretical bounds for our algorithms along with proofs
that explain how the benefits are derived. We then take our results and provide empirical evaluations to show their effectiveness in practice. We believe that our ideas
and approach provide a solid foundational study on memory hierarchy design in the era of non-volatile memories.