SafetyNet: Improving the Availability of Shared Memory Multiprocessors with Global Checkpoint/Recovery