TinyOS

Système d'exploitation minimaliste pour noeuds de réseaux de capteurs

https://sing.stanford.edu/site/projects/3

TinyOS est un système d’exploitation open-source conçu pour des réseaux de capteurs sans fil. Il a été créé pour répondre aux caractéristiques et aux nécessités des réseaux de capteurs, que sont :
 * Une taille de mémoire réduite.
 * Une basse consommation d’énergie.
 * Des opérations d’assistance intensive.
 * Des opérations robustes.
 * L’optimisation en termes d’usage de mémoire et d’énergie.

Notions principales
TinyOS est plus qu’un automate. Il repose sur une architecture basée sur une association de composants, réduisant la taille du code nécessaire à sa mise en place. Cette plate-forme logicielle ouverte, ainsi qu'une série d'outils, développés à la base par l'Université de Berkeley sont enrichis par une multitude d'utilisateurs. Les composants sont constitués d’une frame, de tâches et d’interfaces.
 * Les frames contiennent l’état interne du composant. Il s’agit d’un espace mémoire de taille fixe réservée, permettant au composant de stocker les variables globales et les données qu’il utilise pour réaliser ses fonctionnalités. Il n’existe qu’une seule par composant et celle-ci est allouée statiquement à la compilation.
 * Les tâches elles contiennent l’implémentation des fonctions métiers. Elle se subdivisent en deux catégories : les commandes et les évènements.
 * Les interfaces représentent le descriptif de ces fonctions.

Il y a deux types de composants :
 * Les modules
 * Les configurations

TinyOS repose sur l’idéologie suivante : “Hurry up and sleep” (“Effectuer rapidement la tâche et se mettre en veille”). Ainsi il se met automatiquement en veille lorsqu’aucune tâche n’est active.

Il est aussi dit event-driven, c’est à dire que le fonctionnement du système s’appuie sur la gestion des évènements se produisant. Ces événements déclenchent à leur apparition l’activation de tâches, leur interruption ou encore la mise en veille du capteur. Par ailleurs, TinyOS ne gère pas le mécanisme de préemption entre les tâches mais donne la priorité aux interruptions matérielles. Il n’est pas prévu pour avoir un fonctionnement temps réel.

L’allocation mémoire TinyOS ne nécessite pas beaucoup de place mémoire.Il n’a besoin que de 300 à 400 octets dans le cadre d’une distribution minimale. Il est primordial d’avoir 4 Ko de mémoire libre. L’allocation de la mémoire se fait de façon statique. On distingue dans celle-ci :
 * La pile : Elle sert de mémoire temporaire pour l’empilement et le dépilement des variables locales.
 * Les variables globales : Elles réservent un espace mémoire pour stocker des valeurs pouvant être accessibles depuis différentes tâches.
 * La mémoire libre : Pour tout le reste du stockage temporaire. La notion d’allocation dynamique de mémoire n’est pas prise en charge dans le système, ni les pointeurs de fonctions

L’allocation de ressources
L’Ordonnanceur TinyOS est caractérisé par ces deux niveaux de priorité (bas pour les tâches, haut pour les événements) et sa file d’attente FIFO (disposant d’une capacité de 7).

Le langage : NesC
NesC est un langage de programmation dérivé du langage C, conçu pour minimiser l’utilisation de mémoire et de puissance de calcul par les capteurs, qui très souvent disposent de ressources très limitées (batterie de faible puissance et non changeable, mémoire réduite...). Il est ainsi essentiellement dédié pour la réalisation de systèmes embarqués distribués. Il cible en particulier l’implémentation d’applications pour les réseaux de capteurs. Il offre donc une réactivité importante vis-à-vis de l’environnement, une gestion de la concurrence même intensive et un support de communication. Il propose de nombreuses optimisations pour diminuer l’occupation de l’espace mémoire.

NesC permet la décomposition d’une application en « modules » réutilisables en fournissant d’abord trois abstractions de programmation : les interfaces, les modules et les configurations.

Les interfaces spécifient un ensemble de fonctions, appelées commandes :

Interface Timer { command result_t start(char type, uint32_t interval); command result_t stop; event result_t fired; }

Eléments de base de la programmation, les modules permettent d’implémenter les composants.

module NomModuleM { provides { //liste des interfaces fournies, ex : interface NomInterfaceFournie1 ; } uses { //liste des interfaces requises, ex : interface NomInterfaceRequise1 ; } } implementation { //déclarations des variables, ex : int state ; //implementations des fonctions decrites par les //interfaces fournies ; }

Les configurations sont constituées de modules et/ou d’interfaces ainsi que de la description des liaisons entre ces composants.

configuration NomModule { } implementation { //liste des modules et configurations utilises, ex : components Main,Module1,...,ModuleN,Config1,...,ConfigM ; //descriptifs des liaisons //Interface fournie <- Interface requise ou //Interface requise -> interface fournie, ex : Main.StdControl -> Module1.StdControl ; }

Le simulateur TOSSIM
TOSSIM est un simulateur à événements discrets pour les réseaux de capteurs TinyOS. Il permet aux utilisateurs de déboguer, tester et analyser des algorithmes dans un environnement contrôlé et reproductible. Sachant que TOSSIM fonctionne sur un PC, les utilisateurs peuvent examiner leur code de TinyOS en utilisant les débogueurs et autres outils de développement. L'objectif principal de TOSSIM est de fournir une simulation de haute fidélité de demandes TinyOS. Pour cette raison, il se concentre sur la simulation TinyOS et son exécution, au lieu de la simulation du monde réel. Alors que TOSSIM peut être utilisée pour comprendre les causes du comportement observé dans le monde réel, il ne saisit pas tous d'entre eux, et ne doit pas être utilisé pour les évaluations absolues.

TOSSIM dispose d'une GUI JTOSSIM. Il permet de définir les paramètres de simulation (comme les paramètres de la radio et la topologie du réseau) et offre une visualisation différente des résultats des simulations.



Domaines d’utilisation
La répartition des applications dépend du but pour lequel les capteurs en réseau sont utilisés. Nous pouvons distinguer quatre domaines majeurs :
 * Domaine militaire (espionnage)
 * Environnemental (contrôle de la température ambiante, de la lumière, de l'air conditionné, de la qualité de l'air)
 * Santé (traçage de l'utilisation des médicaments par les patients et les médecins dans les hôpitaux)
 * Industrie (contrôle du niveau de liquide dans des réservoirs à carburant multiple dans le raffinage de pétrole et des installations de stockage)

= Notes et références =

TinyOS

 * Guide d'installation détaillé de TinyOS


 * Site officiel de TinyOS


 * Dépôt officiel de TinyOS

JTOSSIM

 * Guide d'installation de JTOSSIM

Documentation

 * Système d'exploitation pour capteur en_réseau
 * Cours de Bernard TOURANCHEAU