| OCR Text |
Show 83 a grandparent node in this recovery scheme is two-fold: it reproduces the dead task and it transports the orphan results to their step-parent when these returns become available. Having the grandparent to relay partial results eliminates the problem of updating return addresses in every orphan task. 3.4.1.4 Rec~~~r_e~ _ ta~k~ __ A recovered task., like any other task, starts ex-ecuting its function code as soon as it is committed to a physical processor. When it encounters a funct ion call. 1t forms a task packet and spawns the child. However, offspring of a recovered task may or may not have been demanded by the preceding faulty task. The uncertainty of multiple invocations is the sole source of confusion of any recovery mechanism. Within the context of the splice recovery scheme. we analyze below all possible consequences of such invocations. Let P represent a faulty task, and C a child task. of P. P' is the recovery task. for P. C' is generated by P' and is the equivalent of C. An arrow from a parent to a child establishes the activation. An arrow from a child to a parent indicates the completion of the child task. The relationship between child task C and its clone C' has these pos-sibilities: (Figure 23) ( 1) C has never been invoked; (2) C will never complete; (3) C completes before P dies; (4) C completes after P dies, but before P' is invoked; (5) C completes after P' is invoked, but before C' is invoked; (6) C completes after C' is invoked; (7) C completes after c· has completed; (8) C completes after P' has completed. Case.,: an old task has never been invoked (Figure 24). If parent P has failed before P spawns child C, there is no residue effect for the child task C'. Task C' is the only instantiation of the function C in the system. No confusion results. Case 2: an old result will never be produced (Figure -25). A spawned task may not be able to finish the computation and yield a sensible result due to the failure of the parent node. For example, if C requests some argument from P and P is dead, then task C cannot proceed as usual. |