We have identified a set of five design issues (including address translation) that are relevant to the implementation of a persistence mechanism. Each of these issues can be resolved by making a specific granularity choice that is independent of the choice for any other issue. The combination of granularity choices for the different issues can then be used to characterize persistent systems. The specific design issues that we describe in this section are the granularities of address translation, address mapping, data fetching, data caching and checkpointing. In the remainder of this section, we define and discuss each issue in detail6 and also present the rationale behind the granularity choices for these issues in our implementation of orthogonal persistence in Texas.
To a first approximation, the basic unit for all granularity choices in Texas is a virtual memory page, because pointer swizzling at page fault time relies heavily on virtual memory facilities, especially to trigger data transfer and address translation. The choice of a virtual memory page as the basic granularity unit allows us to exploit conventional virtual memories, and avoid expensive run-time software checks in compiled code, taking advantage of user-level memory protection facilities of most modern operating systems. Sometimes, however, it is necessary to change the granularity choice for a particular issue to accommodate the special needs of unusual situations. It is possible to address these issues at a different granularity in a way that integrates gracefully into the general framework of Texas.