| OCR Text |
Show 23 since some would be destroyed. If they write them to different locations, then they must create logically separate environments for each potentially-shared variable. This approach can result in a combinatortally-explosive use of memory and a large overhead for copying information into separate areas of memory. An alternative is to create space for new bindings only when they are needed; then the problem becomes one of associating the binding with the correct process. This problem will be called variable dtsambtguatton. and usually takes place during dereferencing. Most of the current literature on OR-parallel logic programming deals with precisely this issue. Several methods have been suggested for representing the multiple-binding environments of OR-parallel implementations. Each has advantages for different architectures and execution models. The following sections describe several of these methods. 2.3.1.1 OR Processes. The AND/OR Process Model was one of the first ap-proaches to parallel logic programming, and combines both AND and OR parallelism [11]. In their model, each node of the search tree is represented by a corresponding process. AND processes control descendant OR processes, and vice versa. OR processes return solutions to their parent AND processes only on request, so there are never multiple bindings in existence. 2.3.1.2 Directory Trees. Ciepielewski and Haridi have proposed a solution to the multiple-binding environment problem which is called the directory tree method [6]. It handles the environment for their OR-parallel Token Machine. In this method, a frame is created for each clause of a procedure when the procedure is called. The frame contains space for each unbound variable in the procedure. When a choice is migrated, those frames which contain unbound variables are copied. The ancestor frames containing bound variables, and the new frames containing some unbound variables, form the environment for the descendant process. Each process can then bind the ancestor variables without collisions, since they are in physically separate locations. A directory is kept by each process which locates the frames for each activation so far in the execution. To access a variable, the correct frame is found and the value stored there for |