Date Added: Sep 2010
Current multiprocessor systems execute parallel and concurrent software nondeterministically: even when given precisely the same input, two executions of the same program may produce different output. This severely complicates debugging, testing, and automatic replication for fault-tolerance. Previous efforts to address this issue have focused primarily on record and replay, but making execution actually deterministic would address the problem at the root. The authors' goals in this work are twofold: to provide fully deterministic execution of arbitrary, unmodified, multithreaded programs as an OS service; and to make all sources of intentional nondeterminism, such as network I/O, be explicit and controllable.