Tiny OS is a free and
open source component-based operating system
and platform targeting wireless
sensor networks (WSNs). Tiny OS is an embedded
operating system written in the C programming language as a set of cooperating
tasks and processes. It is intended to be incorporated into smart dust. Tiny OS
started as a collaboration between the University of California, Berkeley in co-operation with Intel
Research, and has since grown to a be an international consortium, the Tiny OS
Alliance. Tiny OS applications are written in nesC, a dialect of the C
programming language optimized for the memory limitations of sensor networks.
Its supplemental tools come mainly in the form of Java and shell script
front-ends. Associated libraries and tools, such as the NesC compiler and AVR
binutils tool chains, are mostly written in C.
Tiny OS provides built in interfaces, components, and sensor-board specific
configurations, which allow programmers to build programs as a set of modules,
which perform program-specific tasks. Tiny OS components provide
interface to
the standard kinds of hardware inputs, outputs, and sensors.
Tiny OS is completely non-blocking: it has a single stack. Therefore, all I/O
operations that last longer than a few hundred microseconds are asynchronous
and have a callback. To enable the native compiler to better optimize across
call boundaries, Tiny OS uses nesC''s features to link these callbacks, called
events, statically. While being non-blocking enables Tiny OS to maintain high
concurrency with a single stack, it forces programmers to write complex logic
by stitching together many small event handlers. To support larger
computations, Tiny OS provides tasks, which are similar to a Deferred Procedure
Call and interrupt handler bottom halves. A Tiny OS
component can post a task,
which the OS will schedule to run later. Tasks are non-preemptive and run in
FIFO order. This simple concurrency model is typically sufficient for I/O
centric applications, but its difficulty with CPU-heavy applications has led to
several proposals for incorporating threads into the OS.
Tiny OS code is statically linked with
program code, and compiled into a
small binary, using a custom GNU tool chain. Associated utilities are provided
to complete a development platform for working with Tiny OS.
More abstracts about the Tiny OS