Platform Independent Checkpointing of a C-Program in Execution
Abstract
Process checkpointing is a technique to store the state of a process
during normal execution. It has been extensively used to provide
support for software fault-tolerance, process migration and playback
debugging. Most of the research on process checkpointing has focussed
on homogeneous process checkpointing. The current trend towards
heterogeneity in high performance distributed systems, wide area
computing, mobile computing requires the flexibility of process
restart on a different operating system and/or architecture. This
paper proposes an operating system, architecture and compiler
independent approach to checkpointing of a C-program in execution. Our
approach is language-based in the sense that process checkpointing is
accomplished merely by instrumenting the source program independently
of the underlying compiler, operating system or the
architecture. Besides this, the paper has two main
contributions. Firstly, it demonstrates how to keep track of
dynamically allocated memory and the type of data item stored in it in
an unsafe language like C with small run-time and space
overhead. Secondly, it shows how static program analysis can help in
reducing checkpointing overhead. The checkpointing strategies
developed in this paper demonstrate this fact. We have implemented a
C-precompiler that is currently capable of instrumenting small C
programs to make them capable of capturing their internal dynamic
state. Preliminary results have been encouraging and have shown small
space and time overheads.