Reliable and Efficient Programming Abstractions for Wireless Sensor Networks
Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2007), San Diego, CA, June 10-13, 2007.
Nupur Kothari, Ramakrishna Gummadi, Todd Millstein, Ramesh Govindan
It is currently difficult to build practical and reliable
programming systems out of distributed and resource-constrained sensor devices.
The state of the art in today's sensornet programming is centered around a
component-based language called nesC. nesC is a node-level
language--a program is written for an individual node in the
network--and nesC programs use the services of an operating system
called TinyOS. We are
pursuing an approach to programming sensor networks that significantly
raises the level of abstraction over this practice. The critical
change is one of perspective: rather than writing programs from the
point of view of an individual node, programmers
implement a central program that conceptually has access to the
entire network. This approach pushes to the compiler the task of
producing node-level programs that implement the desired behavior.
We present the Pleiades programming language, its compiler, and its
runtime. The Pleiades language extends the C language with constructs
that allow programmers to name and access node-local state within the
network and to specify simple forms of concurrent execution. The
compiler and runtime system cooperate to implement Pleiades programs
efficiently and reliably. First, the compiler employs a novel program
analysis to translate
Pleiades programs into message-efficient units of work implemented in nesC.
The Pleiades runtime system orchestrates execution of these units, using
TinyOS services, across a network of sensor nodes. Second, the compiler
and runtime system employ novel locking, deadlock detection, and
deadlock recovery algorithms that guarantee serializability in the
face of concurrent execution.
We illustrate the readability, reliability and efficiency benefits of
the Pleiades language through detailed experiments,
and demonstrate that the Pleiades implementation
of a realistic application performs similar to a hand-coded nesC
version that contains more than ten times as much code.