Saving and restoring the state of a process's CPU is potentially the most machine dependent part of the checkpointing code. Various processors have different numbers of integer and floating point registers, special purpose registers, floating point hardware, instruction queues, and so on. One might think that it would be necessary to build an assembler code module for each CPU to accomplish this task, but we have discovered that mechanisms already available within the UNIX system call set can be leveraged to do this work with (in most cases) no assembler code at all. This is the reason that a checkpoint is always invoked by sending the process a signal. A characteristic of the signal mechanism is that the signal handler could do anything at all with the CPU, but when it returns, the interrupted user code should continue on without error. This means that the signal handling mechanism provided by the system saves and restores all the CPU state we need.