The emergence of systems with non-volatile main memory (NVM) increases the interest in the design of recoverable concurrent objects that are robust to crash-failures, since their operations are able to recover from such failures by using state retained in NVM. Of particular interest are recoverable algorithms that, in addition to ensuring object consistency, also provide detectability, a correctness condition requiring that the recovery code can infer if the failed operation was linearized or not and, in the former case, obtain its response.In this work, we investigate the space complexity of detectable algorithms and the external support they require. We make the following three contributions. First, we present the first wait-free bounded-space detectable read/write and CAS object implementations. Second, we prove that the bit complexity of every N -process obstruction-free detectable CAS implementation, assuming values from a domain of size at least N , is Ω(N ). Finally, we prove that the following holds for obstruction-free detectable implementations of a large class of objects: their recoverable operations must be provided with auxiliary state -state that is not required by the non-recoverable counterpart implementation -whose value must be provided from outside the operation, either by the system or by the caller of the operation. In contrast, this external support is, in general, not required if the recoverable algorithm is not detectable.this auxiliary state must be made available to recoverable operations either via their arguments or via a non-volatile variable accessible by them whose value must be modified outside the operation. In contrast, this external support is, in general, not required if the recoverable algorithm is not detectable.The rest of the paper is organized as follows. We describe the system model in Section 2. We then present our bounded-space detectable read/write and CAS algorithms in Sections 3 and 4, respectively. In Section 4 we also prove a lower bound on the space complexity of detectable CAS. This is followed by a proof that detectable implementations of a large class of objects require auxiliary state in Section 5. The paper is concluded by a short discussion in Section 6.
System ModelA set P of N asynchronous crash-prone processes communicate through shared objects. The system provides base objects (also called shared variables or registers) that support atomic read, write, and read-modify-write primitive operations. Base objects are used to implement higher-level concurrent objects by defining algorithms, for each process, which use primitive operations to carry out the operations of the implemented object.The state of the system consists of non-volatile shared-memory variables and per-process local variables stored in its local volatile cache. Local variables are accessed only by the process to which they belong. For presentation simplicity, we assume that each process p may own non-volatile private variables that reside in the NVM but are accessed only by p. We also assume...