General considerations

UNIX processes interact with the operating system, with other processes, memory, files, devices, and other resources. This means that there is a significant amount of location dependent state associated with each process; file descriptors, IPC connections, device locks, etc. In a Unix context, a process image consists of: This state information must be migrated with the process and translated as required in order to ensure that it is valid in the new environment. Unfortunately, this is a far from trivial task. As a consequence of these difficulties almost all Unix process migrations schemes require quite severe limitations on the processes which can be migrated (although there is no way of checking compliance). To be migratable, processes should not:
  1. Perform I/O on non-NFS files.
  2. Spawn subprocesses.
  3. Utilise their pid or any other location-specific information.
  4. Utilise pipes or sockets.
As a general mechanism then, the last restriction alone suggests that Unix process migration is not practicable in a general distributed system composed of communicating entities. In general, migrating an entire distributed system of application modules which shares state with the underlying system of communication support (kernel protocols) is close to impossible.