One of the first programs I wrote in 1955 for the new IBM 704 at Livermore was a trivial subroutine to copy all of core (RAM) to magnetic tape. The call semantics was a bit like the current Unix fork call but for some indefinite time in the future. The routine semantics was perhaps more like the production of a ‘continuation’ which was placed on magnetic tape instead of returned to caller. This core image was preceded on tape by a short boot block containing about 10 commands to copy the core image back into core. For simple long running programs this sufficed for running a program for periods longer than normal production runs. The program could be resumed later on the same or a different machine. Machine failures could be thus overcome. The machine could undergo repair and the production calculation resumed. Calling the routine might be programmed periodically, or might be signaled from an operator ‘sense switch’. Simple variations kept several checkpoints on one reel of tape.
Larger applications whose data did not fit in core integrated restart tape logic with the logic already necessary to move their working data in and out of core memory.