A half-baked approach to an embedded device driver framework in - - PowerPoint PPT Presentation

a half baked approach to an embedded device driver
SMART_READER_LITE
LIVE PREVIEW

A half-baked approach to an embedded device driver framework in - - PowerPoint PPT Presentation

1 A half-baked approach to an embedded device driver framework in Esterel Timothy Bourke and Leonid Ryzhyk School of Computer Science and Engineering, UNSW and National ICT Australia Arcot Sowmya Ihor Kuz UNSW Asia, Singapore National


slide-1
SLIDE 1

1

A half-baked approach to an embedded device driver framework in Esterel

Timothy Bourke and Leonid Ryzhyk School of Computer Science and Engineering, UNSW and National ICT Australia Arcot Sowmya UNSW Asia, Singapore and UNSW Sydney Ihor Kuz National ICT Australia

slide-2
SLIDE 2

2

Leonid’s problem:

Reliable driver framework

My interest:

using synchronous languages?

  • Evaluate feasibility and identify related work, so far:

– More questions than answers – Ideas rather than implementations

  • Today: criticisms, opinions, missing references
slide-3
SLIDE 3

3

Reliable I/O Framework: Aims

Device drivers:

  • 70% of systems code
  • 3 times more bugs per line of code

[Chou et al., 2001]

slide-4
SLIDE 4

3-b

Reliable I/O Framework: Aims

Device drivers:

  • 70% of systems code
  • 3 times more bugs per line of code

[Chou et al., 2001]

fault prevention

reduce number of faults

fault tolerance

recover from faults

fault avoidance

  • structure framework and API
  • to simplify development

fault removal

  • find and eliminate bugs in SW

fault detection

  • recognise bad states & behaviours

fault isolation

  • prevent faulty drivers from corrupting
  • OS and applications

error recovery

  • MINIX, NOOKS
slide-5
SLIDE 5

4

sm: Ethernet protocol state machine enabled rx_full rx_need_more_buffers rxReady! rxEnqueue? txDone! txReady! txEnqueue? tx_ready tx_busy rxDone! enable_in_progress disabled disable_in_progress rxAbortPacket! enableComplete! [ERROR ] enable? enableComplete! [SUCCESS ] disableComplete! disable? txAbortPacket!

Created with Poseidon for UML Community Edition. Not for Commercial Use.

slide-6
SLIDE 6

5

Reliable I/O Framework: Protocol State Machines

Constraints on the ordering and content of messages exchanged through a port

fault prevention

reduce number of faults

fault tolerance

recover from faults

fault avoidance

  • precise specification
  • clarifies/documents API

fault removal

  • static analysis of C
  • analysis of implementation SMs

fault detection

  • bserve protocol and driver

fault isolation

  • memory protection
  • graceful termination/recovery of
  • pending requests

error recovery

  • recovery protocols(?)
slide-7
SLIDE 7

6

Reliable I/O Framework: Extend ‘Iguana’ Framework

  • L4 micro-kernel
  • user level drivers
  • shift complexity

– buffering, – memory allocation, – concurrency into the framework

  • single-threaded

– non-blocking

  • split events:

– request – completion

slide-8
SLIDE 8

7

L4 microkernel [Liedtke, 1995]

Application VFS IPC, file system scheduler, virtual memory device drivers, dispatcher, . . . hardware user mode kernel mode App. UNIX server File server . . . IPC, Virtual Memory hardware

  • sys. call

IPC

diagram credit: slides for CSE/UNSW COMP9242 s2/02

  • Address spaces
  • Threads
  • Heavily optimised IPC
  • blank
  • thin layer on top of hardware
  • Sydney version targeted at embedded systems
  • Potential mismatch with IPC and architecture
  • not real-time
slide-9
SLIDE 9

8

Is Esterel suitable for such a subsystem?

slide-10
SLIDE 10

8-b

Is Esterel suitable for such a subsystem?

(not answered!)

slide-11
SLIDE 11

8-c

Is Esterel suitable for such a subsystem?

(not answered!) highly suitable? no research needed; just engineering

  • answer: show efficient prototype using existing tools
slide-12
SLIDE 12

8-d

Is Esterel suitable for such a subsystem?

(not answered!) highly suitable? no research needed; just engineering

  • answer: show efficient prototype using existing tools

not suitable? give up!

  • answer: reasons why, alternatives
slide-13
SLIDE 13

8-e

Is Esterel suitable for such a subsystem?

(not answered!) highly suitable? no research needed; just engineering

  • answer: show efficient prototype using existing tools
  • suitable. . .
  • if what must be done?
  • but what are the limitations?

not suitable? give up!

  • answer: reasons why, alternatives
slide-14
SLIDE 14

9

Is Esterel suitable for such a subsystem?

Advantageous properties:

  • Notation for event-driven reactive systems
  • Synchronous rounds may simplify recovery mechanisms
  • Amenable to validation (interfaces, model-checking)

Desirable properties:

  • Able to exploit hardware memory protection
  • Separate compilation of drivers
  • Operate in a multi-tasking environment
  • Tractable reasoning about execution within the system context
  • Limited addition and removal of hardware
  • Track user request state
slide-15
SLIDE 15

10

Presentation Outline Reliable I/O Framework Possible Architectures Strictly event-driven modules Event-driven scheduling Example: IP Stack and Ethernet driver Other related work Summary

slide-16
SLIDE 16

11

Possible Architectures: monolithic

application hardware

  • r,

hardware

  • Wristwatch [Berry, 1989]
  • Most straight-forward application of Esterel
  • Utilise standard tools
  • Responsible for interface code

Reasoning about system:

  • Behaviour of the underlying transition system
  • Meaning of signals (depends on interface)

For driver framework:

  • Fast execution (almost no run-time overhead)
  • No memory protection
  • Relatively inflexible
slide-17
SLIDE 17

12

Architectures: HW/SW Interface (single driver)

app. i/face hardware

. . .

e.g. app. HDLC Driver line queuing global serializing relation instantaneous view

  • HDLC Protocol [Berry and Gonthier, 1989]
  • Utilize standard tools
  • Application side: may need to avoid blocking

Reasoning about system:

  • As per normal
  • Queueing in application

For driver framework:

  • Memory protection possible
  • Communication between drivers?
slide-18
SLIDE 18

13

Architectures: Application subsystem

app. OS hardware

. . .

and/or, app. OS hardware

. . .

  • AT&T 5ESS switch [Jagadeesan et al., 1995]
  • Part of TCP/IP stack [Castelluccia et al., 1996]
  • Utilize standard tools
  • Ad hoc interfacing code

Reasoning about system:

  • Dependent on application environment

For driver framework:

  • Less suitable for micro-kernel with user-level drivers
slide-19
SLIDE 19

14

Architectures: Driver Framework

ATA USB HC Eth PCI HD CDR Hub Media Dev. Dev. file system IP stack App 1 . . . App n L4 micro-kernel hardware

slide-20
SLIDE 20

14-b

Architectures: Driver Framework

ATA USB HC Eth PCI HD CDR Hub Media Dev. Dev. file system IP stack App 1 . . . App n L4 micro-kernel hardware Scheduler

slide-21
SLIDE 21

14-c

Architectures: Driver Framework

ATA USB HC Eth PCI HD CDR Hub Media Dev. Dev. file system IP stack App 1 . . . App n L4 micro-kernel hardware Scheduler

slide-22
SLIDE 22

15

Two-level architecture

Dynamically scheduled level: flat calculus [Berry and Sentovich, 2001]

  • run comp1[connections]
✁ ✁

...

✁ ✁

run compN[connections]

  • permit (initially):

– signal S in ... end – loop ... end? – weak abort ... when S?

  • Memory protection for top-level modules
  • Trade-off cost of dynamic scheduling

against safety/flexibility

  • More constructs for recovery features?
  • Feasiblity uncertain!

Component level: strictly event-driven modules

  • Block waiting for events (as per usual)
  • Minimise computation/context-switching
slide-23
SLIDE 23

16

Presentation Outline Reliable I/O Framework Possible Architectures Strictly event-driven modules Event-driven scheduling Example: IP Stack and Ethernet driver Other related work Summary

slide-24
SLIDE 24

17

Triggering

driver framework application requests hardware interrupts

Whatever the structure:

monolithic

multi-threaded

. . .

event-driven

rather than

sample-driven

Multiform time [Berry, 2000] General form [Caspi, 2001]

slide-25
SLIDE 25

18

Strictly event-driven modules

Modules where observable behaviour and state changes occur strictly in response to events listed in the input/output interface and are otherwise independent of reaction triggering. statement strictly event-driven? await A; emit O pause; emit O await A; pause; emit O loop pause end (halt)

slide-26
SLIDE 26

18-b

Strictly event-driven modules

Modules where observable behaviour and state changes occur strictly in response to events listed in the input/output interface and are otherwise independent of reaction triggering. statement strictly event-driven? await A; emit O yes pause; emit O await A; pause; emit O loop pause end (halt)

slide-27
SLIDE 27

18-c

Strictly event-driven modules

Modules where observable behaviour and state changes occur strictly in response to events listed in the input/output interface and are otherwise independent of reaction triggering. statement strictly event-driven? await A; emit O yes pause; emit O no await A; pause; emit O loop pause end (halt)

slide-28
SLIDE 28

18-d

Strictly event-driven modules

Modules where observable behaviour and state changes occur strictly in response to events listed in the input/output interface and are otherwise independent of reaction triggering. statement strictly event-driven? await A; emit O yes pause; emit O no await A; pause; emit O no loop pause end (halt)

slide-29
SLIDE 29

18-e

Strictly event-driven modules

Modules where observable behaviour and state changes occur strictly in response to events listed in the input/output interface and are otherwise independent of reaction triggering. statement strictly event-driven? await A; emit O yes pause; emit O no await A; pause; emit O no loop pause end (halt) yes

slide-30
SLIDE 30

18-f

Strictly event-driven modules

Modules where observable behaviour and state changes occur strictly in response to events listed in the input/output interface and are otherwise independent of reaction triggering. statement strictly event-driven? await A; emit O yes pause; emit O no await A; pause; emit O no loop pause end (halt) yes

✄✆☎ ✝ ✞ ✞ ✟ ✠ ✄ ✡

module:

☛ ☞ ✌✎✍ ✏ ✌ ✑ ✒ ☞ ✌ ✓ ☞

and

✏ ✌ ✓ ✏ ☛ ✔✖✕ ✗ ☞ ✌ ✒ ✕ ✘ ✗ ☞ ✑✚✙ ✛ ☛ ✔✖✕ ✗ ✏ ✌ ✒ ✕ ✘ ✗ ✏ ✑ ✜✖✢ ☛ ✄ ✙ ✄ ✡ ✑

(I, O).A notation: [Berry and Sentovich, 2001]

not quite

slide-31
SLIDE 31

19

Strictly event-driven modules: relative absence

. . . respond only to events with at least one of the module inputs present. . . statement strictly event-driven? await A; present S else emit O end await [not A] await [A and not B]; emit O await [A or not B]; emit O

slide-32
SLIDE 32

19-b

Strictly event-driven modules: relative absence

. . . respond only to events with at least one of the module inputs present. . . statement strictly event-driven? await A; present S else emit O end yes await [not A] await [A and not B]; emit O await [A or not B]; emit O

slide-33
SLIDE 33

19-c

Strictly event-driven modules: relative absence

. . . respond only to events with at least one of the module inputs present. . . statement strictly event-driven? await A; present S else emit O end yes await [not A] no await [A and not B]; emit O await [A or not B]; emit O

slide-34
SLIDE 34

19-d

Strictly event-driven modules: relative absence

. . . respond only to events with at least one of the module inputs present. . . statement strictly event-driven? await A; present S else emit O end yes await [not A] no await [A and not B]; emit O yes await [A or not B]; emit O

slide-35
SLIDE 35

19-e

Strictly event-driven modules: relative absence

. . . respond only to events with at least one of the module inputs present. . . statement strictly event-driven? await A; present S else emit O end yes await [not A] no await [A and not B]; emit O yes await [A or not B]; emit O no

slide-36
SLIDE 36

19-f

Strictly event-driven modules: relative absence

. . . respond only to events with at least one of the module inputs present. . . statement strictly event-driven? await A; present S else emit O end yes await [not A] no await [A and not B]; emit O yes await [A or not B]; emit O no

module main : input A;

  • utput O;

await [ not A ] ; emit O end module

  • no problem if sample-driven,
  • but what should an event-driven system do?
slide-37
SLIDE 37

20

Strictly event-driven modules: await

await A

trap T in loop pause ; present A then exit T else nothing end present end loop end trap

await [not A]

trap T in loop pause ; present A then nothing else exit T end present end loop end trap

any inputs with A absent imply

✤ ✥✧✦ ✤ ★
slide-38
SLIDE 38

21

Strictly event-driven modules: other

strong abortion:

abort await A; emit O when B

weak abortion:

weak abort await A; emit O when B

suspension:

suspend await A; emit O when B

sustain:

loop emit S; pause end loop

slide-39
SLIDE 39

21-b

Strictly event-driven modules: other

strong abortion:

abort await A; emit O when B

restriction:

await [A and (not B)]

triggering weak abortion:

weak abort await A; emit O when B

suspension:

suspend await A; emit O when B

sustain:

loop emit S; pause end loop

slide-40
SLIDE 40

21-c

Strictly event-driven modules: other

strong abortion:

abort await A; emit O when B

restriction:

await [A and (not B)]

triggering weak abortion:

weak abort await A; emit O when B

triggering suspension:

suspend await A; emit O when B

sustain:

loop emit S; pause end loop

slide-41
SLIDE 41

21-d

Strictly event-driven modules: other

strong abortion:

abort await A; emit O when B

restriction:

await [A and (not B)]

triggering weak abortion:

weak abort await A; emit O when B

triggering suspension:

suspend await A; emit O when B

restriction:

await [A and (not B)] [Tardieu and de Simone, 2005]

sustain:

loop emit S; pause end loop

slide-42
SLIDE 42

21-e

Strictly event-driven modules: other

strong abortion:

abort await A; emit O when B

restriction:

await [A and (not B)]

triggering weak abortion:

weak abort await A; emit O when B

triggering suspension:

suspend await A; emit O when B

restriction:

await [A and (not B)] [Tardieu and de Simone, 2005]

sustain:

loop emit S; pause end loop

not strictly event-driven

but I want it to be! more permanent, subject to restriction

slide-43
SLIDE 43

22

Strictly event-driven modules: similarities

[Berry and Gonthier, 1992]: pause

✪✬✫ ✭ ✙

abort halt when tick now: await tick i

[Berry and Sentovich, 2001] [Halbwachs and Baghdadi, 2002]

[Berry, 1999]: halt

✪✬✫ ✭ ✙

loop pause end forbidden: await [not tick ]

  • Not a new semantics; rather a restriction
  • Why?

– conceptual issue of triggering – simplify reasoning about effects in system – try to exploit in implementation (scheduling)

slide-44
SLIDE 44

23

Event-driven scheduling

run C1

✁ ✁

run C2

✁ ✁

run C3

✁ ✁

run C4

✁ ✁

run C5 C1 C2 C3 C4 C5

slide-45
SLIDE 45

23-b

Event-driven scheduling

run C1

✁ ✁

run C2

✁ ✁

run C3

✁ ✁

run C4

✁ ✁

run C5 C1 C2 C3 C4 C5 A A A A P P

slide-46
SLIDE 46

24

Event-driven scheduling

run C1

✁ ✁

run C2

✁ ✁

run C3

✁ ✁

run C4

✁ ✁

run C5 C1 C2 C3 C4 C5 A A A A P P

slide-47
SLIDE 47

24-b

Event-driven scheduling

run C1

✁ ✁

run C2

✁ ✁

run C3

✁ ✁

run C4

✁ ✁

run C5 C1 C2 C3 C4 C5 A A A A P P Why?

  • Avoid unnecessary context switching
  • Anticipate that many drivers are inactive at a given instant
  • Make ‘stand-by’ drivers practicable
slide-48
SLIDE 48

25

Module implementation interfaces

inputs

  • utputs

internal state (state, inputs)

  • utputs

(state, inputs) state’ partial inputs (partial outputs, (pending outputs, (blocking conditions) evolving state Two stage operation:

  • 1. Paused: publish triggering events (sustained outputs)
  • 2. Participating: between [Edwards and Lee, 2003] and [Potop-Butucaru, 2002]
slide-49
SLIDE 49

26

Presentation Outline Reliable I/O Framework Possible Architectures Strictly event-driven modules Event-driven scheduling Example: IP Stack and Ethernet driver Other related work Summary

slide-50
SLIDE 50

27

Example: IP Stack and Ethernet driver

shutdown sockInput IP Stack disable rxDone Eth driver rxIRQ hwDisable

enabled disable in progress disable rxDone RX protocol

disable, rxDone

slide-51
SLIDE 51

27-b

Example: IP Stack and Ethernet driver

shutdown sockInput IP Stack disable rxDone Eth driver rxIRQ hwDisable

enabled disable in progress disable rxDone RX protocol

disable, rxDone

input rxIRQ , shutdown ;

  • utput hwDisable ,

sockInput ; signal disable , rxDone in run d r i v e r

✰ ✰

run ipstack end signal

slide-52
SLIDE 52

27-c

Example: IP Stack and Ethernet driver

shutdown sockInput IP Stack disable rxDone Eth driver rxIRQ hwDisable

enabled disable in progress disable rxDone RX protocol

disable, rxDone

input rxIRQ , shutdown ;

  • utput hwDisable ,

sockInput ; signal disable , rxDone in run d r i v e r

✰ ✰

run ipstack end signal

✱✳✲ ✴ ✵ ✶ ✷✹✸ ✺ ✻ ✼ ✽✿✾❀ ❁❂ ✻ ✴ ❃ ❄ ❅ ✤ ❆

simulates

❇ ❈❊❉ ❋
  • ✮■❍
❏ ❑✹▲ ▼ ◆P❖ ◗ ❘❚❙❯ ❱❲ ◆ ✯
slide-53
SLIDE 53

28

module d r i v e r : input disable , rxIRQ ;

  • utput rxDone ,

hwDisable ; abort every rxIRQ do emit rxDone end every when disable ; emit hwDisable ; halt end module module ipstack : input rxDone , shutdown ;

  • utput disable ,

sockInput ; procedure input ( ) ( ) ; abort every rxDone do call input ( ) ( ) ; emit sockInput end every when shutdown ; emit disable ; halt end module

slide-54
SLIDE 54

28-b

module d r i v e r : input disable , rxIRQ ;

  • utput rxDone ,

hwDisable ; abort every rxIRQ do emit rxDone end every when disable ; emit hwDisable ; halt end module module ipstack : input rxDone , shutdown ;

  • utput disable ,

sockInput ; procedure input ( ) ( ) ; abort every rxDone do call input ( ) ( ) ; emit sockInput end every when shutdown ; emit disable ; halt end module

external input: rxIRQ rxDone input() sockInput

slide-55
SLIDE 55

28-c

module d r i v e r : input disable , rxIRQ ;

  • utput rxDone ,

hwDisable ; abort every rxIRQ do emit rxDone end every when disable ; emit hwDisable ; halt end module module ipstack : input rxDone , shutdown ;

  • utput disable ,

sockInput ; procedure input ( ) ( ) ; abort every rxDone do call input ( ) ( ) ; emit sockInput end every when shutdown ; emit disable ; halt end module

external input: rxIRQ rxDone input() sockInput external input: shutdown disable hwDisable

slide-56
SLIDE 56

29

Presentation Outline Reliable I/O Framework Possible Architectures Strictly event-driven modules Event-driven scheduling Example: IP Stack and Ethernet driver Other related work Summary

slide-57
SLIDE 57

30

Reactive C, SL, SugarCubes?

[Boussinot, 1991] [Boussinot and de Simone, 1996] [Amadio, 2005] [Boussinot and Susini, 1997]

all (SL) programs are deterministic and coherent

  • Simple and modular compilation, no expensive analysis
  • Add and remove components at run-time without fear

Drawbacks:

  • Strong preemption is forbidden
  • Pausing in absence branches:

– Programs react to triggering events over several instants – Could complicate reasoning about behaviour and timing – Could complicate recovery logic

slide-58
SLIDE 58

31

Systems Programming [Montague and McDowell, 1997]

asked the question: Are synchronous/reactive techniques appropriate for high-performance generic system software? “operating system kernels; file, database, and network systems; device drivers; and server architectures for I/O, transaction processing and multimedia”

slide-59
SLIDE 59

31-b

Systems Programming [Montague and McDowell, 1997]

asked the question: Are synchronous/reactive techniques appropriate for high-performance generic system software? embedded device-driver “operating system kernels; file, database, and network systems; device drivers; and server architectures for I/O, transaction processing and multimedia”

slide-60
SLIDE 60

31-c

Systems Programming [Montague and McDowell, 1997]

asked the question: Are synchronous/reactive techniques appropriate for high-performance generic system software? embedded device-driver “operating system kernels; file, database, and network systems; device drivers; and server architectures for I/O, transaction processing and multimedia” Competitive concurrency

  • illusion of time sharing
  • increased overall throughput

Cooperative concurrency

  • provide structure
  • potential for parallelism
slide-61
SLIDE 61

32

Systems Programming [Montague and McDowell, 1997] Proposed: ‘soft-instruction’ architecture

Reject in favour of Esterel semantics:

  • Synchronous broadcast communication
  • Constructive causal ordering

Keep:

  • non-blocking request and completion events
  • context-structures?

Concerns over context-switching costs:

  • Take advantage of micro-kernel optimizations
  • Trade-off: safety (i.e. memory protection) against cost
slide-62
SLIDE 62

33

Presentation Outline Reliable I/O Framework Possible Architectures Strictly event-driven modules Event-driven scheduling Example: IP Stack and Ethernet driver Other related work Summary

slide-63
SLIDE 63

34

Summary

Application: Device driver framework in Esterel Single idea: Esterel modules that block waiting for the occurrence of events (like a normal OS) Two Concepts:

  • 1. Strictly event-driven modules

(for reasoning and efficiency)

  • 2. Two level structure

(trade dynamic cost against memory safety) Remaining problems:

  • scheduling algorithm
  • signal naming and mapping
  • mismatch with L4 primitives
  • more examples (requests with state)
  • . . .
slide-64
SLIDE 64

35

Some of SYNCHRON so far. . .

Dr Caspi Start simply (and the blackboard) Dr de Roever Reliability of components is (only) part of the problem Dr von Hanxleden Engineering of systems based on Esterel Dr Maraninchi Forget as much as possible (everything but events) Dr Tardieu Consider SHIM? (interactions with environment)

slide-65
SLIDE 65

35-b

Some of SYNCHRON so far. . .

Dr Caspi Start simply (and the blackboard) Dr de Roever Reliability of components is (only) part of the problem Dr von Hanxleden Engineering of systems based on Esterel Dr Maraninchi Forget as much as possible (everything but events) Dr Tardieu Consider SHIM? (interactions with environment) Dr Halbwachs Don’t use Esterel!

slide-66
SLIDE 66

36

slide-67
SLIDE 67

37

References

[Amadio, 2005] Amadio, R. M. (2005). The SL synchronous language, revisited. arXiv:cs:PL/0511092v1, 0(0):0–0. [Berry, 1989] Berry, G. (1989). Programming a digital watch in Esterel v3. Rapport de recherche 1032, Institut National de Recherche en Informatique en Automatique, Sophia Antipolis. [Berry, 1999] Berry, G. (1999). The Constructive Semantics of Pure Esterel.

ftp://ftp-sop.inria.fr/meije/esterel/papers/constructiveness3.ps,

draft book, current version 3.0 edition. [Berry, 2000] Berry, G. (2000). The Esterel v5 Language Primer. Ecole des Mines and INRIA, version 5.92 edition. [Berry and Gonthier, 1989] Berry, G. and Gonthier, G. (1989). Incremental development of an HDLC protocol in Esterel. Rapport de recherche 1031, Institut National de Recherche en Informatique en Automatique, Sophia Antipolis. [Berry and Gonthier, 1992] Berry, G. and Gonthier, G. (1992). The Esterel synchronous programming language: Design, semantics, implementation. Science of Computer Programming, 19(2):87–152. [Berry and Sentovich, 2001] Berry, G. and Sentovich, E. (2001). Multiclock Esterel. In Margaria, T. and Melham, T. F., editors, Proc. 11th Advanced Research Working Conference on Correct Hardware Design

slide-68
SLIDE 68

38

and Verification Methods, volume 2144 of Lecture Notes in Computer Science, pages 110–125, Livingston, Scotland. Springer-Verlag. [Boussinot, 1991] Boussinot, F. (1991). Reactive c: An extension of c to program reactive systems. Software Practice and Experience, 21(4):401–428. [Boussinot and de Simone, 1996] Boussinot, F. and de Simone, R. (1996). The SL synchronous language. IEEE Trans. Software Engineering, 22(4):256–266. [Boussinot and Susini, 1997] Boussinot, F. and Susini, J.-F. (1997). The SugarCubes tool box. Rapport de recherche 3247, Institut National de Recherche en Informatique en Automatique. [Caspi, 2001] Caspi, P . (2001). Embedded control: From asynchrony to synchrony and back. In Henzinger,

  • T. A. and Kirsch, C. M., editors, Proc. 1st International Conference on Embedded Software (EMSOFT’01),

volume 2211 of Lecture Notes in Computer Science, pages 80–99, Tahoe City, USA. Springer-Verlag. [Castelluccia et al., 1996] Castelluccia, C., Dabbous, W., and O’Malley, S. (1996). Generating efficient protocol code from an abstract specification. ACM SIGCOMM Computer Communication Review, 26(4):60–72. [Chou et al., 2001] Chou, A., Yang, J.-F., Chelf, B., Hallem, S., and Engler, D. (2001). An empirical study of

  • perating systems errors. In Proc. 18th Symposium on Operating Systems Principles, pages 73–88.

[Edwards and Lee, 2003] Edwards, S. A. and Lee, E. A. (2003). The semantics and execution of a

slide-69
SLIDE 69

39

synchronous block-diagram language. Science of Computer Programming, 48:21–42. [Halbwachs and Baghdadi, 2002] Halbwachs, N. and Baghdadi, S. (2002). Synchronous modeling of asynchronous systems. In Sangiovanni-Vincentelli, A. L. and Sifakis, J., editors, Proc. 2nd International Conference on Embedded Software (EMSOFT’02), volume 2491 of Lecture Notes in Computer Science, pages 240–251, Grenoble, France. Springer-Verlag. [Jagadeesan et al., 1995] Jagadeesan, L. J., Puchol, C., and Olnhausen, J. E. V. (1995). A formal approach to reactive systems software: A telecommunications application in Esterel. In Proc. Workshop on Industrial-Strength Formal Specification Techniques, pages 132–145, Florida, USA. IEEE. [Liedtke, 1995] Liedtke, J. (1995). On

  • kernel construction. In ACM Symposium on Operating System

Principles (SOSP), pages ?–?, Colorado, USA. [Montague and McDowell, 1997] Montague, B. R. and McDowell, C. E. (1997). Synchronous/reactive programming of concurrent system software. Software Practice and Experience, 27(3):207–243. [Potop-Butucaru, 2002] Potop-Butucaru, D. (2002). Optimizations for Faster Simulation of Esterel Programs. PhD thesis, ´ Ecole des Mines de Paris. [Tardieu and de Simone, 2005] Tardieu, O. and de Simone, R. (2005). Loops in Esterel. ACM Trans. Embedded Computing Systems, 4(4):708–750.