03.08.2013 Views

Design and Implementation of TinyGALS: A Programming Model for ...

Design and Implementation of TinyGALS: A Programming Model for ...

Design and Implementation of TinyGALS: A Programming Model for ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Not all concurrency can be compiled away in all applications, especially when the rate<br />

<strong>of</strong> input events does not match the processing speed <strong>of</strong> the embedded computers or the real-<br />

time requirements <strong>of</strong> the applications. Then, multiple threads <strong>of</strong> execution are needed at run<br />

time. In these situations, it is not uncommon to use asynchronous models to coordinate se-<br />

quential reactions. These coordination models must address how to enable concurrent tasks<br />

to exchange messages <strong>and</strong>/or share global state. In the PBO (port-based object) model as<br />

implemented in the Chimera real-time operating system [35], data are stored in a global<br />

space. A concurrent task, called a PBO, is free to access the data space at any time. Data<br />

in the space are persistent, <strong>and</strong> PBOs are triggered only by time with no explicit message<br />

passing among them. In the POLIS co-design [7] approach, s<strong>of</strong>tware modules are gener-<br />

ated as asynchronous tasks that pass messages through buffers <strong>of</strong> size one. There is no<br />

global data space in which to share data; in<strong>for</strong>mation is only exchanged in the communi-<br />

cation messages. Event-driven models <strong>for</strong> servers [40], such as SEDA (staged event-driven<br />

architecture) divide processing into a network <strong>of</strong> event-driven stages connected by explicit<br />

queues [39].<br />

In this report, we describe a globally asynchronous, locally synchronous (GALS) ap-<br />

proach <strong>for</strong> programming event-driven embedded systems. This approach provides language<br />

constructs that allow designers to specify concurrency explicitly at the system level while<br />

maintaining the sequential execution <strong>of</strong> basic components. It also enables the generation<br />

<strong>of</strong> an application-specific operating system (or more precisely, an execution framework) to<br />

provide a thread-safe execution environment <strong>for</strong> the components.<br />

Terms such as “synchronous,” “asynchronous,” <strong>and</strong> “globally asynchronous, locally<br />

synchronous (GALS)” mean different things to different communities, thus causing confu-<br />

sion. The circuit <strong>and</strong> processor design communities use these terms <strong>for</strong> synchronous <strong>and</strong><br />

asynchronous circuits, where synchronous refers to circuits that are driven by a common<br />

clock [22]. In the system modeling community, synchronous <strong>of</strong>ten refers to computational<br />

steps <strong>and</strong> communication (propagation <strong>of</strong> computed signal values) that take no time (or,<br />

in practice, very little time compared to the intervals between successive arrivals <strong>of</strong> input<br />

signals. GALS then refers to a modeling paradigm that uses events <strong>and</strong> h<strong>and</strong>shaking to<br />

3

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!