| OCR Text |
Show 5.4 Reverse Execution Reverse execution provides access to old states of an executing process. It is a well established concept in computer science used in program development and debugging [7, 20, 61, 64, 80, 83, 92], in programming environments and human-computer interaction [4, 30, 46, 48, 91], in fault-tolerant computing [14, 21, 44, 45] and in speculative computation [24, 38]. In computer architecture, techniques of reverse execution are used to provide precise interrupts [36, 76]. Since computer processes are in general not reversible, special information must be recorded in order to be able to restore states in the past. This information is called the history of the process. Implementations of reverse execution fall into roughly two classes: hardware and software approaches. Hardware approaches impose little overhead on program execution. Since hardware solutions are usually optimized for a particular application, like fault-tolerance or speculative computation, they have only a limited use as a general facility for reverse execution. Most software approaches to reverse execution are implemented in interpreted environments, which imposes a large overhead in terms of execution speed. Since these implementations often rely on significant support from a particular programming environment, they are not portable across different environments or languages. Recent approaches implement reverse execution by using the mechanisms of virtual memory. These systems provide reverse execution at a coarse grain of one memory page. They are an effective solution for certain tasks such as getting the value of a variable at some instant in the history. Since they involve sophisticated data structures, however, some operations are expensive, such as restoring the entire state of a process. 133 |