100 likes | 125 Views
Develop a Java code generator for IOA program to run in distributed networks efficiently without global synchronization. Use existing external services and hand-written data type implementations for successive refinement and support for other tools. Submit program for node algorithm, resolve nondeterminism, emit target code, and verify correctness.
E N D
I A O IOA Code Generator (Making IOA Run) Joshua A. Tauber PODC Rump Session July 17, 2000 Joint work with: Steve Garland, Nancy Lynch, Michael Tsai
What • Generate standard language (Java) translation of IOA program that will run in a physically distributed network • Execution should be efficient • No global synchronization
Why • (Short term) Test bed for distributed algorithm design • (Long term) Find practical method for generating code from specifications
How • Make humans do hard thinking • Model and use existing external services (e.g. network, console) • Use library of hand-written data type implementations • Stay in IOA until very last step • Successive refinement • Supports application of other tools
Env System Node-Channel Form Global Specification Node-Channel Form
Abstract Channels • Abstract model for ease of programming (e.g., Reliable FIFO queue): • Algorithm that implements abstract channel in terms of (model of) real channel: Auxiliary Automaton Real channel
Environment Implementation Env Delay Buffer Console Parser
Generated vs. External Automata Env Code to Generate Algorithm Channel
Code Generation Process • Submit IOA program for node algorithm • Generate parser automaton • Compose algorithm, parser (computed), and auxiliary network automata (from library) • Resolve nondeterminism in schedule • Convert implicit ND to explicit ND • Resolve explicit ND (programmer help) • Emit target language code - Link to hand coded-datatype implementations
Truth in Advertising • Assume network implements model • Assumes data type implementations implement axiomatic definitions • No current fault tolerance • Still in progess • Composer • Code generator • Proof of design correctness