Les systèmes d’exploitation pour capteur en réseau (notés également WSNAcronyme : Wireless Sensor Network, littéralement : Réseau de senseur sans fils.) sont des systèmes d'exploitation embarqués au sein de capteurs en réseau (le plus souvent des réseaux sans fil). Un capteur en réseau (qu'on retrouve dans les publications scientifiques sous le terme anglais mote) est un ensemble d’éléments électroniques de taille réduite, composé essentiellement d'un détecteur, d'un microcontrôleur, d’une batterie, d'un émetteur-récepteur et d'une antenne.
Un capteur assure trois fonctions : capter une donnée, la traiter et renvoyer une information relative à la donnée au gestionnaire du réseau. Les données sont des grandeurs physiques de l'environnement dans lequel se trouve le capteur. L'intérêt de la configuration en réseau est de capter un grand nombre de données afin d'alimenter une application. L'application réagit en fonction des données remontées par les capteurs et informe sur un changement d'état de l'environnement surveillé. Un capteur a une durée de vie limitée par sa batterie. Le réseau de capteurs doit être résilient pour compenser la fin de vie de chaque capteur.
Les systèmes d'exploitation pour capteurs en réseau sont spécifiquement conçus pour optimiser l'usage des ressources matérielles limitées dont ils disposent : peu de mémoire RAM, une vitesse de traitement processeur faible et peu d'énergie électrique. De nombreux systèmes d'exploitation spécialisés existent, parmi lesquels : Contiki, ERIKA Enterprise, Nano-RK, TinyOS, MantisOS, RETOS, Senses, Cormos, LiteOS, NanoQplus.
Contexte technologique Le capteur constitue la partie matérielle que doit gérer le système d’exploitation. Un capteur, ou nœud, est composé de plusieurs éléments ou modules correspondant chacun à une tâche particulière d’acquisition, de traitement, de stockage ou de transmission de données. Il comprend également une source d’énergie.
thumb|right|upright=1.9|Schéma d'architecture d'un capteur Les éléments constitutifs du capteur sont les suivants : un détecteur Le détecteur est l'élément qui capte la grandeur physique de l'environnement dans lequel a été placé le capteur. un convertisseur analogique numérique Le convertisseur analogique transforme le signal capté en signal numérique, compatible avec le micro-contrôleur. un micro-contrôleur Le micro-contrôleur traite les données reçues du convertisseur analogique-numérique et transmet les données utiles à l'émetteur-récepteur. de la mémoire Deux types de mémoire coexistent dans un capteur. La mémoire vive (RAM ou SRAM) permet le fonctionnement de l’application. La mémoire morte (principalement de la mémoire flash) stocke le système d’exploitation et les données traitées par le capteur. La taille typique de la mémoire RAM est de l’ordre de , alors que la taille de la mémoire flash atteint quelques Mo. un transmetteur radioLe transmetteur assure en fait deux fonctions, émetteur ET récepteur, d'où l'usage plus courant du terme émetteur-récepteur pour lever l’ambiguïté du terme anglais "transmit" signifiant "émettre"). L'émetteur-récepteur assure 2 fonctions : transmettre des signaux (émetteur) et recevoir des signaux (récepteur). L'émetteur envoie les données vers le monde extérieur. Le monde extérieur est le réseau de capteur, dont le rôle est de router l'information vers l'utilisateur final. Le récepteur reçoit les informations du réseau : d'une part les mises à jour logicielles, d'autre part les informations d'autre capteurs à relayer vers l'utilisateur final. une alimentation L'alimentation fournit l'énergie nécessaire au fonctionnement du capteur.
On trouve sur la page List of wireless sensor nodes une liste non exhaustive des matériels utilisés comme capteurs.
Rôle du système
Le système d'exploitation est un gestionnaire de ressources pour les systèmes complexes. Dans un système typique, ces ressources comprennent un ou plusieurs processeurs (ou CPUAcronyme : Central Processing Unit.), de la mémoire vive, de la mémoire morte, un ordonnanceur (ou en anglais timer) , des disques de stockage, des interfaces utilisateur tels que souris, clavier, imprimantes et écrans, et une ou plusieurs interfaces réseau. Le rôle du système d'exploitation est de gérer l'allocation de ressource processeur pour l'exécution des processus, en maximisant l'utilisation globale du processeur tout en optimisant l'interactivité de ces ressources aux utilisateurs d'une manière ordonnée et contrôlée.
Un réseau de capteur consiste en un grand nombre de nœuds de petite taille alimentés par une batterie. Ils sont limités par la capacité de la batterie, la puissance du processeur et la capacité de communication. Le rôle du système d’exploitation pour capteur en réseau est d’être l’interface entre des ressources matérielles limitées et des applications distribuées (en anglais Distributed applications). Il doit fournir une variété de services systèmes basiques comme gérer l’allocation de ressource sur les périphériques de matériels divers, interrompre la gestion et la planification de tâches, gérer le réseau support. Le but est de faciliter la programmation des applications, mais aussi d’optimiser les utilisations de ressources.
Les systèmes d'exploitation pour réseau de capteurs sans fil tels que TinyOS, Contiki, SOS, MantisOS, Nano-RKsont conçus pour répondre à ces contraintes. Les possibilités matérielles des capteurs sont limitées en mémoire, en puissance de calcul et en autonomie énergétique (batterie). Les systèmes d’exploitation doivent avoir une « faible empreinte mémoire » afin d'être embarqués dans la mémoire flash des capteursDunkels 2004, . Malgré ces limites matérielles, les capteurs doivent intégrer les fonctionnalités de base d'un système d’exploitationSilberschatz 1994, telles que : l’allocation de mémoire (RAM, EEPROM); le système de fichiers; le contrôle d'exécution de code; le chargement, le lancement et la gestion des applications; la transmission de données; la gestion de l’énergie. Ils doivent en plus gérer les spécificités propres aux systèmes d'exploitation pour capteur en réseau : la gestion efficace de l’énergie; la fiabilité du système d'exploitation; une faible empreinte mémoire; la reconfiguration du système d'exploitation; le support de protocole de routage optimisé (µIP, Rime, µIPv6); le support Temps-réel.
Le protocole µIPv6 permet de réduire la consommation d’énergie dans le processus de routage par rapport au protocole IPv4Dunkels 2010, pages 1-2.
Principes architecturaux
Généralités Nous présentons ici une classification des concepts importants de la conception d'un système d'exploitation pour capteur en réseau, dont nous détaillons ci-dessous les rubriques concernant l'architecture, le modèle d’exécution, la programmation, l'ordonnancement et la gestion énergétique.
Architecture L'organisation d'un système d'exploitation constitue sa structure. L'architecture d'un système d'exploitation a une influence sur la taille du noyau ainsi que sur la façon de fournir des services aux programmes d'application. Selon Muhammad Omer Farooq et Thomas Kunz, il existe quatre types d'architectures de système d'exploitation connus : l'architecture monolithique, l'architecture micro-noyau, l'architecture en couches et l'architecture en machine virtuelle.
thumb|Caractéristiques d'un système d'exploitation pour capteur|upright=2 Monolithique Une architecture monolithique ne dispose pas de structure telle que décrite dans les principes architecturaux. Les services fournis par le système d'exploitation sont mis en œuvre séparément et chaque service fournit une interface pour d'autres services. Ce type d'architecture permet le regroupement de tous les services requis pour former une seule image système. Il en résulte une empreinte mémoire réduite du système d'exploitation. Un avantage de l'architecture monolithique est que les coûts d'interaction du module sont faibles. Par contre le système est difficile à comprendre et à modifier, peu fiable et difficile à maintenir. Les inconvénients des noyaux monolithiques en font de mauvais candidats pour la conception des systèmes d'exploitation des capteurs contemporains.
Micro Noyau Dans une architecture micro-noyau, le noyau fournit le strict minimum pour assurer le fonctionnement du système. La taille du noyau s'en trouve considérablement réduite. La plupart des fonctionnalités du système d'exploitation est fournie via des serveurs au niveau utilisateur comme un serveur de fichiers, un serveur de mémoire, un serveur de temps, etc. Si un serveur tombe en panne, l'ensemble du système ne s'arrête pas de fonctionner. L'architecture micro-noyau présente une meilleure fiabilité, une facilité d'extension et de personnalisation. L'inconvénient majeur d'un micro-noyau est sa performance médiocre en raison des aller-retours fréquents entre le noyau et l'utilisateur. Cependant, grâce à la petite taille de son noyau, ce type d'architecture est privilégié par de nombreux systèmes d'exploitation embarqués.
Modulaire ou composant Dans une architecture modulaire (ou en couches) le système d'exploitation met en œuvre des services sous la forme de couches. Les avantages de cette architecture sont la portabilité, la simplicité structurelle et la fiabilité. Par-contre cette architecture n'est pas très flexible.
Machine virtuelle Le principe d'une machine virtuelle est d'intégrer le système d'exploitation à l'application de l'utilisateur. Une machine virtuelle possède toutes les caractéristiques matérielles requises. Le principal avantage est sa portabilité, mais l'inconvénient majeur est typiquement un mauvais rendement du système.
Modèle d’exécution Le modèle de programmation supporté par un système d'exploitation a un impact significatif sur le développement d'applications.
Événementiel (Event-based) Le modèle évènementiel donne la priorité aux évènements. Un évènement préempte les ressources jusqu’à ce qu’il soit terminé. La survenue d’un évènement par nature est asynchrone. Les tâches de gestion courante peuvent être interrompues par la survenue d’un évènement, mais pas l’inverse.
Multi ThreadThread : Thread, littéralement : fil (comme fil de coton). Dans le contexte informatique, thread n'est pas traduit, on utilise donc ce mot tel quel. (Thread-based) Un thread est un élément de calcul de base. Il a son propre état. Le modèle mulri-thread donne de la flexibilité dans l'écriture d'applications. Une application consiste en l’exécution d’un ensemble de threads. Les tâches dévolues au réseau ou à l’ordonnanceur sont également des threads. Lorsqu’un thread est exécuté les autres sont bloqués. Le noyau gère une table de threads avec des règles de priorité et un système de tour de rôle (Round-robin).
Hybrid Un système hybride bénéficie des avantages des 2 modèles précédents. Les threads sont synchronisés alors que les évènements surviennent de manière asynchrone.
Reprogrammation