Logical State
- Orec defines a unique logical state of a heap location
Orec contains |
Logical State |
Version number (always odd) |
Value from the heap, version from orec |
Pointer to transaction, which contains entry for this address |
If transaction committed: new value/version, else: old value/version |
Pointer to transaction with no entry for this address |
One orec serving multiple memory locations: use value from the heap, version from another entry mapped to the same orec |
Consistent snapshot guaranteed by:
do {
orec := orec_of (addr);
directly compute logical state based on orec
} while (orec_of (addr) != orec);
- Orecs contain pointer only when a tranasction is committing
- Logical value changes atomically with the change of transaction status
- Undefined when transaction in READ-CHECK state. Possible reaction: help or kill.