Containers


Overview

The construction of persistent systems typically requires a persistent store abstraction. Grasshopper provides such an abstraction in the form of a container. They are persistent entities which replace the process address space and file system found in conventional operating systems. Conceptually, a container represents a large repository for data. The data stored in a container can be referenced via its container address: a 64 bit offset relative to the start of the container.

Since many containers may coexist, an application is able to partition its persistent storage as necessary. This has two advantages; firstly, partitioning permits the logical grouping of related data which may improve performance in terms of disk access time, garbage collection, and checkpointing overheads. Secondly, partitioning can also provide a level of protection between different uses of the store. For example, in a multilingual environment it is necessary to partition the store to ensure type security.