next up previous
Next: 3.3.1 Checkpointing Mapped Segments Up: 3 Components of a Previous: 3.2.1 Manipulating the Stack

3.3 Shared Libraries

Until recently, Condor had required that jobs with checkpointing support be linked statically. However, vendors have begun releasing UNIX systems without full support for static linking. For example, only dynamic versions of some or all libraries are provided.

Processes on current UNIX systems may contain mapped segments in their address space in addition to traditional text, data, and stack segments. This mapped segment facility is used to support dynamically-linked, shared-text libraries. When a dynamically-linked process is created, the necessary libraries are mapped into the process's address space. The first time a specific library call is made, a fault occurs and a link is created between the text symbol and the function definition in the library. Processes may also load in new libraries at any point during their execution. There is no guarantee that libraries will be mapped into the same addresses for multiple executions of the same program.

Condor must checkpoint the dynamic library data of the running process, in addition to the stack and data segments. The system must also ensure on restart that each dynamic library is mapped into the same area of virtual memory where it lived before the checkpoint, so that the dynamic links that have been set up are still valid. To do this, Condor must have support from the operating system to find all active segments, read the data in these segments, create new segments at arbitrary addresses, and write (restore) data into those new segments.