<P> In computing, process migration is a specialized form of process management whereby processes are moved from one computing environment to another . This originated in distributed computing, but is now used more widely . On multicore machines (multiple cores on one processor or multiple processors) process migration happens as a standard part of process scheduling, and it is quite easy to migrate a process within a given machine, since most resources (memory, files, sockets) do not need to be changed, only the execution context (primarily program counter and registers). </P> <P> The traditional form of process migration is in computer clusters where processes are moved from machine to machine, which is significantly more difficult, as it requires serializing the process image and migrating or reacquiring resources at the new machine . Process migration is implemented in, among others, OpenMosix . It was pioneered by the Sprite OS from the University of California, Berkeley . </P> <P> Process migration in computing comes in two flavors: </P> <Dl> <Dt> Non-preemptive process migration </Dt> <Dd> Process migration that takes place before execution of the process starts (i.e. migration whereby a process need not be preempted). This type of process migration is relatively cheap, since relatively little administrative overhead is involved . </Dd> <Dt> Preemptive process migration </Dt> <Dd> Process migration whereby a process is preempted, migrated and continues processing in a different execution environment . This type of process migration is relatively expensive, since it involves recording, migration and recreation of the process state as well as the reconstructing of any inter-process communication channels to which the migrating process is connected . </Dd> </Dl>

Desirable features of a good process migration mechanism