| OCR Text |
Show 81 creates a new substructure and establishes linkages between the parent and children. Return packets from a child task normally eliminate the ch ild structures that are no longer needed. The previous section discussed a simple rollback scheme, which cuts off the branch or branches originating from a faulty node and regrows new branches. The method basically abandons all intermediate results computed by the child tasks of a faulty node. The scheme is simple, with very little overhead if no fault has occurred. However. recovery could be inefficient because all par-tial results are neglected. This section suggests a different approach, splice recovery, which attempts to retrieve all possible intermediate results. First, we describe the fun-damental principles for retrieving orphan tasks. Then. we apply the method to applicative programs without forward chaining (section 3.4.3). The method is later extended to general program structures. A proof of correctness is also presented. 3.4.1 Resilient evaluation structure The splice approach toward a fault-tolerant applicative system is to con-tinuously establish a resilient evaluation structure during program computations. A resilient structure is one containing redundant information which allows a # system to rebuild the original structure after a failure has been identified. By rebuilding the structure, the system may salvage many partial results. 3.4.1.1 Resilient applicative tree. It is obvious that ·every child task has a pointer to its parent. The pointer is needed for returning results. There is also an "implied" pointer from every parent task to its child, since a parent can · recreate any child. In other words, a child task is ·replaceable as long as the parent task is alive. This property suggests that the applicative call tree itself is resilient. When a processor fails, the call tree may break into several pieces.. The idea of the splice recovery is to provide necessary bridging information such |