ObjLayer is a distributed memory library for software caching of objects under application control. Objects are contiguous data blocks of arbitrary sizes. The system provides primitives for registering objects into the object space, modifying, reading, and destroying objects, and controling the consistency of objects on different processors.
An object is identified by a unique identifier. This identifier is created when the object is registered, and is used for all versions. Version management is transparent to the user. Subsequently, this ID must be used in all transactions on the object. Internally, an object is regarded as a sequence of versions. There is an explicit validation protocol that a node process has to call to upgrade the version of the copy of the object it has in local memory. To enable easy overlap between communication and computation, most primitives are split phase - initiation and tests for completion are separate function calls. There is no mechanism for process management: a single thread is assumed per physical processor, and it has control over the object system at all times. The rationale for this is that ObjLayer provides extremely general memory management primitives, and we expect thread schedulers to be built above this layer.