| OCR Text |
Show 11 terface specification between the packaging and load balancing layers. The model is adapted from an applicative system being developed at the University of Utah [35]. Applicative languages provide the benefits of extreme modularity, in that the function of each of several subprograms that executes concurrently can be understood independently. Therefore, the programmer need not assimilate a great deal of information about the environment of the subprogram in order to comprehend it. In applicative languages, there is no way to express constructs that produce global side-effects. This decoupling of the meaning of individual subprograms also makes possible a similar decoupling of their execution. Generating detachable tasks from these individual subprograms is the first step toward concurrent execution of applicative programs. Since an applicative program is formulated by function compositions, each function application can be regarded as a detachable task, or APPLY task, which is represented by an APPLY packet. Definition 1-2: An APPLY packet is a record which contains a closure for the function being applied, an argument, and a return pointer where the answer will be stored. The argument may be a pointer to a tuple if the function is viewed as multiargument. Definition 1-3: A closure is a record with a pointer to code for evaluating the function to be~ applied and a pointer to a tuple of import values for that function. An applicative system executes a program by demanding an answer of the program. An answer of an applicative program is, by definition, the result of a ~unction application. Therefore, the demand of an answer creates an apply task. Evaluation of an apply task may in turn generate more intermediate demands and hence more apply tasks. Results of apply tasks are returned to their originating processors. The demand and reply procedure continues until the main result is produced. Spawning an apply task in a distributed system establishes a parent-child relationship between the spawning and spawned tasks. A child task must know where the parent task 1s in order to return the computation result. |