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).
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.
Process migration in computing comes in two flavors:
An alternate definition of process migration is used in integrated circuit design and engineering. Process migration or layout migration in this context is a design flow to change and shrink an existing IC layout to a new process technology node. The implementation of a process migration could be done manually by redrawing the layout feature by feature or by automatic EDA/CAD tools. In load sharing systems, a process is migrated from one node to another using a mechanism called process migration.
The concept of a process is not introduced in this report as processes are a well-known design in operating systems. Process Migration refers to the mobility of executing (or suspended) processes in a distributed computing environment. Usually, this term indicates that a process uses a network to migrate to another machine to continue its execution there. Sometimes the term is used to describe the change in execution from one processor to another processor within the same machine. I will use process migration in the first context - programs migrating between machines.