| OCR Text |
Show 87 during variable binding and dereferencing, searching for more work by idl processes, and backtracking and task migration. Although dereferencing of variables is one of the most common (and costly) of Boplog operations, there is little overhead from the enforcement of critical sections during dereferencing. Locking is required at three points. First. each value cell must be locked to ensure that its time stamp is not changed while determining if the binding was made during any ancestor time span: in general, there is little chance of this occurring because each value cell is locked individually. Second, if a value cell is local to this processor node, it may be unshared. To determine this case, the sep of the process is examined. To ensure that the sep is not updated by another process during this time, this process's information block must be locked. Finally, if a new value cell needs to be created and linked into the binding list for the variable, some locking is needed to prevent conflict when the link fields of the value cells are updated. Complementing the locking of a value cell during dereferencing, a value cell is also locked when the time stamp of a value cell is updated for a new binding. When a process backtracks, it attempts to take the next remaining choice from the most recent choice point created during this task. This choice point is the one referenced by this process's lep. The choice point contains a count of the number of choices already taken from this choice point. The choice point must be locked during the reading and updating of the choice count. This is done because idle processes may be attempting to migrate choices away from the same choice point if lep is equal to rep: they, too, need to update the choice count. If no choices remain in the lep choice point, the next most recent choice point becomes the lep choice point, and the backtracking procedure is repeated until either a choice point is found with some choices remaining, or until lep is equal to rep. When this condition occurs, choices are taken normally until all choices in this choice point are exhausted. At that time, there is no more work to be done for this task, and the process becomes idle. Since other processes are moving the rep fotward in the stack while this process is executing, the information block for the process must be locked during |