AccueilđŸ‡«đŸ‡·Chercher

TinyOS

TinyOS est un systĂšme d’exploitation open-source conçu pour des rĂ©seaux de capteurs sans fil.

TinyOS
Logo

Langues Multilingue
État du projet en dĂ©veloppement
DĂ©pĂŽt github.com/tinyos/tinyos-main
Entreprise /
DĂ©veloppeur
TinyOS Alliance
Licence Licence BSD
États des sources Logiciel libre
Écrit en NesC
PremiĂšre version
DerniĂšre version stable 2.1.2 (Đ°ĐČгуст 2012 Đł.)
Site web www.tinyos.net, https://github.com/tinyos/tinyos-main

Il respecte une architecture basĂ©e sur une association de composants, rĂ©duisant la taille du code nĂ©cessaire Ă  sa mise en place. Cela s’inscrit dans le respect des contraintes de mĂ©moires qu’observent les rĂ©seaux de capteurs.

Pour autant, la bibliothĂšque de composant de TinyOS est particuliĂšrement complĂšte puisqu’on y retrouve des protocoles rĂ©seaux, des pilotes de capteurs et des outils d’acquisition de donnĂ©es. L’ensemble de ces composants peut ĂȘtre utilisĂ© tel quel, il peut aussi ĂȘtre adaptĂ© Ă  une application prĂ©cise.

En s’appuyant sur un fonctionnement Ă©vĂ©nementiel, TinyOS propose Ă  l’utilisateur une gestion trĂšs prĂ©cise de la consommation du capteur et permet de mieux s’adapter Ă  la nature alĂ©atoire de la communication sans fil entre interfaces physiques.

Propriétés principales

TinyOS est un systĂšme principalement dĂ©veloppĂ© et soutenu par l’universitĂ© amĂ©ricaine de Berkeley, qui le propose en tĂ©lĂ©chargement sous la licence BSD et en assure le suivi. Ainsi, l’ensemble des sources sont disponibles pour de nombreuses cibles matĂ©rielles. Il a Ă©tĂ© programmĂ© en langage NesC.

Le fonctionnement d’un systĂšme basĂ© sur TinyOS s’appuie sur la gestion des Ă©vĂšnements se produisant. Ainsi, l’activation de tĂąches, leur interruption ou encore la mise en veille du capteur s’effectue Ă  l’apparition d’évĂšnements, ceux-ci ayant la plus forte prioritĂ©. Ce fonctionnement Ă©vĂšnementiel (event-driven) s’oppose au fonctionnement dit temporel (time-driven) oĂč les actions du systĂšme sont gĂ©rĂ©es par une horloge donnĂ©e. TinyOS a Ă©tĂ© conçu pour minimiser la consommation en Ă©nergie du capteur. Ainsi, lorsqu’aucune tĂąche n’est active, il se met automatiquement en veille.

Cependant, TinyOS ne gĂšre pas le mĂ©canisme de prĂ©emption entre les tĂąches mais donne la prioritĂ© aux interruptions matĂ©rielles. Ainsi, les tĂąches entre elles ne s’interrompent pas mais une interruption peut stopper l’exĂ©cution d’une tĂąche. Il n'est Ă©galement pas prĂ©vu pour avoir un fonctionnement en temps rĂ©el.

Allocation de la mémoire

TinyOS a une empreinte mĂ©moire trĂšs faible puisqu’il ne prend que 300 Ă  400 octets dans le cadre d’une distribution minimale. En plus de cela, il est nĂ©cessaire d’avoir 4 Ko de mĂ©moire libre qui se rĂ©partissent entre 3 composants :

  • La pile : sert de mĂ©moire temporaire au fonctionnement du systĂšme notamment pour l’empilement et le dĂ©pilement des variables locales.
  • Les variables globales : rĂ©servent un espace mĂ©moire pour le stockage de valeurs pouvant ĂȘtre accessible depuis des applications diffĂ©rentes.
  • La mĂ©moire libre : pour le reste du stockage temporaire.

La gestion de la mĂ©moire possĂšde de plus quelques propriĂ©tĂ©s. Ainsi, il n’y a pas d’allocation dynamique de mĂ©moire et pas de pointeur de fonctions. Bien sĂ»r cela simplifie grandement l’implĂ©mentation. Par ailleurs, il n’existe pas de mĂ©canisme de protection de la mĂ©moire sous TinyOS ce qui rend le systĂšme particuliĂšrement vulnĂ©rable aux crashs et corruptions de la mĂ©moire.

Structure logicielle

Le systĂšme d’exploitation TinyOS s’appuie sur le langage NesC. Celui-ci propose une architecture basĂ©e sur des composants, permettant de rĂ©duire considĂ©rablement la taille mĂ©moire du systĂšme et de ses applications. Chaque composant correspond Ă  un Ă©lĂ©ment matĂ©riel (LEDs, timer, ADC
) et peut ĂȘtre rĂ©utilisĂ© dans diffĂ©rentes applications. Ces applications sont des ensembles de composants associĂ©s dans un but prĂ©cis. Les composants peuvent ĂȘtre des concepts abstraits ou bien des interfaces logicielles aux entrĂ©es-sorties matĂ©rielles de la cible Ă©tudiĂ©e (carte ou dispositif Ă©lectronique).

L’implĂ©mentation de composants s’effectue en dĂ©clarant des tĂąches, des commandes ou des Ă©vĂšnements.

  • Une tĂąche est un travail de « longue durĂ©e ».
  • Une commande est l'exĂ©cution d’une fonctionnalitĂ© prĂ©cise dans un autre composant.
  • Un Ă©vĂ©nement est l'Ă©quivalent logiciel Ă  une interruption matĂ©rielle.

Les tĂąches sont utilisĂ©es pour effectuer la plupart des blocs d’instruction d’une application. À l’appel d’une tĂąche, celle-ci va prendre place dans une file d’attente de type FIFO (First In First Out) pour y ĂȘtre exĂ©cutĂ©e. Comme nous l’avons vu, il n’y a pas de mĂ©canisme de prĂ©emption entre les tĂąches, et une tĂąche activĂ©e s’exĂ©cute en entier. Ce mode de fonctionnement permet de bannir les opĂ©rations pouvant bloquer le systĂšme (inter-blocage, famine, 
). Par ailleurs, lorsque la file d’attente des tĂąches est vide, le systĂšme d’exploitation met en veille le dispositif jusqu’au lancement de la prochaine interruption (on retrouve le fonctionnement event-driven).

Les Ă©vĂšnements sont prioritaires par rapport aux tĂąches et peuvent interrompre la tĂąche en cours d’exĂ©cution. Ils permettent de faire le lien entre les interruptions matĂ©rielles (pression d’un bouton, changement d’état d’une entrĂ©e, 
) et les couches logicielles que constituent les tĂąches.

Dans la pratique, NesC permet de déclarer 2 types de composants : les modules et les configurations. Voici un second tableau récapitulatif :

Composant Utilisation
Module Contient le code d’un composant Ă©lĂ©mentaire.
Configuration Permet de faire les liens entre différents modules.
Interface DĂ©finit les entrĂ©es-sorties et le comportement d’un composant.

Les modules constituent les briques élémentaires de code et implémentent une ou plusieurs interfaces.

Une application peut faire appel à des fichiers de configuration pour regrouper les fonctionnalités des modules. Un fichier top-level configuration permet de faire le lien entre tous les composants.

Les interfaces sont des fichiers dĂ©crivant les commandes et Ă©vĂšnements proposĂ©s par le composant qui les implĂ©mente. L’utilisation des mots clefs « Use » et « Provide » au dĂ©but d’un composant permet de savoir respectivement si celui-ci fait appel Ă  une fonction de l’interface ou redĂ©finit son code.

L’ordonnanceur TinyOS

Nous allons dĂ©tailler le fonctionnement prĂ©cis de l’ordonnanceur TinyOS qui est au cƓur de la gestion des tĂąches et des Ă©vĂšnements du systĂšme. Le choix d’un ordonnanceur dĂ©terminera le fonctionnement global du systĂšme et le dotera de propriĂ©tĂ©s prĂ©cises telles que la capacitĂ© Ă  fonctionner en temps rĂ©el.

L’ordonnanceur TinyOS c’est :

  • 2 niveaux de prioritĂ© (bas pour les tĂąches, haut pour les Ă©vĂšnements)
  • 1 file d’attente FIFO (disposant d’une capacitĂ© de 7)

Par ailleurs, entre les tĂąches, un niveau de prioritĂ© est dĂ©fini permettant de classer les tĂąches, tout en respectant la prioritĂ© des interruptions (ou Ă©vĂšnements). Lors de l’arrivĂ©e d’une nouvelle tĂąche, celle-ci sera placĂ©e dans la file d’attente en fonction de sa prioritĂ© (plus elle est grande, plus le placement est proche de la sortie). Dans le cas oĂč la file d’attente est pleine, la tĂąche dont la prioritĂ© est la plus faible est enlevĂ©e de la FIFO.

Package TinyOS

TinyOS est prĂ©vu pour fonctionner sur une multitude de plateformes, disponibles dĂšs l’installation. En effet, TinyOS peut ĂȘtre installĂ© Ă  partir d’un environnement Windows (2000 et XP) ou bien GNU/Linux (Red Hat essentiellement, mais d’autres distributions sont Ă©galement possibles).

Deux principales versions de TinyOS sont disponibles : la version stable (v. 1.1.0) et la version actuellement en cours de tests (v. 1.1.15); la premiĂšre prĂ©sente moins de risques mais est nettement moins rĂ©cente. En outre, afin d’installer la derniĂšre version de test, il est nĂ©cessaire de procĂ©der d’abord Ă  l’installation de la version 1.1.0.

ProcĂ©dure d’installation :

  • Windows : un guide propose l’installation de tous les principaux outils nĂ©cessaires au bon fonctionnement du systĂšme, notamment Cygwin (couche d'Ă©mulation de l'API Linux) qui permet d’avoir une interface Unix sous Windows. Le JDK Java 1.4 de Sun est nĂ©cessaire afin d’effectuer la procĂ©dure d’installation.
  • GNU/Linux : des packages RPM sont proposĂ©s au tĂ©lĂ©chargement, un guide explique la marche Ă  suivre. Les distributions Linux ayant un autre gestionnaire de paquet peuvent utiliser un programme (comme « Alien ») pour installer les packages, ou compiler directement Ă  partir des sources. Le JDK de IBM est nĂ©cessaire.

Par la suite, des packages supplĂ©mentaires peuvent ĂȘtre ajoutĂ©s en passant par le site SourceForge, qui met Ă  disposition le code open source de TinyOS et d'un ensemble de programmes spĂ©cialisĂ©s.

Cibles possibles pour TinyOS

Il existe de nombreuses cibles possibles pour ce systĂšme d’exploitation embarquĂ©. MalgrĂ© leurs diffĂ©rences, elles respectent toutes globalement la mĂȘme architecture basĂ©e sur un noyau central autour duquel s’articule les diffĂ©rentes interfaces d’entrĂ©e-sortie, de communication et d’alimentation. Voici un schĂ©ma reprĂ©sentant cette architecture :

Mote, processeur, RAM et Flash : On appelle gĂ©nĂ©ralement Mote la carte physique utilisant TinyOS pour fonctionner. Celle-ci a pour cƓur le bloc constituĂ© du processeur et des mĂ©moires RAM et Flash. Cet ensemble est Ă  la base du calcul binaire et du stockage, Ă  la fois temporaire pour les donnĂ©es et dĂ©finitif pour le systĂšme TinyOS.

Radio et antenne : TinyOS est prĂ©vu pour mettre en place des rĂ©seaux sans fils, les Ă©quipements Ă©tudiĂ©s sont donc gĂ©nĂ©ralement Ă©quipĂ©s d’une radio ainsi que d’une antenne afin de se connecter Ă  la couche physique que constitue les Ă©missions hertziennes.

LED, interface, capteur : TinyOS est prévu pour mettre en place des réseaux de capteurs, on retrouve donc des équipements bardés de différents types de détecteurs et autres entrées.

Batterie : Comme tout dispositif embarquĂ©, ceux utilisant TinyOS sont pourvus d’une alimentation autonome telle qu’une batterie.

Voici une liste rapide des équipements supportés initialement par TinyOS dans sa version « tinyos-1.1.11-3is ».

ATMega8 AVRMote Mica Mica2
Micadot Mica128 Micaz MSP430
Rene2 Telos Telos2 PC

Au-delĂ  de cette liste, il est possible d’implĂ©menter tout type de plateforme embarquĂ©e physique en redĂ©veloppant les bibliothĂšques nĂ©cessaires Ă  la prise en compte des entrĂ©es sorties nĂ©cessaires. Ainsi, le lien suivant propose le rĂ©sultat d’une thĂšse mettant en Ɠuvre TinyOS sur un dispositif Freescale MC13192-EVB sur un rĂ©seau ZigBee :

Sources et liens

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.