System Tools for the J-Machine
Daniel Maskit, Yair Zadik and Stephen Taylor
Scalable Concurrent Programming Laboratory
California Institute of Technology
April 30, 1993
This document contains a description of the system tools we have developed to support programming the J-Machine. The intent of this document is to provide sufficient details to allow other programming systems to utilize the tools. This document is a technical reference for the use of implementors; it is not intended for casual readers.
The basic programming model supported by the tools provides the abstraction of a
fully connected set of n multicomputer nodes numbered to n ? 1. Only sequential code
execution and remote function invocation are supported at each node. Global variables are replicated at every node.
Executable code consists of a collection of functions which may be distributed onto nodes arbitrarily. The underlying runtime system ensures that code is transported to each node as needed. To enhance system performance, functions are separated into two groups: those that are distributed across the entire machine and those that are replicated at every node. Distributed functions are intended to be used infrequently. Replicated functions are frequently-used code segments such as floating point routines, the microkernel, and critical application functions. The placement of distributed functions is based on a binpacking module within the linker. This is accessed using a standard interface to allow the user to experiment with different code allocation schemes. Code distribution conserves limited memory without excessive speed degradation.
The tools provided include the GNU C compiler retargetted for the J-Machine, an assembler, linker/archiver, and loader. The linker maps a program onto a physical address space. This address space resides upon the virtual nodes of the abstraction. The loader then maps the abstraction's virtual node-space onto the machine's physical node-space. The programs that make up the tool suite are: