What is migration?

In systems without objects there are two forms of migration:
Data migration
Passive data, for example files, are transferred, in whole or in part, to a node at which they are used in some computation. The advent of NFS has meant that data migration is largely transparent to programmers.
Computation migration
The computation migrates to the data. This is the more difficult `process migration'. The act of process migration involves the dynamic transfer of an executing process from one node in a distributed system to another. This involves the transfer of state (typically an address space in the context of process migration), references to other processes (<#2515#> e.g.<#2515#> sockets, pipes, etc.), code (may form part of the address space), and execution state (<#2516#> e.g.<#2516#> registers, stack etc.). In addition to this, the original process must be disposed of in such a way that all references to it are relinked to the new copy, otherwise migration is not seamless and may lead to errors. Clearly, the whole process must be atomic to avoid either the process disappearing or there being two copies.
In a uniform object-based system the dichotomy is removed. All entities are represented by objects, so there is only one form of migration, object migration, in which objects, possibly containing threads, migrate around the system and perform work. One notable difference between some of the object-migration mechanisms and process migration is the question of granularity. Processes are typically rather large; objects can be of any size, down to single integers.