Results 11 - 20
of
35
Debuggable Concurrency Extensions for Standard ML
- Also Princeton Univ. Dept. of Computer Science
, 1991
"... We are developing an interactive debugger with reverse execution for the language Standard ML extended to include concurrent threads in the style of Modula-2+. Our debugging approach is based on automatic instrumentation in the source language of the user's source code; this makes the debugger compl ..."
Abstract
-
Cited by 17 (3 self)
- Add to MetaCart
We are developing an interactive debugger with reverse execution for the language Standard ML extended to include concurrent threads in the style of Modula-2+. Our debugging approach is based on automatic instrumentation in the source language of the user's source code; this makes the debugger completely independent of the compiler back-end, run-time system, and target hardware. The debugger operates entirely inside the concurrency model and has no special concurrency privileges. In this paper, we consider some of the challenges of debugging a non-deterministic concurrent symbolic language "in itself." Issues considered include logging nondeterministic activity, obtaining more secure semantics for our concurrency primitives, controlling distributed computations, and defining suitable time models. We conclude by suggesting an alternative simulation-based approach to dealing with non-determinism. 1 Debugging Standard ML Standard ML [22] is a general purpose programming language featurin...
The Many Faces of Introspection
, 1992
"... Introspection or the ability to observe one's own behavior is one of the most powerful capabilities of human intelligence; it is the basis for understanding and improvement of one's behavior and of human progress. Similarly, introspective computer systems, introduced in this thesis, examine, reason ..."
Abstract
-
Cited by 14 (9 self)
- Add to MetaCart
Introspection or the ability to observe one's own behavior is one of the most powerful capabilities of human intelligence; it is the basis for understanding and improvement of one's behavior and of human progress. Similarly, introspective computer systems, introduced in this thesis, examine, reason about, and change their own behavior in powerful new ways. Because the complexity of computers is rapidly increasing, yet is restricted by limited human resources, the most attractive quality of introspective computers is their ability to manage this growing complexity themselves. Self-managing computer systems would greatly expand the rational power and complexity of computer systems that can be successfully built. The main difficulty in constructing introspective computer systems is enabling the system to obtain a description of its complete behavior in a dynamic and unobtrusive way. This thesis proposes the partition of the system into two threads of control. The first thread performs the...
Extensions to Standard ML to Support Transactions
, 1992
"... A transaction is a control abstraction that lets programmers treat a sequence of operations as an atomic ("all-or-nothing") unit. This paper describes our progress on on-going work to extend SML with transactions. What is novel about our work on transactions is support for multi-threaded concurrent ..."
Abstract
-
Cited by 13 (1 self)
- Add to MetaCart
A transaction is a control abstraction that lets programmers treat a sequence of operations as an atomic ("all-or-nothing") unit. This paper describes our progress on on-going work to extend SML with transactions. What is novel about our work on transactions is support for multi-threaded concurrent transactions. We use SML's modules facility to reflect explicitly orthogonal concepts heretofore inseparable in other transaction-based programming languages.
NREVERSAL of Fortune -- The Thermodynamics of Garbage Collection
- In ACM Sigplan Notices
, 1977
"... The need to reverse a computation arises in many contexts---debugging, editor undoing, optimistic concurrency undoing, speculative computation undoing, trace scheduling, exception handling undoing, database recovery, optimistic discrete event simulations, subjunctive computing, etc. The need to anal ..."
Abstract
-
Cited by 13 (0 self)
- Add to MetaCart
The need to reverse a computation arises in many contexts---debugging, editor undoing, optimistic concurrency undoing, speculative computation undoing, trace scheduling, exception handling undoing, database recovery, optimistic discrete event simulations, subjunctive computing, etc. The need to analyze a reversed computation arises in the context of static analysis---liveness analysis, strictness analysis, type inference, etc. Traditional means for restoring a computation to a previous state involve checkpoints; checkpoints require time to copy, as well as space to store, the copied material. Traditional reverse abstract interpretation produces relatively poor information due to its inability to guess the previous values of assigned-to variables. We propose an abstract computer model and a programming language---Y-Lisp---whose primitive operations are injective and hence reversible, thus allowing arbitrary undoing without the overheads of checkpointing. Such a computer can be built from reversible conservative logic circuits, with the serendipitous advantage of dissipating far less heat than traditional Boolean AND/OR/NOT circuits. Unlike functional languages, which have one "state " for all times, Y-Lisp has at all times one "state", with unique predecessor and successor states. Compiling into a reversible pseudocode can have benefits even when targeting a traditional computer. Certain optimizations, e.g., update-in-place, and compile-time garbage collection may be more easily performed, because the
Design and Implementation of Dynascope, a Directing Platform for Compiled Programs
- Computing Systems
, 1994
"... Debugging and performance measurement tools are becoming increasingly important, especially in distributed and parallel computer systems. A characteristic task of debuggers and performance measurement tools is directing. Directing consists of two major classes of activities, monitoring and contro ..."
Abstract
-
Cited by 9 (4 self)
- Add to MetaCart
Debugging and performance measurement tools are becoming increasingly important, especially in distributed and parallel computer systems. A characteristic task of debuggers and performance measurement tools is directing. Directing consists of two major classes of activities, monitoring and controlling. Monitoring is used for collecting information about the program behavior. Controlling is used to modify the program state in order to influence its future behavior. Dynascope, a directing platform, provides basic monitoring and controlling primitives for building advanced directing applications. It is integrated with existing programming tools and uses only generic operating system and networking primitives. The usage of Dynascope facilities is demonstrated in simulator testing and program tracing. Measurements show the performance of Dynascope in local and distributed environments. 1 Introduction Increasingly complex software requires sophisticated debugging and performance...
The Dynascope Directing Server: Design and Implementation
, 1995
"... As computer systems are becoming increasingly complex, directing tools are gaining in importance. Directing denotes two classes of activities, monitoring and controlling. Monitoring is used for collecting information about the program behavior. Controlling is used to modify the program state in orde ..."
Abstract
-
Cited by 7 (0 self)
- Add to MetaCart
As computer systems are becoming increasingly complex, directing tools are gaining in importance. Directing denotes two classes of activities, monitoring and controlling. Monitoring is used for collecting information about the program behavior. Controlling is used to modify the program state in order to change program's future behavior. Some characteristic directing tools are debuggers and performance monitors. Dynascope is a directing platform, which provides basic monitoring and controlling primitives. These primitives are used in building advanced directing applications for networked and heterogeneous environments. Dynascope is integrated with existing programming tools and uses only generic operating system and networking primitives. This paper describes the design and implementation of the directing server, the central component of Dynascope. Dynascope is being used in several applications, including relative debugging, steering agents, and simulator testing. 1 Introduction Incre...
History Cache: Hardware Support for Reverse Execution
- Computer Architecture News
, 1994
"... Reverse execution provides access to old states of an executing process. An application of reverse execution can be found in program debugging. When an error is detected, its cause is often hidden in the history of the process. In such situations, it is important to be able to recover and examine pa ..."
Abstract
-
Cited by 7 (0 self)
- Add to MetaCart
Reverse execution provides access to old states of an executing process. An application of reverse execution can be found in program debugging. When an error is detected, its cause is often hidden in the history of the process. In such situations, it is important to be able to recover and examine past states of the process. Numerous other applications of reverse execution are found in programming environments, in fault-tolerant computing and in speculative computation. Since processes are in general irreversible, the history must be saved in order to provide reverse execution. The main problem in dealing with the history is the amount of data generated. This paper describes a new approach to reverse execution based on a history cache which compacts the history. The performance of the history cache is measured on a simulator. The history cache can compact the history by more than an order of magnitude. Efficient support for reverse execution enables many new techniques such as a generi...
Stabilizers: a modular checkpointing abstraction for concurrent functional programs
- In ICFP ’06
, 2006
"... Transient faults that arise in large-scale software systems can often be repaired by re-executing the code in which they occur. Ascribing a meaningful semantics for safe re-execution in multi-threaded code is not obvious, however. For a thread to correctly re-execute a region of code, it must ensure ..."
Abstract
-
Cited by 6 (2 self)
- Add to MetaCart
Transient faults that arise in large-scale software systems can often be repaired by re-executing the code in which they occur. Ascribing a meaningful semantics for safe re-execution in multi-threaded code is not obvious, however. For a thread to correctly re-execute a region of code, it must ensure that all other threads which have witnessed its unwanted effects within that region are also reverted to a meaningful earlier state. If not done properly, data inconsistencies and other undesirable behavior may result. However, automatically determining what constitutes a consistent global checkpoint is not straightforward since thread interactions are a dynamic property of the program. In this paper, we present a safe and efficient checkpointing mechanism for Concurrent ML (CML) that can be used to recover from transient faults. We introduce a new linguistic abstraction called stabilizers that permits the specification of per-thread monitors and the restoration of globally consistent checkpoints. Safe global states are computed through lightweight monitoring of communication events among threads (e.g. message-passing operations or updates to shared variables). Our experimental results on several realistic, multithreaded, server-style CML applications, including a web server and a windowing toolkit, show that the overheads to use stabilizers are small, and lead us to conclude that they are a viable mechanism for defining safe checkpoints in concurrent functional programs.
Source-level Debugging for Multiple Languages with Modest Programming Effort
- International Conference on Compiler Construction
, 2005
"... Abstract. We present techniques that enable source-level debugging for multiple languages at the cost of only modest programming effort. The key idea is to avoid letting debugging requirements constrain the internal structure of the compiler. Constraints are minimized primarily by hiding the source- ..."
Abstract
-
Cited by 5 (0 self)
- Add to MetaCart
Abstract. We present techniques that enable source-level debugging for multiple languages at the cost of only modest programming effort. The key idea is to avoid letting debugging requirements constrain the internal structure of the compiler. Constraints are minimized primarily by hiding the source-language type system and target-machine representations from the debugger. This approach enables us to support a new language and compiler while reusing existing elements: a multi-language, multi-platform debugger; the compiler’s implementation of source-language types and expressions; information already present in the compiler’s private data structures; and our compile-time support library, which helps the compiler meet its obligations to the debugger without exposing languagedependent details. We evaluate our approach using two case studies: the production compiler lcc and an instructional compiler for MiniJava. 1
Implementation of Directing for Compiled Programs
"... Debugging and performance measurement tools are becoming increasingly important, especially in distributed and parallel computer systems. These tools are complex, because they are dependent on all major components of computer systems: computer architectures, operating systems, networking, and existi ..."
Abstract
-
Cited by 4 (4 self)
- Add to MetaCart
Debugging and performance measurement tools are becoming increasingly important, especially in distributed and parallel computer systems. These tools are complex, because they are dependent on all major components of computer systems: computer architectures, operating systems, networking, and existing programming tools. The complexity is compounded by the heterogeneous nature of most computing environments. This complexity results in tools that are usually system specific. Significant resources are spent on reimplementing similar tools on different systems. A system independent platform for building debuggers and performance measurement tools would simplify the tool construction. This would redirect resources toward building better tools, capable of operating in heterogeneous environments. A characteristic task of debuggers and performance measurement tools is directing. Directing consists of two major classes of activities, monitoring and controlling. Monitoring is used for collectin...

