| Pointers in C provide a powerful and flexible approach for designing dynamic data structures whose sizes and shapes change at run-time, e.g. linked lists, trees, stacks, hashed tables, directed acyclic graphs (DAG), general graphs, etc. But this advantage could become an obstacle when running on a loosely coupled cluster using message passing or DSM systems. Their dynamic nature, such as incremental allocation and irregular access pattern, makes it hard for the compiler or the programmer to distribute both the data and the code in a balanced fashion.; We will describe a process migration system that supports system-wide pointers and global dynamic data structures. The system lets the processes to (1) distribute the data structures among hosts, (2) implicitly migrate when referencing remote data, (3) handle pointers in a location-transparent manner, (4) fork and synchronize through the native UNIX calls.; In addition, we tackle the granularity issues when the process migration becomes inefficient. The system is enhanced by an ability to pull or push a very small amount of data (word) or to migrate a large virtual address page(s) instead of migrating the process. Our system makes sure that the correctness of the algorithms is preserved and adds the runtime heuristic for selecting between process and data migration based on the past access pattern of the processes. |