In days gone by, computers were prohibitively expensive. Most organizations had only a small number of computers, and each computer operated autonomously. However, as the cost of computers dramatically fell, it became reasonable to conceive of systems whose overall computational power could be increased by using more than one processor to simultaneously do work on the same problem.
There are a variety of paradigms currently in use for the execution of processes on remote processors. Often remote execution takes the form of a simple request-response protocol as in RPC systems: a process sends a message to a remote processor, requesting that some computation be done; the processor performs that computation and then returns the result to the requester.
Another common paradigm is explicit parallel programming: a programmer defines multiple concurrent tasks, encapsulating each in an OS process, and each process is run on a different processor. Most parallel programming environments decide where each process will be run at the time the process is born. Once a process begins, it must remain resident on the same processor until the completion of the task. Even if the scheduling of processes to processors turns out to be suboptimal, it cannot be changed. Often it is impossible to predict how the load on the system will change over time, and thus often impossible to optimally schedule processes to processors.
In an attempt to gain better performance, a number of researchers have developed a different class of parallel execution environments that allow processes to move from processor to processor dynamically at any point in the life of the process. A change in processor residency in the middle of the lifetime of the process is typically called ``process migration.'' By dynamically moving processes throughout their lifetimes, the system can potentially adapt better to changes in load that could not be foreseen at the start of the tasks. Proponents of process migration claim that this dynamic adaptation leads to a better system-wide utilization of available resources than static process scheduling.
This paper will examine various aspects of process migration schemes that have developed over the past several years. Section 2 will describe some of the operating system features that were necessary precursors to the development of process migration schemes. Section 3 reviews some of the factors that motivated the development of process migration schemes. Many of the more common implementation issues that all such schemes must address will be considered in Section 4. Section 5 will describe several real operating systems that support process migration, and compare the implementation decisions made by their designers. Conclusions are presented in Section 6.