ii - repositorium.sdum.uminho.pt · gerir remotamente e de forma seletiva os nós sensores ... com...
TRANSCRIPT
iii
Agradecimentos
Eu gostaria de agradecer aos meus orientadores, o Professor Paulo Carvalho e
Professor Óscar Gama, pela ajuda, disponibilidade e orientação ao longo deste
trabalho, essencial para a realização desta dissertação.
Gostaria também de agradecer ao Departamento de Engenharia Informática da
Universidade de Coimbra, nomeadamente ao Professor Jorge Sá Silva e ao
Departamento de Eletrónica Industrial da Universidade do Minho, em especial ao
Professor José Augusto Afonso, pela disponibilidade e material cedido para a
realização deste trabalho.
iv
Resumo
As Redes de Sensores Sem Fios (RSSFs) têm uma vasta área de aplicabilidade,
sendo constituídas por um grande número de nós que podem diferenciar bastante
na sua constituição e capacidade. Estas redes podem operar por longos períodos de
tempo, muitas vezes em locais de difícil acesso. Neste sentido, a capacidade de
gerir remotamente e de forma seletiva os nós sensores torna-se crucial neste tipo de
redes. Contudo, dos sistemas operativos mais utilizados nas RSSFs apenas o TinyOS
oferece nativamente um protocolo de reprogramação (Deluge). A natureza
epidémica do Deluge, sem suportar uma reprogramação seletiva, compromete o
potencial de aplicação das RSSFs. Esta dissertação propõe um novo protocolo como
uma extensão ao Deluge, permitindo reprogramar seletivamente os nós de uma rede
com base no seu tipo de plataforma ou na sua identificação única. São levados em
consideração aspetos como a fiabilidade e eficiência no desenho e na construção
do protocolo, ao mesmo tempo que são preservadas todas as funcionalidades
originais do Deluge. O protocolo proposto permite uma maior versatilidade e
flexibilidade na implementação de RSSFs, pois permite a reprogramação de redes
que possuam diferentes plataformas e aplicações.
v
Abstract
Wireless sensor networks (WSNs) have a vast range of applicability, being
composed by a large number of nodes that may differ greatly in constitution and
capability. These networks can operate for long periods of time, often in places of
difficult access. In this way, the ability to reprogram remotely and selectively sensor
nodes becomes crucial in the maintenance and management of this type of
networks. However, from the operating systems mostly used in WSNs only TinyOS
supports natively a reprogramming protocol (Deluge). The epidemic nature of
Deluge, without supporting selective programming, compromises the potentially vast
application of WSNs. This paper proposes a new protocol as an extension to Deluge,
allowing selective reprogramming of sensor nodes based on platform type or node
identifier. Aspects such as reliability and efficiency are taken into account in the
protocol design and implementation, while preserving all the basic features of
Deluge. The solution was tested in a real environment with multiple scenarios to
ensure its functionality. The proposed protocol provides the required flexibility for
deploying versatile WSNs, allowing reprogramming networks comprising different
types of nodes and applications.
vi
Índice de conteúdos
Agradecimentos .............................................................................................. iii
Resumo .......................................................................................................... iv
Abstract ........................................................................................................... v
Índice de conteúdos ........................................................................................ vi
Lista de Figuras .............................................................................................. ix
Lista de acrónimos.......................................................................................... xi
1. Introdução...............................................................................................1
1.1 Introdução ................................................................................................ 1
1.2 Motivação e objetivos .............................................................................. 2
1.3 Contribuições ........................................................................................... 3
1.4 Estrutura da dissertação.......................................................................... 4
2. Redes de Sensores Sem Fios ..................................................................5
2.1 Caraterísticas das Redes de Sensores Sem Fios ................................... 5
2.2 Comunicação ........................................................................................... 7
2.2.1 Normas ............................................................................................. 7
2.2.1.1 ZigBee ......................................................................................... 8
2.2.1.2 WirelessHart ............................................................................... 9
2.2.1.3 6LoWPAN ................................................................................. 11
2.2.2 Topologias ...................................................................................... 11
2.3 Sistemas Operativos nas Redes de Sensores Sem Fios ...................... 13
2.3.1 Contiki ............................................................................................. 13
vii
2.3.2 LiteOS ............................................................................................. 15
2.3.3 Mantis ............................................................................................. 17
2.3.4 Nano-RK ......................................................................................... 18
2.3.5 TinyOS ............................................................................................ 20
2.4 Aplicabilidade ........................................................................................ 23
2.4.1 Monotorização de Ambientes ........................................................ 23
2.4.2 E-Health .......................................................................................... 24
2.4.3 Outras áreas de aplicação ............................................................. 25
2.5 Sumário .................................................................................................. 26
3. Reprogramação remota de Redes de Sensores Sem Fios ....................... 27
3.1 Desafios da reprogramação remota nas RSSFs................................... 27
3.2 Tipos de reprogramação ....................................................................... 28
3.2.1 Reprogramação Modular ............................................................... 30
3.2.2 Máquinas virtuais ........................................................................... 31
3.2.3 Reprogramação ao nível do sistema ............................................. 33
3.2.3.1 Estratégias baseadas na distribuição de toda a imagem do
código ……………………………………………………………………………………………..33
3.2.3.2 Estratégias baseadas na distribuição de diferenças entre
imagens de código .......................................................................................... 36
3.3 Sumário .................................................................................................. 37
4. Desenho e Implementação do Protocolo ............................................... 38
4.1 Reprogramação com o Deluge ............................................................. 38
4.1.1 Deluge 2.0 ...................................................................................... 38
4.1.2 Disseminação e o DRIP ................................................................. 40
viii
4.1.3 TosBoot ........................................................................................... 43
4.1.4 Tos-Deluge...................................................................................... 45
4.1.5 Análise e discussão ........................................................................ 46
4.2 Discussão e Implantação de uma extensão ao Deluge ...................... 47
4.2.1 Planeamento da solução ............................................................... 47
4.2.2 Detalhes da implementação .......................................................... 50
4.2.2.1 Reprogramação Seletiva através da Plataforma ..................... 51
4.2.2.2 Reprogramação Seletiva através do NodeID .......................... 52
4.2.3 Otimização do protocolo ................................................................ 54
4.2.4 Modo de atualização ...................................................................... 58
4.3 Sumário .................................................................................................. 60
5. Resultados e discussão ......................................................................... 61
5.1 Cenário de testes ................................................................................... 61
5.2 Testes e análise de resultados .............................................................. 63
5.2.1 Reprogramação através do tipo de plataforma ............................ 64
5.2.2 Reprogramação através do NodeID .............................................. 66
5.2.3 Modo de atualização ...................................................................... 69
5.3 Análise e discussão ............................................................................... 71
5.4 Sumário .................................................................................................. 72
6. Conclusões e Trabalho Futuro ............................................................... 74
6.1 Conclusões ............................................................................................. 74
6.2 Trabalho futuro ...................................................................................... 75
Referências Bibliográficas .............................................................................. 77
ix
Lista de Figuras
FIGURA 2.1:ARQUITETURA DE UM NÓ SENSOR. .................................................................. 6
FIGURA 2.2: MERCADO DOS NÓS SENSORES AO LONGO DO TEMPO [6]. ............................... 7
FIGURA 2.3: ARQUITETURA DO ZIGBEE E PILHA PROTOCOLAR [7]. ...................................... 9
FIGURA 2.4 ARQUITETURA E COMPONENTES DO WIRELESSHART [6]. ............................... 10
FIGURA 2.5: TOPOLOGIAS MAIS COMUNS NAS RSSFS. (A) TOPOLOGIA EM ESTRELA; (B)
TOPOLOGIA EM MALHA; E (C) TOPOLOGIA EM CLUSTER. ............................................. 13
FIGURA 2.6: ARQUITETURA DO CONTIKI [9]. ................................................................... 15
FIGURA 2.7: ARQUITETURA DO LITEOS [10]. .................................................................. 16
FIGURA 2.8: ARQUITETURA EM CAMADAS DO MANTIS. ................................................... 18
FIGURA 2.9: ARQUITETURA DO SISTEMA OPERATIVO NANO-RK [12]. ............................... 20
FIGURA 2.10: ARQUITETURA DO SISTEMA OPERATIVO TINYOS [9]. ................................... 23
FIGURA 4.1:SEGMENTAÇÃO DA IMAGEM DE CÓDIGO NO PROCESSO DE DISSEMINAÇÃO DA
MESMA. .................................................................................................................. 39
FIGURA 4.2: ESTRUTURA DO PACOTE ENVIADO POR DEFEITO PELO DELUGE [5]. ................ 43
FIGURA 4.3: FLUXOGRAMA DE FUNCIONAMENTO DO TOSBOOT. ........................................ 45
FIGURA 4.4: COMPONENTES UTILIZADOS PELO DELUGE NA REPROGRAMAÇÃO REMOTA. ..... 47
FIGURA 4.5: PACOTES CRIADOS PARA A REPROGRAMAÇÃO SELETIVA [5]. ........................... 50
FIGURA 4.6: COMPONENTES DE CÓDIGO ALTERADOS (INDICADO A VERMELHO) E CRIADOS
(INDICADO A VERDE). ............................................................................................... 51
FIGURA 4.7: PROCESSO DE EMPACOTAMENTO NA ESTAÇÃO BASE [5]................................. 54
FIGURA 4.8: PROCESSO DE REPROGRAMAÇÃO SELETIVA [5]. ............................................ 56
FIGURA 4.9: PROCESSO DE REPROGRAMAÇÃO SELETIVA NO NÓ [5]. .................................. 57
FIGURA 4.10: FIM DO PROCESSO DE DISSEMINAÇÃO NA REPROGRAMAÇÃO SELETIVA E O
MODO ATUALIZAÇÃO [5]. ......................................................................................... 60
FIGURA 5.1:CENÁRIO EXPERIMENTAL. ............................................................................. 62
FIGURA 5.2: FLUXOGRAMA DA APLICAÇÃO ALTERADA PARA A CRIAÇÃO DOS FICHEIROS DE LOG
DE DADOS. .............................................................................................................. 63
x
FIGURA 5.3:DISTRIBUIÇÃO TEMPORAL DOS PACOTES NA REPROGRAMAÇÃO COM O DELUGE
ORIGINAL. ............................................................................................................... 65
FIGURA 5.4: DISTRIBUIÇÃO TEMPORAL DOS PACOTES NA REPROGRAMAÇÃO SELETIVA POR
PLATAFORMA. ......................................................................................................... 65
FIGURA 5.5: REPROGRAMAÇÃO SELETIVA DOS NÓS 5, 55 E 7 COM PACOTES DE. .............. 68
FIGURA 5.6: REPROGRAMAÇÃO SELETIVA DOS NÓS 5, 55 E 7 COM PACOTES DF. .............. 68
FIGURA 5.7: REPROGRAMAÇÃO SELETIVA DOS NÓS 10, 55 E 7 COM O NÓ 7 INACESSÍVEL. . 69
FIGURA 5.8: REPROGRAMAÇÃO SELETIVA DOS NÓS 5, 55 E 7 E O MODO DE ATUALIZAÇÃO. . 70
xi
Lista de acrónimos
6LoWPAN IPv6 over Low-power Wireless Personal Area Network
API Application Programming Interface
CRC Cyclic Redundancy Check
ELF Executable and Linkable Format
FIFO First In First Out
HART Highway Addressable Remote Transducer
I.C.T Information and Communications Technology
IETF Internet Engineering Task Force
iHEX Intel HEX
ISM Industrial Medicine Scientific
MAC Media Access Control
MANTIS MultimodAl System for NeTworks of In-situ wireless Sensors
MOAP Multihop Over-the-Air Programming
PHY Physical Layer
RSSFs Redes de Sensores Sem Fios
SNMS Sensor Network Management System
SO Sistema Operativo
TDMA Time Division Multiple Access
WFDs WirelessHart Field Devices
1
1. Introdução
1.1 Introdução
Com a rápida evolução dos dispositivos eletrónicos, nomeadamente na área dos
sensores, e com estes cada vez mais pequenos, as Redes de Sensores Sem Fios
(RSSFs) têm assegurado um lugar de destaque no que toca à monitorização e
controlo de dados nas mais diversas áreas de atividade. O conceito subjacente a
este tipo de redes é ter um conjunto de nós constituídos por sensores, um
microprocessador e um módulo de comunicação sem fios. Estes nós, apesar de
terem uma capacidade individual de computação e comunicação limitada, quando
trabalham em conjunto permitem alcançar e monitorizar diversos ambientes com
um custo de implementação e manutenção reduzidos.
Estas redes muitas vezes acabam por ser colocadas em cenários e situações em
que é humanamente difícil alcançar os nós, pelo que a existência de uma gestão e
reprogramação remota é crucial. A necessidade de reprogramar uma RSSF pode
dever-se a diversos fatores, como: mudanças no meio ambiente, atualizações de
software, melhorias de segurança e alterações nos objetivos aplicacionais. A
reprogramação remota de RSSFs tira partido da comunicação sem fios dos nós
utilizando estratégias de disseminação para alcançar todos os nós da rede.
Devido à grande heterogeneidade de aplicações e de plataformas que podem
existir numa RSSF, é esperado que a reprogramação da rede possa ser feita de
forma seletiva. Desta forma, é possível selecionar quais os nós a serem
reprogramados e que tipo de aplicação vai ser afetada, tornando o processo de
reprogramação mais flexível e eficiente. No entanto, o desenho e a implementação
deste tipo de estratégias de reprogramação e disseminação de código é uma tarefa
bastante complexa devido aos poucos recursos que os nós apresentam (e.g.
comunicação, energia, processamento e armazenamento).
2
Os sistemas operativos mais utilizados nas RSSFs, como o TinyOS [1] e o
Contiki [2] suportam poucos ou nenhuns protocolos de reprogramação por defeito,
e muitos desses protocolos apresentam um claro défice de desempenho e
funcionalidade. O caso mais evidente é o do TinyOS [1], visto que é na atualidade
o sistema operativo mais utilizado nas RSSFs [3] e apenas suporta um protocolo de
reprogramação por defeito, o Deluge [4]. Este protocolo, por ser o único protocolo
de reprogramação que o TinyOS oferece, acaba por ser a primeira e muitas vezes a
única forma que os utilizadores têm de reprogramar uma RSSF. O Deluge permite
reprogramar uma rede de sensores de forma simples, contudo, não permite uma
reprogramação seletiva da mesma. Com este protocolo a reprogramação é total, ou
seja, todos os nós da rede são reprogramados com a mesma aplicação, acabando
por limitar a versatilidade e potencial de uma RSSF.
Neste contexto, este trabalho propõe e implementa um novo protocolo como
uma extensão ao Deluge que permite uma reprogramação seletiva dos nós da rede
através do tipo de plataforma ou do identificador de cada nó (NodeID). A solução
proposta aumenta claramente a funcionalidade do Deluge contribuindo para a
reprogramação seletiva de RSSFs que possuam heterogeneidade de plataformas e
aplicações.
1.2 Motivação e objetivos
A reprogramação remota das RSSFs possibilita a gestão e implementação destas
redes em locais onde de outra forma estas tarefas seriam impossíveis. A
reprogramação da rede pode ser feita reprogramando todos os nós, ou apenas parte
deles, através de uma reprogramação seletiva. A capacidade de escolher
separadamente que nós se vão reprogramar e com que aplicação este processo será
feito torna possível gerir e reprogramar RSSFs com múltiplas plataformas e
aplicações, elevando assim o seu potencial de aplicação.
Apesar do TinyOS ser o sistema operativo mais utilizado nas RSSFs [3], apenas
permite uma reprogramação total da rede através do único protocolo de
3
reprogramação remota que possui, o Deluge. Esta falta de versatilidade no processo
de reprogramação implica que todos os nós da rede partilhem o mesmo tipo de
plataforma e aplicação. Isto compromete severamente o potencial de aplicação das
RSSFs limitando a composição da rede a nós e aplicações homogéneas.
Este trabalho tem como principal objetivo criar uma extensão ao Deluge de
forma a aumentar a sua versatilidade na reprogramação. Neste sentido, a extensão
criada deve permitir reprogramar seletivamente os nós de uma RSSF. No entanto,
como objetivo adicional, a solução encontrada deve garantir que o comportamento
original do Deluge não seja afetado ao mesmo tempo que deve assegurar fiabilidade
e eficiência no processo de reprogramação.
1.3 Contribuições
A principal contribuição deste trabalho consiste no desenho, implementação e
teste de uma extensão ao Deluge e DRIP que permite a reprogramação seletiva de
RSSFs. Esta extensão consiste na alteração do modo de funcionamento do DRIP,
dando origem a um novo protocolo que permite reprogramar os nós da rede através
do seu identificador ou do tipo de plataforma. Uma vez que o protocolo criado tem
a capacidade de controlar a informação que circula na rede durante o processo de
reprogramação, é possível manter em circulação apenas a informação necessária
para que a reprogramação seja possível. Isto é feito através de uma série de
procedimentos nomeadamente: (i) a atualização constante da lista de nós que se
pretende reprogramar; e (ii) a prioridade na comunicação ganha pelos nós com uma
lista mais atualizada. Isto permite diminuir a quantidade de energia gasta na
transmissão durante o processo de reprogramação.
Graças ao modo de atualização do protocolo desenvolvido, o tráfego relativo à
reprogramação deixa de circular na rede quando todos os nós se reprogramam com
sucesso. Isto não acontecesse na reprogramação oferecida por defeito pelo Deluge.
Além disto, o protocolo permite a atualização de nós que se encontrem
desatualizados sobre o estado da reprogramação seletiva, mesmo depois de esta ter
4
terminado. Desta forma, o protocolo criado permite de um forma fiável e eficiente
reprogramar seletivamente uma RSSF. Isto traduz-se num claro aumento da
funcionalidade do Deluge e consequente melhoria das opções de reprogramação
oferecidas pelo TinyOS, permitindo aos utilizadores uma maior versatilidade na
construção e implementação de RSSFs.
O trabalho desenvolvido culminou na escrita de um artigo científico [5], que à
data de submissão desta dissertação se encontra ainda em processo de revisão.
1.4 Estrutura da dissertação
Esta secção descreve a estrutura da dissertação. Assim sendo, o Capítulo 2
oferece uma visão geral sobre as RSSFs, nomeadamente sobre as características
dos nós, a comunicação, os sistemas operativos mais utilizados e áreas de
aplicação.
O Capítulo 3 apresenta os desafios da reprogramação remota nas RSSFs bem
como os trabalhos que têm vindo a ser desenvolvidos nesta área.
O Capítulo 4 oferece os detalhes do desenho e implementação do protocolo
criado que permite a reprogramação seletiva dos nós de uma rede de sensores
através do seu tipo de plataforma ou do seu identificador único.
No Capítulo 5 está presente a descrição do cenário de testes utilizado bem como
a análise e discussão do comportamento do protocolo nos diversos testes realizados.
Finalmente, o Capítulo 6 apresenta as conclusões e perspetivas finais, bem
como as possíveis direções a tomar para trabalhos futuros.
5
2. Redes de Sensores Sem Fios
As RSSFs têm vindo a evoluir constantemente, diferenciando-se bastante na sua
constituição e nas áreas de aplicação. Neste capítulo são identificadas as
características dos nós que compõem uma RSSF, bem como o suporte à
comunicação que estas redes oferecem relativamente às normas e topologias. É
ainda feito um levantamento sobre os sistemas operativos mais utilizados e as
diversas áreas de aplicação onde as RSSFs estão a ser uma mais-valia.
2.1 Caraterísticas das Redes de Sensores Sem Fios
As RSSFs são compostas por sistemas individuais denominados de nós que são
capazes de interagir com o meio através de diversos sensores, processar informação
localmente e comunicar esta informação para os seus vizinhos através de uma
ligação sem fios. Esta informação pode corresponder a leituras feitas pelos sensores
sobre meio ambiente onde estão inseridos ou ao estado de atuadores. Normalmente,
um nó é constituído por quatro tipos de módulos principais que podem ser
encontrados no mesmo circuito integrado ou em circuitos separados sendo eles:
módulo de comunicação sem fios, microcontrolador, sensores e o módulo de
energia, ver Figura 2.1. A estes componentes base podem ainda ser adicionados
componentes adicionais como memória ou outros módulos de comunicação que
permitem, por exemplo, a comunicação por cabo com um computador.
6
Figura 2.1:Arquitetura de um nó sensor.
Os nós podem servir diferentes propósitos consoante o seu poder de
processamento. Os nós com reduzida capacidade de processamento e memória são
normalmente implementados em grande número para realizar tarefas de
monitorização do meio e fornecer uma infraestrutura de comunicação. Por outro
lado, os nós com mais recursos podem ser utilizados para executar tarefas mais
exigentes, como gestão da rede ou tratamento de dados antes de estes chegarem
ao utilizador.
O tipo de nós a utilizar depende das aplicações que estes vão suportar. O
utilizador pode construir os nós à medida, escolhendo os componentes que vão
integrar cada módulo, ou pode utilizar um nó já construído que ofereça os recursos
que pretende. Ao longo do tempo, vários tipos de nós têm chegado ao mercado
oferecendo um vasto leque de escolhas aos utilizadores. Na Figura 2.2, estão
representados vários tipos de nós que têm surgido no mercado ao longo do tempo,
como é referido em [6].
7
Figura 2.2: Mercado dos nós sensores ao longo do tempo [6].
2.2 Comunicação
2.2.1 Normas
A grande variedade de plataformas de nós existente para RSSFs provoca
problemas de compatibilidade na construção de aplicações. Desta forma, a
estandardização de certos aspetos como a comunicação é crucial para que este tipo
de tecnologias possa proliferar. Neste sentido, foi criada pelo IEEE a norma
802.15.4 com o objetivo de fornecer especificações para a camada física (PHY) e
de controlo de acesso ao meio (MAC) para dispositivos com uma tecnologia de
comunicação sem fios, de baixa taxa de transferência, com pouca complexidade e
com grandes preocupações energéticas.
O IEEE 802.15.4 ópera na gama de frequências denominada ISM (Industrial
Medicine Scientific) de 868 MHz (Europa), 915 MHz (EUA) e 2.4 GHz (Global)
sendo esta última a mais utilizada.
É conhecido que normas como o Bluetooth e Wi-Fi não são apropriados para
dispositivos com restrições energéticas, pelo que através do 802.15.4 foram
construídos várias normas ou padrões que tentam resolver este problema. De
seguida são discutidos algumas dessas normas que mais se destacam na
comunicação em RSSFs.
8
2.2.1.1 ZigBee
O padrão ZigBee [7] foi desenvolvido pela ZigBee Alliance com o intuito de
colmatar a necessidade do mercado na existência de um padrão para a
comunicação sem fios com baixas taxas de transmissão que oferecesse pouco
consumo energético, segurança e fiabilidade.
O ZigBee é definido em conjunto com a norma IEEE 802.15.4. Apesar de serem
muitas vezes confundidos estas normas definem camadas diferentes da pilha
protocolar. Como se pode verificar na Figura 2.3, o IEEE 802.15.4 define as duas
primeiras camadas, a camada física e a camada de controlo de acesso ao meio,
enquanto o ZigBee define a camada de rede e um framework aplicacional. Assim
sendo, para suportar uma grande variedade de aplicações foram definidos três tipos
de tráfego de dados [6]. O primeiro tipo, tráfego de dados periódicos, é originado
por aplicações de monitorização onde as aplicações enviam dados de forma regular,
independentemente de fenómenos externos que possam ocorrer. O segundo tipo,
tráfego de dados intermitente, é originado por aplicações que geram tráfego com
base em eventos despoletados pela própria aplicação ou por fenómenos externos.
Finalmente o terceiro tipo de tráfego, o tráfego repetitivo de baixa latência, diz
respeito a ações que têm de ser feitas num determinado período de tempo. Este tipo
de tráfego é definido pelo IEEE 802.15.4, através da estrutura da trama utilizada
para polling.
A camada de rede definida pelo ZigBee oferece as funcionalidades de gestão da
rede referentes à criação de uma nova rede e a junção ou não dos dispositivos à
mesma. Como os dispositivos que utilizam o ZigBee podem fazer parte de várias
redes ao longo do seu tempo de vida, a norma também oferece um mecanismo de
endereçamento flexível. Assim sendo, o coordenador da rede atribui endereços ao
dispositivo à medida que estes se vão juntando à mesma. Desta forma, em vez de
ser utilizada a identificação única de cada dispositivo na comunicação, são
utilizados endereços mais curtos aumentado a eficiência energética [6].
9
Figura 2.3: Arquitetura do ZigBee e pilha protocolar [7].
2.2.1.2 WirelessHart
O WirelessHart [6] tem sido desenvolvido como uma extensão sem fios do
protocolo Highway Addressable Remote Transducer (HART). Este protocolo é
largamente utilizado por aplicações da indústria e automação que requerem suporte
em tempo real. O HART disponibiliza um modelo de comunicação do tipo
primário/secundário, onde podem ser utilizados até dois primários. Desta forma, os
dispositivos ligados a este sistema podem ser monitorizados e controlados de forma
permanente. O WirelessHart foi lançado como fazendo parte da especificação HART
7, visando a monitorização de processos e aplicações de controlo. Este protocolo
baseia-se na especificação da camada física do IEEE 802.15.4 para frequências de
2.4 GHz.
A Figura 2.4 representa a arquitetura do WirelessHart como é apresentada em
[6]. É possível verificar a existência de cinco tipos de componentes sendo eles:
WirelessHart Field Devices (WFDs): são os dispositivos sensores e de
controlo;
10
Gateways: oferecem a comunicação entre a parte com cabos e a parte
sem fios da infraestrutura;
Network Managers: mantêm a comunicação da rede através da definição
dos espaços temporais em que cada dispositivo pode transmitir, a
determinação das tabelas de encaminhamento e a monitorização do
estado da rede;
WirelessHart Adapters: oferecem comunicação entre dispositivos HART,
que não possuem comunicação rádio, com a rede sem fios;
Handhelds: são dispositivos que possuem comunicação rádio e
permitem interagir diretamente com os WFDs;
Baseado nestes componentes, o WirelessHart oferece uma pilha protocolar que
utiliza o padrão IEEE 802.15.4 na camada física e um protocolo MAC baseado em
TDMA (Time Division Multiple Access) na cama de ligação de dados.
Figura 2.4: Arquitetura e componentes do WirelessHart [6].
11
2.2.1.3 6LoWPAN
Os padrões desenvolvidos para a comunicação nas RSSFs tornam possível a
comunicação entre os nós. Contudo, estas redes não podem ser facilmente
integradas com a Internet, visto que os protocolos de comunicação baseados no
IEEE 802.15.4 não são compatíveis com o IP. Desta forma, os nós sensores não
podem comunicar facilmente com dispositivos que se encontram na Internet como
servidores ou browsers. Isto obriga que sejam utilizadas gateways que têm como
função fazer a interligação entre as RSSFs e a Internet. Esta estratégia traz algumas
desvantagens, pois permite que se crie um único ponto de falhas na rede além de
sobrecarregar os nós vizinhos da gateway com todo o tráfego que necessita de ser
encaminhado para a Internet [6].
Para tentar resolver este problema, a IETF (Internet Engineering Task Force)
desenvolveu o 6LoWPAN (IPv6 over Low-power Wireless Personal Area Network)
[8]. Esta norma define a implementação da pilha protocolar IPv6 sobre o IEEE
802.15.4, permitindo assim que qualquer dispositivo das RSSFs possa ter
conectividade IP.
Os principais desafios na integração destes dois protocolos estão principalmente
no encaminhamento e transporte de tráfego devido às diferentes estruturas de
endereçamento. O IPv6 disponibiliza 40 bytes para o cabeçalho, incluindo
endereçamento, enquanto o IEEE 802.15.4 disponibiliza um total de 127 bytes
para toda a trama, incluindo cabeçalho e conteúdo (payload) [6].
2.2.2 Topologias
Na implementação de uma RSSF podem ser utilizadas diferentes topologias
dependendo do tipo de aplicações que vão ser utilizadas e dos recursos que os nós
possuem. Basicamente cada topologia define o tipo de infraestrutura que dará
suporte à comunicação na RSSF. Entre outras, as topologias mais comuns são:
Topologia em estrela: Uma topologia em estrela permite que uma estação
base envie e receba dados de todos os nós que estejam dentro do seu
12
alcance rádio. Estes nós só podem comunicar com a estação base, não lhes
sendo assim permitido trocar dados entre si, ver Figura 2.5 (a). As vantagens
deste tipo de topologia são: (i) a sua simplicidade; e (ii) a redução dos gastos
energéticos dos nós na transmissão, pois estes só têm de comunicar com a
estação base. Por outro lado, neste tipo de topologia a estação base tem de
estar obrigatoriamente dentro do alcance rádio de todos os nós na rede. Além
disso, o fato de todas as comunicações terem de passar por um único nó,
implica um único ponto de falha que pode comprometer toda a comunicação
da rede.
Topologia em malha: Este tipo de topologia permite a um nó comunicar com
todos os nós da rede através de uma comunicação multi-salto. Neste caso,
quando existe a necessidade de comunicação de um nó com outro nó que
esteja fora do seu alcance rádio, são utilizados nós intermédios para fazer o
encaminhamento da mensagem até ao destino, ver Figura 2.5 (b). Esta
topologia tem a vantagem de oferecer uma maior redundância e
escalabilidade. Desta forma, se um nó intermedio falhar, o caminho do
emissor até ao recetor pode ser alterado através da utilização de outros nós
intermédios. A grande desvantagem desta topologia é o elevado consumo
energético dos nós, pois estes têm de suportar protocolos de
encaminhamento. Além deste fato, quanto maior for o número de nós
intermédios, maior será o tempo que a mensagem demora a chegar ao
destino.
Topologia em cluster: Esta topologia é uma estratégia híbrida entre a
topologia em malha e a topologia em estrela, proporcionando uma estratégia
robusta e versátil para a comunicação enquanto tenta reduzir o consumo
energético. Nesta topologia, os nós com menos recursos não podem ser
utilizados como nós intermédios, ou seja, não encaminham mensagens,
permitindo assim que estes poupem energia. Por outro lado, os nós com
mais recursos são utilizados como nós intermédios fazendo o
13
encaminhamento das mensagens dos nós com poucos recursos para o resto
da rede, ver Figura 2.5 (c).
Figura 2.5: Topologias mais comuns nas RSSFs. (a) Topologia em estrela; (b) Topologia em
malha; e (c) Topologia em cluster.
2.3 Sistemas Operativos nas Redes de Sensores Sem Fios
2.3.1 Contiki
O Contiki [2] é um sistema operativo (SO) leve e modular que suporta o
carregamento dinâmico e substituição individual de programas e serviços. O seu
Kernel é baseado em eventos e oferece opcionalmente a utilização de preemptive
threadings. Este SO é construído em linguagem C e foi implementado em várias
plataformas com diferentes arquiteturas de CPUs. O único nível de abstração
fornecida pelo seu Kernel é a multiplexação do CPU e o carregamento dinâmico de
programas e serviços. Uma abstração adicional é também fornecida através de
bibliotecas com acesso total à camada de hardware. Os programas são carregados
para o SO utilizando um formato binário modificado que contém informações sobre
a sua relocalização, sendo que esta é feita em tempo de execução.
O Contiki permite a utilização de proto-threads, que funcionam como uma
camada de abstração, fornecendo a possibilidade de escrever programas utilizando
14
threads, apesar de o Kernel ser baseado em eventos. As grandes vantagens dos
proto-threads passam por estes terem um overhead pequeno (apenas 2 bytes de
memória), não necessitarem de uma pilha de processamento separada e serem
altamente portáveis. Como alternativa às proto-threads, o Contiki disponibiliza
também, como já foi referido, o modelo de preemptive threading implementado
através de uma biblioteca opcional. Neste caso, são utilizadas diferentes pilhas para
cada thread que são acedidas pela CPU consoante a sua prioridade.
No Contiki, um processo é uma aplicação ou um serviço que podem ser
substituídos em tempo de execução. A comunicação entre serviços é implementada
usando eventos disponibilizados pelo Kernel.
No que diz respeito aos protocolos de comunicação, as aplicações no Contiki
podem utilizar ambas as versões do protocolo IP (IPv4 e IPv6) e uma
implementação da pilha protocolar TCP/IP para pequenos microcontroladores de 8
bits com a denominação de µIP. O µIP consiste na implementação do mínimo de
funcionalidades necessárias para ter uma pilha protocolar TCP/IP completamente
funcional, suportando TCP, UDP, ICMP e os protocolos IP. Além deste protocolo, o
Contiki fornece ainda um outro protocolo leve de comunicação chamado Rime. Este
protocolo suporta comunicação single-hop unicast, single-hop broadcast e
multihop, bem como a transmissão com garantia de entrega ou em melhor-esforço
(best-effort).
Relativamente à portabilidade, para colocar o Contiki a funcionar com diferentes
plataformas é necessário escrever o código específico dessa plataforma no que diz
respeito aos drivers dos dispositivos, carregamento dinâmico dos programas
específicos dessa arquitetura e contextualização para o uso do modelo de
preemptive threading. O Kernel e a camada de serviços são independentes da
plataforma. Apesar da portabilidade deste SO para novas plataformas ser
parcialmente eficaz, na medida que o código referente ao MCU pode ser reutilizado,
a abordagem do Contiki é copiar e duplicar código mesmo entre plataformas que
partilham o mesmo código base. Por esta razão, os programas para este SO são
relativamente pesados pois usam vários kBytes de memória RAM e o código fonte
15
tem mais de 10 kBytes de tamanho. Nesta perspetiva, a portabilidade do Contiki
poderia ser melhorada através da criação de regras para o desenho e construção de
arquiteturas, onde um código base pudesse ser partilhado e reutilizado entre
diferentes plataformas. Na Figura 2.6 está representada a arquitetura do Contiki [9].
Figura 2.6: Arquitetura do Contiki [9].
2.3.2 LiteOS
O LiteOS [10] segue uma arquitetura modular escrita com uma programação
orientada a objetos, o LiteC++ (baseada em C++), oferecendo um nível de
abstração que se assemelha ao Unix. Este sistema operativo é composto por três
subsistemas: LiteShell, LiteFS, e o Kernel. O LiteShell é uma interface baseada em
Unix que permite gerir ficheiros, processos, depuração e dispositivos. Um aspeto
interessante do LiteOS é que o LiteShell reside na estação base ou no computador
onde a estação base está ligada. Este fator permite executar tarefas mais complexas,
visto que, a estação base possui mais recursos (e.g. energia). O LiteFS interpreta
todos os nós vizinhos a um salto como ficheiros, tendo uma visão da rede como
16
uma diretoria onde cada ficheiro é um nó. O utilizador na estação base pode utilizar
esta estrutura de diretorias como se tratasse de uma diretoria em Unix para executar
comandos. O Kernel reside em cada nó e oferece concorrência de processos na
forma de multithreading suportando carregamento dinâmico, registo de eventos
através de funções callBack e sincronização. O escalonador utilizado segue um
modelo baseado em prioridades e/ou Round Robin. Na Figura 2.7 está representada
a arquitetura do LiteOS como é apresentada em [10].
A comunicação no LiteOS é baseada em ficheiros, na medida que são criados
ficheiros que correspondem a todos os dispositivos que o nó possui. Desta forma, é
criado um ficheiro referente à interface rádio e sempre que é necessário enviar
alguma informação, os dados são colocados neste ficheiro sendo posteriormente
transmitidos. Da mesma forma, quando um nó recebe um pacote através da sua
comunicação rádio, esses dados são colocada no ficheiro da interface rádio, sendo
depois entregue à respetiva aplicação através da identificação da porta contida no
pacote recebido.
O código fonte é específico para a plataforma AVR 8-bits, sendo que desta forma
a portabilidade deste SO é reduzida.
Figura 2.7: Arquitetura do LiteOS [10].
17
2.3.3 Mantis
O MANTIS (MultimodAl System for NeTworks of In-situ wireless Sensors) [11]
é um sistema operativo leve e eficiente desenvolvido em linguagem C. Utiliza
preempite multithreading, permitindo aos nós executar tarefas mais complexas de
compressão, agregação e processamento de dados, mantendo um footprint inferior
a 500 Bytes de memória RAM, incluindo Kernel, escalonadores e comunicação.
Este SO segue uma arquitetura baseada em camadas como mostra a Figura 2.8.
Numa arquitetura de camadas, os serviços são implementados por camada, onde
um serviço de uma camada superior apenas utiliza os serviços de camadas
inferiores sem saber os detalhes da sua implementação.
No MANTIS, o Kernel apenas lida com as interrupções geradas pelo
temporizador, sendo que todas as outras interrupções são enviadas diretamente
para os drivers dos dispositivos. Quando os drivers recebem uma interrupção, é
ativado um thread que será responsável por lidar com os eventos que causaram a
mesma.
A comunicação no MANTIS é dividida em duas partes. A primeira parte da pilha
protocolar de comunicação é implementada no espaço do utilizador, como se
verifica na Figura 2.8. Esta parte contém a implementação dos protocolos da
camada de rede e superiores. A razão de isto acontecer, é para garantir uma maior
flexibilidade, na medida que, se uma aplicação quiser utilizar o seu próprio protocolo
de encaminhamento, este pode ser implementado no espaço do utilizador. A
desvantagem desta estratégia é a redução do desempenho, uma vez que o protocolo
de comunicação terá que utilizar a API (Application Programming Interface)
fornecida pelo MANTIS em vez de comunicar diretamente com a API do hardware.
A segunda parte da pilha protocolar de comunicação é implementada na camada
COMM, cuja sua principal função é garantir a sincronização e implementação das
funcionalidades da camada MAC. A camada COMM fornece uma interface unificada
para a comunicação com os drivers dos dispositivos (e.g. comunicação série, USB
e dispositivos de rádio).
18
O MANTIS não suporta comunicação em grupo (multicast) nem aplicações em
tempo-real, não suportando nenhum protocolo deste género na sua pilha protocolar.
Contudo, como já foi referido, este SO facilita a implementação de protocolos de
encaminhamento e de transporte sobre a camada MAC, sendo assim possível criar
e implementar protocolos para aplicações em tempo-real e/ou orientadas à
comunicação em grupo.
Uma das maiores vantagens do MANTIS é a sua portabilidade entre diferentes
plataformas, incluindo PDAs e PCs, permitindo criar redes híbridas entre nós reais
e virtuais (simulados em um ou mais PCs).
Figura 2.8: Arquitetura em camadas do MANTIS.
2.3.4 Nano-RK
O Nano-RK [12] é um SO baseado em preeptive multitasking com suporte a
aplicações em tempo-real que utiliza 2 kBytes de memória RAM e 18 kBytes de
memória ROM. O Nano-RK segue uma arquitetura monolítica, Figura 2.9. Um dos
19
objetivos do Nano-RK é o de facilitar o desenvolvimento de aplicações por parte dos
programadores, permitindo-lhes trabalhar com o paradigma que lhes é familiar,
denominado multitarefa (multitasking). Isto resulta numa curva de aprendizagem
menor, aumentado a rapidez de desenvolvimento de aplicações e consequente
aumento de produtividade.
O Nano-RK disponibiliza uma pilha protocolar de comunicação leve, com um
nível de abstração similar aos sockets. Na comunicação tradicional quando uma
aplicação pretende enviar dados, esta abre um socket e depois começa a
comunicação através do mesmo. Da mesma forma, quando a aplicação quer
receber dados, esta abre um socket numa determinada porta e fica à “escuta”. Para
uma melhor gestão da memória, os buffers utilizados para enviar e receber dados
não são geridos pelo SO mas sim pela própria aplicação, garantindo assim que esta
apenas reserva a memória que necessita.
O Nano-RK fornece uma API às aplicações para que estas possam reservar
largura de banda consoante os seus requisitos de qualidade de serviço. Assim
sendo, são disponibilizadas dois tipos de APIs: uma para reservar largura de banda
do ponto de vista do emissor e outra para o ponto de vista do recetor. Num
determinado período, uma aplicação pode somente enviar ou receber dados,
consoante o nível da sua reserva de largura de banda. A cada novo período, a
reserva de largura de banda para cada aplicação é renovada.
O Nano-RK não suporta nenhum algoritmo de encaminhamento em grupo, nem
nenhum protocolo de gestão de grupos.
Em relação à portabilidade, o Nano-RK suporta a plataforma MicaZ e FireFly,
não oferecendo detalhe sobre o seu grau de portabilidade para outras plataformas.
20
Figura 2.9: Arquitetura do sistema operativo Nano-RK [12].
2.3.5 TinyOS
O TinyOS [1] é um sistema operativo para as RSSFs substancialmente testado
e estável, possuindo uma grande comunidade de utilizadores e colaboradores.
Assim sendo, constitui uma referência na programação das RSSFs. Na Figura 2.10
está representada a sua arquitetura como é apresentada em [9].
O TinyOs segue uma arquitetura monolítica e utiliza um modelo baseado em
componentes, que dependendo dos requisitos da aplicação, são interligados entre
si de forma a criarem uma imagem estática que irá correr no nó. Um componente
é uma identidade computacional independente que disponibiliza uma ou mais
interfaces. Dividir os serviços do TinyOS em componentes traz uma grande
vantagem, pois permite que os serviços não usados sejam excluídos da aplicação.
Os componentes têm três abstrações computacionais diferentes: comandos, eventos
e tarefas. Um comando é um pedido para executar um serviço enquanto o evento
assinala realização do mesmo. As tarefas são mecanismos computacionais adiados.
O TinyOS oferece um modelo simples de concorrência baseado em tarefas e
eventos. As tarefas não interferem entre si, ou seja, não há preempção entre as
mesmas. Uma vez escalonada, uma tarefa é executada até terminar. Os
21
componentes podem iniciar a execução de tarefas através de comandos, chamando
a este procedimento fazer “post” de uma tarefa. Como não há preempção entre as
tarefas, o código executado deve ser curto, de forma a evitar que uma tarefa fique
em execução indefinidamente. Além disso, para garantir que uma tarefa termine
sempre, esta não pode bloquear recursos nem entrar em espera ocupada. O
escalonador de tarefas é configurado para escalonar as tarefas para execução
sempre que o processador estiver disponível. A disciplina FIFO (First In First Out) é
usada como padrão.
O TinyOS oferece apenas uma pilha protocolar que é partilhada por todos os
processos e não faz separação do Kernel e do espaço do utilizador. A linguagem
utilizada neste SO é uma linguagem orientada a eventos específica para RSSFs
derivada da linguagem C, denominada NesC.
Relativamente à comunicação, o TinyOS disponibiliza duas abstrações básicas
de encaminhamento multihop [13]: árvore de coleta e de disseminação. Na árvore
de coleta, os nós organizam-se entre si numa árvore de encaminhamento centrada
num único nó, o nó raiz, que normalmente é uma estação base. Todas as
mensagens enviadas na árvore, automaticamente até ao nó raiz. As árvores de
coleta são normalmente utilizadas para coletar dados de uma rede de sensores.
Na disseminação, é distribuído de forma eficaz um valor, ou uma estrutura de
dados com vários campos, para todos os nós da rede. Posteriormente, cada nó pode
atualizar esse valor e a rede eventualmente acabara por receber a versão mais
atualizada do mesmo. A disseminação é normalmente utilizada para alterar
configurações em tempo de execução das aplicações que correm nos nós.
No que diz respeito à camada MAC, o TinyOS oferece uma implementação dos
seguintes protocolos: um protocolo de comunicação single-hop com TDMA, o
protocolo híbrido (TDMA/CSMA) Z-MAC, o protocolo B-MAC e uma implementação
opcional de segurança na camada MAC mantendo a compatibilidade com o IEEE
802.15.4.
22
Embora o TinyOS seja portável para outras plataformas, este tem uma curva de
aprendizagem relativamente grande. As grandes razões subjacentes à complexidade
do TinyOS são:
A natureza baseada em eventos do TinyOS: a programação baseada em
eventos é mais complexa para os programadores, na medida que é
necessário ter em mente que várias operações estão a ser executadas ao
mesmo tempo.
Arquitetura modelar: muito código com elevado nível de modularidade faz
com que a lógica do programa fique distribuída em muitos componentes.
Cada nova funcionalidade pode requerer alterações em vários componentes,
exigindo um conhecimento profundo do sistema interno de estruturas do
NesC, que é pouco familiar até para programadores experientes em C e
sistemas embutidos.
Estas limitações são ao nível do desenho do próprio SO pelo que não têm uma
solução simples. A alternativa mais conveniente e mais usada é a utilização de
middleware sobre o TinyOS, de forma simplificar o desenvolvimento de aplicações
aos programadores iniciantes.
23
Figura 2.10: Arquitetura do sistema operativo TinyOS [9].
2.4 Aplicabilidade
Com a evolução do hardware, os nós sensores são cada vez mais capazes de
efetuar tarefas complexas sem afetar a sua eficiência energética. Está também
disponível uma grande quantidade de sensores que permitem medir vários fatores
do meio como: temperatura, humidade, pressão, luminosidade, ruído, a presença
ou falta de determinados compostos químicos etc. Esta grande variedade de opções
de monitorização faz com que as RSSFs possam ser utilizadas em variadíssimas
aplicações desde a monotorização de ambientes até à segurança de espaços. De
seguida, são dados alguns exemplos de áreas de aplicação onde as RSSFs estão a
ser uma mais-valia.
2.4.1 Monotorização de Ambientes
A monitorização ambiental é uma das primeiras e principais áreas de aplicação
das RSSFs. Neste tipo de aplicações, muitas vezes devido à grande área de
monitorização ou ao difícil acesso à mesma, é impraticável utilizar sensores
24
tradicionais com ligações estruturadas assentes em cabos. Assim sendo, a utilização
de uma tecnologia como as RSSFs tem sido amplamente adotada. Sonoma Dust
[14] é uma RSSF constituída por 120 Mica2dot que foi instalada no condado de
Sonoma para monitorizar o habitat das árvores de madeira vermelha. Estes nós
sensores correm o TinyOS e estão programados para medir condições ambientais
como temperatura, humidade e luminosidade a cada 5 minutos. Esta informação é
depois enviada através de uma topologia em malha até à estação base, que envia
a informação para um computador a 70 Km de distância. Em [15] é utilizada uma
RSSF para monitorizar o vulcão Tungurahua no centro do Equador. São utilizados
5 nós sensores, onde 3 possuem um microfone especial para captar sons infra-
sónicos originados por vulcões quando entram em erupção.
2.4.2 E-Health
O termo “e-Health” é utilizado para referir o uso de tecnologia de informação e
comunicação (ICT) na prestação de serviços de saúde [16], tendo sido uma área
muito procurada para projetos de investigação e desenvolvimento. Uma das
vertentes mais exploradas passa pela monitorização de pacientes fora do ambiente
hospitalar. Devido ao seu tamanho reduzido, os nós sensores podem ser embutidos
em peças de vestuário tornando-se ideais para esta tarefa. Em [17], Wan-Young
apresenta um sistema ubíquo, não-intrusivo, que permite monitorizar os níveis de
oxigénio no sangue (SpO2), a atividade cardíaca através de um eletrocardiograma
(ECG), e os movimentos do paciente através de acelerómetros. O sistema transmite
esta informação para um terminal ligado a um computador onde os dados podem
ser acedidos através de aplicações externas.
O ALARM-NET é apresentado em [18] como um sistema que permite uma
monitorização não-intrusiva e adaptativa do estado de saúde de um paciente. Este
sistema implementa uma RSSF que recolhe os sinais vitais do paciente e cria um
historial de saúde. Esta informação é utilizada por pessoas autorizadas e ligadas à
área da medicina para monitorizar o estado de saúde dos pacientes de uma forma
constante, sem que estes tenham de se deslocar ao hospital.
25
A monitorização dos sinais vitais pode ser feita não só por razões ligadas à saúde
mas também para a melhoria do desempenho desportivo, quer de atletas
profissionais quer de amadores. Em [19] é apresentada a arquitetura e a
implementação de um sistema de apoio a corredores de corta-mato baseado em
RSSFs. Neste sistema são utilizados nós sensores no atleta e ao longo da pista que
este está a percorrer. Os nós no atleta recolhem informação do seu estado físico
como o ritmo cardíaco, oxigénio no sangue e a velocidade a que este está a correr.
Por outro lado, os nós que estão espalhados pela pista recolhem dados do meio
ambiente como a temperatura, humidade e velocidade do vento. O objetivo é utilizar
esta informação para determinar o percurso que o atleta deve seguir para que os
seus sinais vitais se mantenham nos níveis desejados. Outro exemplo é apresentado
na em [20], onde foi desenvolvido e testado um sistema que recolhe dados do
ambiente e do utilizador. Esta informação é utilizada para sugerir exercícios
baseados no perfil do utilizador de forma a melhorar a sua performance.
2.4.3 Outras áreas de aplicação
As RSSFs estão a ser aplicadas nas mais diversas áreas devido à sua grande
versatilidade e baixo custo. Um dos exemplos é a indústria, que sempre esteve
interessada em sistema económicos de monitorização que permitissem aumentar a
sua produtividade e segurança. A monitorização do estado de “saúde” das máquinas
através das medições de determinados aspetos (e.g. vibração, desgaste e
lubrificação), permite detetar anomalias e evitar falhas no funcionamento das
mesmas. A utilização das RSSFs permite uma rápida instalação de equipamento
capaz de fazer esta monitorização, podendo ser colocadas em locais de difícil acesso
onde redes com cabos seriam impossíveis. O projeto GINSENG é um exemplo da
integração das RSSFs na indústria, tendo participação de investigadores
portugueses [21] . Uma área também em expansão é a da monitorização estrutural
de edifícios. Neste tipo de aplicações, os nós sensores são colocados juntamente
com os materiais de construção do próprio edifício, permitindo assim, monitorizar
em tempo-real a integridade física do edifício [22] [23].
26
A área militar é sem dúvida também uma área onde as RSSFs fornecem uma
mais-valia devido à sua facilidade de implementação, grande densidade e custo
reduzido. Desta forma, nós podem ser lançadas em cenários hostis de forma a
fornecer informações valiosas sobre o campo de batalha [24].
2.5 Sumário
Neste capítulo foram analisadas as características de uma RSSF no que diz
respeito à constituição típica dos nós e à comunicação suportada neste tipo de redes
relativamente às normas e topologias. Foi ainda feito um levantamento dos sistemas
operativos mais utilizados nas redes de sensores focando a sua arquitetura, suporte
à comunicação e portabilidade. Por fim, foram identificados alguns trabalhos
relacionados com a implementação de RSSFs em diversas áreas, destacando-se a
monitorização de ambientes e a área da saúde.
O próximo capítulo aborda as questões relacionadas com a reprogramação
remota nas RSSFs, nomeadamente os principais desafios que esta área apresenta
e os principais trabalhos que têm sido propostos ao longo do tempo.
27
3. Reprogramação remota de Redes de Sensores Sem Fios
Neste capítulo são abordados os trabalhos que têm vindo a ser desenvolvidos
na área da reprogramação remota de RSSFs. Assim sendo, numa primeira secção
são identificados e discutidos os principais desafios da reprogramação remota nas
redes de sensores. Numa segunda secção, são identificados alguns trabalhos
relacionados com a reprogramação remota de RSSFs com base no tipo de
reprogramação que utilizam.
3.1 Desafios da reprogramação remota nas RSSFs
A reprogramação das RSSFs é essencial para garantir a versatilidade deste tipo
de redes. As necessidades de reprogramação prendem-se com as mais variadas
razões como por exemplo, atualizações de software, melhorias de segurança ou
alterações nos objetivos aplicacionais. Para tal, há necessidade de disseminar o
código que se pretende instalar nos nós utilizando a comunicação sem fios pois,
muitas vezes, esta é a única forma de alcançar os nós depois de estes terem sido
colocados no meio.
Reprogramar remotamente os nós de uma RSSF levanta uma série de desafios,
pois tratam-se de plataformas com recursos muito limitados. Todas as operações
que são feitas no nó gastam energia, sendo que a receção e o envio de dados através
da comunicação sem fios são as que mais consomem. Na reprogramação remota
dos nós as atualizações de código devem chegar a todos os nós da rede na sua
totalidade (sem erros nem perdas). Outro fator a ter em conta é que os nós também
possuem severas restrições ao nível da memória e processamento. Neste sentido,
como se espera que a reprogramação seja um serviço suportado por todos os nós
28
da rede, esta deve ter pouco impacto na memória dos mesmos deixando assim
espaço para a lógica aplicacional e do sistema operativo.
Apesar do impacto energético que a reprogramação remota tem nos nós ser uma
preocupação assente nesta área, quanto mais se otimiza a reprogramação ao nível
energético, por norma mais se compromete a flexibilidade da solução. Esta
flexibilidade diz respeito à portabilidade da solução para diferentes plataformas e à
alteração de funcionalidades da própria solução (e.g. otimizações da solução), que
estão diretamente ligadas à forma como a reprogramação é feita nos próprios nós.
A reprogramação pode ser feita de duas formas: (i) uma reprogramação total, onde
todos os nós são reprogramados com a mesma aplicação; ou (ii) uma
reprogramação seletiva, onde apenas um conjunto especifico de nós é
reprogramado. A reprogramação seletiva é fundamental, na medida que permite que
uma RSSF possua múltiplas aplicações e plataformas, aumentando assim a sua
versatilidade e aplicabilidade.
Assim sendo, os principais desafios na reprogramação remota prendem-se
sobretudo com o fato de encontrar soluções que tenham um bom desempenho com
baixo impacto nos recursos dos nós das redes de sensores, ao mesmo tempo que
devem oferecer um bom nível de flexibilidade.
3.2 Tipos de reprogramação
O primeiro passo na reprogramação sem fios dos nós é saber quando existe a
necessidade de reprogramar e que parte do código necessita ser alterado, todo ou
parcial. Esta decisão pode ser tomada pelo utilizador ou automaticamente pela rede.
No primeiro caso, a ordem para se iniciar a reprogramação em cada nó é sempre
dada pelo utilizador, enquanto os nós comportam-se simplesmente como “escravos”
executando as ordens recebidas. Nesta forma de reprogramação, o utilizador decide
quando quer reprogramar cada nó baseado nas suas decisões ou então pode utilizar
um sistema especifico para inferir o estado de cada nó e determinar se existe a
necessidade de reprogramação. O SNMS (Sensor Network Management System)
29
[25] é um exemplo deste tipo de sistemas, fornecendo um protocolo que permite
criar uma árvore da topologia da rede e um sistema de perguntas que permite inferir
o estado e desempenho da mesma. Estas respostas são armazenadas e caso exista
necessidade de alterar o código nos nós, é utilizada esta árvore juntamente com o
DRIP1. A vantagem deste tipo de sistemas, que utilizam árvores, é que não existe a
necessidade dos nós terem nas suas tabelas de encaminhamento todos os vizinhos,
pois só precisam de saber qual a sua posição na árvore e qual o próximo salto. A
desvantagem é que este tipo de sistemas só funciona em redes onde os nós são
estáticos.
No segundo caso, onde a decisão de reprogramação é tomada pela própria rede,
o utilizador transmite a nova versão do código para pelo menos um nó. Neste caso,
os nós comunicam uns com os outros, avaliam se a sua versão de código está
desatualizada e se necessário iniciam a disseminação e atualização do código. Este
tipo de abordagem é sem dúvida a mais utilizada, pois permite reconfigurar todo o
tipo de nós, móveis e estáticos, além de permitir uma maior autonomia à rede.
Existem muitos protocolos que permitem a reprogramação de RSSFs que
diferem na forma como tratam as questões da disseminação do código e da técnica
que utilizam na reprogramação dos nós. No processo de disseminação podem ser
utilizadas diferentes abordagens de forma a maximizar o seu desempenho,
nomeadamente: (i) seleção dos nós que vão transmitir os dados (e.g. ter muitos nós
a transmitir localmente ao mesmo tempo aumenta a probabilidade de colisões e
não garante a otimização dos recursos); (ii) gestão da fragmentação dos dados, de
forma a ter em conta o limite de memória e recursos dos nós; e (iii) esquemas de
garantia de fiabilidade que permitem detetar perdas e gerir as retransmissões (e.g.
podem ser feitas por unicast, broadcast ou multicast, podendo também ser
utilizadas técnicas como Forward Error Correction). Contudo, estas abordagens vão
depender do tipo de reprogramação que está a ser utilizada, ou seja, a forma como
1 DRIP-Protocolo de disseminação que oferece uma camada de transporte para que os canais
possam fazer a disseminação do código.
30
a reprogramação é feita no próprio nó, que tem influência direta no que é enviado
na disseminação e como é que esta é feita.
As métricas para avaliar os protocolos de reprogramação prendem-se
principalmente com: (i) questões de sobrecarga (overhead); (ii) o gasto energético,
que tem influência direta no tempo de vida dos componentes da rede; (iii) a latência
na deteção da necessidade de atualizações; e (iv) o tempo da própria disseminação.
Em seguida são apresentados e discutidos os trabalhos desenvolvidos na área
da reprogramação das RSSFs com base nos tipos de reprogramação utilizados.
3.2.1 Reprogramação Modular
A arquitetura modular é ideal para a reprogramação sem fios dos nós. Ao
contrário das arquiteturas monolíticas, qualquer mudança no sistema é local e assim
sendo, somente os módulos modificados necessitam de ser transmitidos. Os
sistemas que suportam reprogramação modular consistem num loader e num linker.
O loader é responsável por identificar e alocar a memória necessária para os novos
módulos, enquanto o linker, resolve qualquer referência feita pelos módulos ao
kernel, bibliotecas comuns ou qualquer outro módulo do sistema.
O Contiki [2] é o primeiro sistema operativo que suporta reprogramação
modular. O seu núcleo, à exceção do bootloader, é um componente não
reprogramável não suportando alterações ao kernel, tabelas de símbolos e interfaces
de comunicações. Contudo, um conjunto de funcionalidades como suporte ao
sistema de ficheiros, interface, gestão de energia, etc., são módulos reprogramáveis.
O Contiki permite a reprogramação com linking e loading dinâmico do código nativo
através do uso de ficheiros ELF (Executable and Linkable Format). Este tipo de
ficheiros não são só um padrão nos objetos de formato binário em muitos
computadores, como também, podem ser utilizados em sistemas embebidos com
recursos limitados. Utilizando o padrão ELF, o linker dinâmico do Contiki pode
dinamicamente ligar, realocar e carregar novos módulos.
O LiteOS [10] utiliza a mesma estratégia de relocação de memória que o Contiki,
contudo, ao contrário deste, o LiteOS utiliza o formato Intel HEX (iHEX) para guardar
31
a informação referente à realocação. Os ficheiros do tipo iHEX requerem menos
espaço de memória que os ELF. Apesar de o LiteOS ter um nível de abstração similar
aos sistemas UNIX, a reprogramação modular acaba por ser bastante simples para
o utilizador.
Apesar dos sistemas modulares facilitarem a reprogramação, estes possuem
grandes desvantagens como o uso de grandes quantidades de memória e execução
lenta. A fiabilidade pode também ser um problema, visto que, módulos que
possuam algum erro ou tenham sido pouco testados podem afetar o funcionamento
de toda a rede.
3.2.2 Máquinas virtuais
Uma máquina virtual fornece um ambiente completo para a execução de
programas escritos na sua linguagem própria (geralmente linguagem de script). A
máquina virtual disponibiliza um conjunto de instruções da sua linguagem para que
sejam criadas aplicações, e em tempo de execução, essas instruções são
interpretadas e executadas na plataforma alvo. A reconfiguração de software numa
máquina virtual é realizada de forma simples, sendo necessário apenas o envio das
instruções que compõem a aplicação.
Maté [26] é uma máquina virtual que é executada sobre o sistema operativo
TinyOS. Esta disponibiliza 8 instruções (bytecodes) que podem ser interpretadas.
Os bytecodes limitam o número de aplicações que podem ser construídas e
possuem um tamanho menor do que o código nativo, diminuindo o consumo de
energia na transferência dos dados. Entretanto, para aplicações que executam
durante um longo período, a energia gasta para interpretar o código supera essa
vantagem.
O SensorWare [27] provê uma máquina virtual que suporta a programação dos
nós através de uma linguagem de script para sensores com maior poder de
processamento e memória. O SensorWare ocupa 179 kBytes de memória divididos
pelo interpretador da linguagem baseada em Tcl, o Kernel do SensorWare e o código
32
dependente da plataforma, sendo utilizados comandos para replicar ou migrar o
código e dados de um nó para outros nós sensores da rede através de scripts.
A VM* [28] é um framework que permite a construção de uma máquina virtual
capaz de interpretar aplicações escritas em linguagem Java. Foram feitas
otimizações para reduzir o sobrecusto introduzido pela máquina virtual. A
framework é formada por um interpretador que executa os bytecodes em Java, uma
pequena API para o acesso aos dispositivos e um sistema operativo para suportar o
escalonamento de tarefas e alocação dinâmica de memória. A máquina virtual provê
instruções (e.g. copy, run e add) pare executar uma atualização. O suporte para
reconfiguração dinâmica é fornecido por um linker incremental e um bootloader,
sendo introduzidos no sistema somente se a atualização de código for necessária.
Para reduzir o efeito de uma atualização quando ocorre o deslocamento de código
(e.g. aumento de código numa função), são deixados espaços de memória em
branco entre as funções. Assim, quando uma função cresce, não existe a
necessidade de trocar a função de posição na memória. Contudo, esta abordagem
aumenta o consumo de memória.
A Tapper [29] é uma máquina virtual que utiliza a sua própria linguagem de
script e não necessita de um ambiente de execução, como um sistema operativo,
para ser executada. Esta máquina virtual é composta por um gestor de espaço de
armazenamento (buffers), um interpretador e componentes do sistema como
temporizador, ADC, SPI, etc. A Tapper foi implementada em diferentes plataformas
de sensores e diversos tipos de microcontroladores, variando desde uma arquitetura
AVR de 8-bits com 4 kBytes de RAM até a Freescale 16-bits com o protocolo TCP/IP.
O tamanho do código da máquina virtual varia de 3 kBytes a 11 kBytes e os dados
de 230 Bytes a 1.5 kBytes dependendo da arquitetura. O processo de
reconfiguração é executado pelas instruções “+” e “-”. Por exemplo, a instrução
+func carrega a função “func” no sistema enquanto a instrução -func faz
precisamente o contrário. Estas instruções são executadas na estação base que
possui o conhecimento sobre a memória e o código em cada nó da rede.
33
3.2.3 Reprogramação ao nível do sistema
A reprogramação ao nível do sistema continua a ser a forma mais fácil e mais
comum de reprogramar uma rede de sensores sem fios. Neste tipo de
reprogramação, a aplicação que corre no nó é substituída na íntegra por uma
imagem binária da nova aplicação, juntamente com o código relativo ao sistema
operativo. Desta forma, a substituição é completa não só a nível aplicacional como
a nível do sistema operativo. Neste processo, a nova imagem é guardada na
memória flash externa sendo depois copiada para a memória interna do
microcontrolador através de um bootloader. Os sistemas com uma arquitetura
monolítica, como o TinyOS [1] e o Nano-RK [12], graças à sua imagem estática,
enquadram-se perfeitamente neste tipo de estratégia de reprogramação.
Esta técnica de reprogramação pode-se enquadrar em dois tipos de abordagens
diferentes no que diz respeito ao envio do novo código. Uma das abordagens
consiste em enviar todo o código para os nós enquanto a outra passa pelo envio das
diferenças entre versões de código (delta). Na primeira abordagem é utilizada a
funcionalidade básica da reprogramação onde o nó recebe o código e inicia
imediatamente a sua reprogramação. Contudo, na segunda abordagem, o nó recebe
apenas o delta e utiliza esta informação para gerar o novo código e só depois inicia
a sua reprogramação.
3.2.3.1 Estratégias baseadas na distribuição de toda a imagem do código
Apesar de esta abordagem ser bastante simples e robusta é também ineficiente,
pois o grande tamanho das imagens do código implicam um maior gasto energético
na transmissão. Além disso, mesmo uma pequena alteração no código obriga a que
seja gerada uma nova e completa imagem de código para ser transmitida para a
rede, e assim se efetuar a reprogramação dos nós.
O Crossbow Network Reprogramming Protocol (XNP) [30] é o módulo de
reprogramação utilizado no TinyOS versão 1.1. Este implementa a função básica de
reprogramação fazendo broadcast do novo código para múltiplos nós por
34
comunicação single-hop bidirecional, dentro do raio de alcance da estação base.
Contudo, este protocolo não suporta métodos para reduzir o tamanho das imagens
do código, nem comunicação multihop.
O Deluge [4] utiliza anúncios de versões de código para detetar a necessidade
de atualizações na rede. Além disto, este protocolo divide o código a ser transmitido
num conjunto de páginas com tamanho fixo. Esta rigidez no tamanho do conteúdo
a ser transmitido permite multiplexação espacial, pois cada página é encarada como
um objeto independente. Desta forma, a propagação do código é feita mais
rapidamente.
O Stream [31] é baseado no Deluge e otimiza o que é enviado pelo canal de
comunicação. No Stream, é instalado em cada nó o protocolo de reprogramação
antes de este ser colocado no meio. Este processo é feito através da segmentação
da memória flash. A vantagem é que, ao contrário do que acontece no Deluge onde
é enviado a imagem do código e o protocolo de reconfiguração, no Stream é enviada
a imagem do código e apenas a informação sobre qual o protocolo de reprogramação
a utilizar. Isto faz com que a sobrecarga da rede diminua bastante, tornando-o assim
mais eficiente a nível energético e mais rápido. Este protocolo é implementado no
TinyOs na família Mica.
O DStream [32] é um protocolo híbrido que tem a capacidade de reprogramação
single-hop e multihop. É baseado no Stream tirando partido de todas as suas
vantagens em relação ao tamanho do código a ser enviado e à segmentação da
memória. Os autores concluíram que, tal como seria espectável, a reprogramação
single-hop pode ser mais rápida e energeticamente mais eficiente que a
reprogramação multihop em determinados cenários. Assim sendo, foram utilizadas
análises matemáticas e cenários simulados e reais para identificar as condições que
favorecem a reprogramação single-hop e multihop. Os autores concluíram que para
redes onde as ligações são bastante fiáveis, a reprogramação multihop é favorecida;
contudo, para redes que sejam lineares (ou próximo de lineares) a reprogramação
singe-hop tende a ser melhor.
35
O Infuse [33] é um protocolo fiável de disseminação que utiliza o TDMA como
estratégia de acesso ao meio. O Infuse utiliza comunicação multihop e permite: (i)
selecionar o algoritmo para lidar com a recuperação de erros inesperados
provenientes do canal de transmissão (e.g. erro na receção das mensagens,
variações da força do sinal); e (ii) especificar quando um nó deve ouvir um conjunto
de nós vizinhos de forma a reduzir o tempo de escuta. Baseado nas opções tomadas,
é possível obter quatro modos de operação do Infuse.
O OAP-SW [34] é apresentado pelos autores como sendo um protocolo que
utiliza características de pequeno mundo (Redes de pequeno mundo2) para
melhorar a reconfiguração da rede. Este protocolo cria atalhos dentro da rede até
aos nós que têm maior capacidade de processamento e utiliza-os na reprogramação.
Provou-se que os tempos de reconfiguração foram drasticamente reduzidos e que o
consumo energético da rede não foi consideravelmente afetado com o uso de um
pequeno conjunto de nós mais potentes.
O Gappa [35] é um protocolo epidémico multihop, onde alguns nós recebem
uma parte do novo código por um canal e transmitem aos vizinhos o que acabaram
de receber por um canal distinto. Ao explorar a comunicação por multi-canal e a
técnica de pipeline, o Gappa possibilita uma elevada concorrência em diferentes
canais e em diferentes localizações, permitindo assim uma rápida transmissão de
dados. Para reduzir as colisões em cada canal, o Gappa utiliza um algoritmo de
seleção de emissor multi-canal que tenta garantir que, em qualquer vizinhança, está
a transmitir no máximo um emissor de cada vez por canal. Durante este processo
existe uma tentativa de dar preferência aos emissores que tenham mais impacto na
rede. Se um emissor não conseguir transmitir num canal, pode tentar escolher outro
canal e, caso não consiga em nenhum, o nó deixa de enviar pedidos de autorização
da transmissão. Durante este tempo, o nó pode escolher receber o código, deixando
2 Redes de pequeno mundo: é um tipo de grafo matemático no qual grandes partes das conexões são estabelecidas
entre os vértices mais próximos, apresentando se como um mundo pequeno. Neste tipo de rede, a distância média entre
quaisquer dois vértices não ultrapassa um número pequeno de vértices.
36
para isso o seu módulo de comunicação ligado, ou desligado caso esteja a funcionar
só como emissor e tenha pouca bateria. Desta forma o Gappa diminui também o
tempo em que o módulo de comunicação de cada nó está ativo, diminuindo assim
o consumo energético durante a reprogramação.
O Multihop Over-the-Air Programming (MOAP) [36] é um mecanismo de
distribuição de código especialmente construído para os nós Mica-2. O MOAP foi
desenhado para ser eficiente ao nível da memória e da energia à custa do aumento
da latência. As escolhas no desenho foram baseadas em três áreas: protocolo de
disseminação, mecanismos de retransmissão e gestão de armazenamento dos
segmentos de código.
3.2.3.2 Estratégias baseadas na distribuição de diferenças entre imagens de
código
Esta abordagem tenta resolver os problemas inerentes ao envio de toda a
imagem do novo código. Neste caso, a estação base gera e envia um delta que
consiste nas diferenças entre o código que está instalado nos nós e o novo código
que se pretende colocar nos mesmos. Os nós recebem este delta e geram a nova
imagem de código com base na informação do próprio delta e do código que estão
a correr.
O Rsync [37] é um protocolo bem conhecido de atualizações incrementais
usado em computadores e servidores. O Rsync divide o programa em diferentes
blocos e calcula o valor de hash para cada um deles. Os valores calculados são
depois utilizados para determinar se se trata de uma inserção, eliminação ou
modificação de um bloco.
O Zephyr [38] é apresentado como sendo um protocolo de reprogramação
incremental. Neste protocolo, é enviado um delta para cada nó quando existe a
necessidade de uma atualização. Em [39], os autores do Zephyr apresentam o
Hermes, como sendo uma melhoria do Zephyr. Este protocolo reduz o tamanho do
37
delta utilizando técnicas para atenuar o efeito de mudanças em funções e variáveis
globais causadas pelas diferenças no código.
O R2 [40] reduz o tamanho do delta através da utilização eficiente de módulos
dinâmicos de loading e linking. No R2 são utilizados metadados que são enviados
para os nós de forma a eliminar a utilização de uma jump table (que é um requisito
no Hermes [39] e Zephyr [38]) e um bootloader complexo. Este protocolo foi
implementado no TinyOS 2.1 sendo comparado com o Deluge [4], o Zephyr e o
Hermes, onde mostrou uma redução no custo de transmissão de 65% quando
comparado com o Deluge e 20% quando comparado com o Zephyr e Hermes.
Através da utilização do delta, a quantidade de informação que é enviada para
a rede diminui consideravelmente. Contudo, a grande desvantagem deste tipo de
estratégia é que são executados algoritmos complexos e pesados nos nós para criar
a nova imagem de código com base no delta.
3.3 Sumário
Neste capítulo foram identificados e discutidos os principais desafios da
reprogramação remota nas RSSFs. Foram ainda identificados alguns trabalhos na
área da reprogramação remota das redes de sensores com base no tipo de
reprogramação que utilizam, tendo sido dado mais destaque aos trabalhos
relacionados que utilizam o mesmo tipo de reprogramação que o Deluge, ou seja,
a reprogramação ao nível do sistema.
No próximo capítulo são discutidos os detalhes de desenho e implementação
de um protocolo que permite a reprogramação seletiva de uma RSSF.
38
4. Desenho e Implementação do Protocolo
Este capítulo trata as questões de desenho e implementação de uma extensão
ao Deluge e DRIP. Numa primeira secção é feito um estudo sobre a forma como a
reprogramação é originalmente feita com o Deluge. Desta forma, são identificados
todos os componentes que são utilizados durante o processo de reprogramação
juntamente com o Deluge. Com base neste estudo prévio, na segunda secção são
discutidos os detalhes de desenho e implementação de uma extensão ao Deluge e
DRIP que funciona como um novo protocolo sempre que se pretende uma
reprogramação seletiva da rede.
4.1 Reprogramação com o Deluge
O primeiro passo para a construção de uma extensão ao Deluge que permitisse
uma reprogramação seletiva foi analisar e estudar o comportamento do próprio
Deluge. Este processo é fundamental, pois só assim é possível identificar as funções
e os componentes que necessitam ser alterados.
Esta secção é destinada à análise do funcionamento do Deluge e dos
componentes que este usa no processo de reprogramação.
4.1.1 Deluge 2.0
O Deluge é um protocolo epidémico que utiliza a interface rádio dos nós para
disseminar uma imagem de código (binário de uma aplicação) por toda a rede. Para
tal, o Deluge divide a imagem do código em páginas de tamanho fixo e cada página
num conjunto de pacotes a enviar, ver Figura 4.1. Combinando esta característica
com um bootloader e uma série de comandos que podem ser executados através
da estação-base, é possível reprogramar os nós com novas aplicações sem recorrer
ao método tradicional de ligação cablada.
39
A versão atual do Deluge suportada por defeito no TinyOS é a 2.0, e tem como
principal objetivo a fiabilidade e robustez. As plataformas que este protocolo suporta
nativamente são Telos B [41], Micaz [42], Epic [43], Iris [44] e TinyNode [45].
Figura 4.1:Segmentação da imagem de código no processo de disseminação da mesma.
O Deluge corre paralelamente à aplicação principal que está a ser executada em
cada nó. O processo para a aquisição de uma nova imagem de código ou parte dela
é o seguinte:
1. Os nós enviam periodicamente anúncios em broadcast contendo o
número da versão da imagem de código e a informação de que página
dessa imagem possuem. O tempo entre anúncios pode ser alterado para
conservar energia elétrica e largura de banda.
2. Quando um nó, através dos anúncios recebidos, determina que
necessita de fazer o upload de alguma parte da nova imagem, espera
um determinado período de tempo enquanto escuta todos os anúncios
dos vizinhos. Este tempo de espera permite que sejam utilizadas
heurísticas para escolher o melhor transmissor vizinho.
40
3. Quando o período de escuta termina, o nó envia um pedido ao vizinho
que foi escolhido indicando a página e as secções requeridas dentro
dessa página.
4. Quando o vizinho recebe um pedido deste género envia a informação
solicitada em broadcast.
5. Após o nó receber o último pacote que completa a página de código que
foi pedida, e antes de pedir o resto das páginas ao vizinho, este envia
um anúncio em broadcast sobre a nova página que acaba de receber.
Esta estratégia permite que seja utilizada multiplexagem espacial.
As imagens de código recebidas pelos nós são guardadas na sua memória
externa, em espaços denominados de volumes (volumes 0, 1, 2 e 3). Por defeito,
o Deluge está configurado para suportar no máximo 3 imagens de código ao mesmo
tempo, já que o volume 0 é reservado para a GoldenImage. Esta imagem de código
específica é uma aplicação disponibilizada pelo TinyOS que apenas possui o
Deluge, sendo utilizada para colocar o nó num estado que possa ser reprogramado
remotamente quando ocorrem falhas.
Quando os nós contêm as imagens corretas do código, o controlo da
reprogramação é feito através de um protocolo de disseminação para pequenas
quantidades de dados, denominado DRIP, que será explicado na secção seguinte.
4.1.2 Disseminação e o DRIP
A disseminação é um protocolo básico nas redes de sensores que tem como
objetivo entregar de forma fiável um conjunto de dados a todos os nós da rede. Este
protocolo permite alcançar a coerência de um valor de uma determinada variável
partilhada na rede. A variável partilhada pode ser de qualquer tipo, desde um
simples inteiro a uma estrutura de dados mais complexa. O serviço de disseminação
permite avisar os nós quando o valor dessa variável foi alterado e trocar pacotes,
denominados anúncios, de forma que esta informação chegue a todos os nós na
rede. Esta capacidade de entregar de forma fiável um conjunto de dados a todos os
41
nós da rede viabiliza tarefas de reconfiguração e reprogramação de uma rede de
sensores. Ao contrário dos protocolos epidémicos, que apenas têm a preocupação
de fazer chegar a informação a toda a rede não garantindo que todos os nós a
receberam corretamente, nos protocolos de disseminação é garantido que todos os
nós vão eventualmente receber a informação correta. Isto é feito através da troca
regular de anúncios que permitem a deteção dos nós que não possuam a
informação pretendida.
Dependendo da quantidade de dados, os protocolos de disseminação
diferenciam-se no seu modo de operação. Disseminar de forma eficiente dezenas
de kBytes requer um protocolo diferente de uma situação em que apenas se
pretende disseminar um inteiro de 2 Bytes. Assim, os protocolos de disseminação
podem ser divididos em dois tipos consoante o tamanho das unidades que estão a
disseminar, sendo referidos como tráfego de controlo, e tráfego de dados [46]. Ao
contrário do que acontece no tráfego de dados, onde o tamanho dos dados varia
consideravelmente, no tráfego de controlo os dados tendem a ser do mesmo
tamanho.
O TinyOs oferece diferentes tipos de protocolos de disseminação para tráfego de
controlo, sendo um deles o DRIP. Este protocolo é utilizado pelo Deluge na
reprogramação da rede.
Neste tipo de disseminação de tráfego de controlo, podem existir várias variáveis
partilhadas na rede, onde os valores de cada uma são envidados em anúncios
identificados por um par Chave/Número de Sequência. A Chave identifica a variável
partilhada e o Número de Sequência a versão do valor que está a ser disseminado.
Devido à pouca memória RAM dos nós nas redes de sensores, o DRIP, tal como os
outros protocolos de disseminação do TinyOS, apenas propaga o valor com a versão
mais atual. A disseminação é controlada por um algoritmo chamado Trickle [47],
que gere a quantidade de anúncios feitos por um nó ao longo do tempo. De uma
forma simples, o Trickle oferece uma gestão de anúncios através de um
temporizador que assinala quando deve ser feito um anúncio. O intervalo de tempo
definido pelo temporizador vai aumentando sempre que é enviado um anúncio ou
42
o nó recebe de um vizinho um anúncio com a mesma versão do que está a anunciar.
Desta forma, um nó começa a anunciar o novo valor mas deixa de o fazer quando
recebe dos vizinhos o mesmo anúncio. Isto faz com que exista um grande número
de anúncios numa fase inicial da disseminação. Porém, ao longo do tempo a rede
vai convergindo para um estado de manutenção, onde apenas alguns anúncios são
feitos ao longo do tempo. Quando existir um valor mais atual a ser disseminado,
todo o processo recomeça sabendo que os valores a disseminar não podem exceder
o tamanho máximo de um pacote. No TinyOS, o Trickle é implementado através de
um TimerTrickle, sendo que no DRIP cada variável partilhada tem o seu próprio
TimerTrickle que gere a disseminação dos seus valores.
O Deluge utiliza o DRIP de forma a alcançar todos os nós da rede, para que
estes executem uma determinada tarefa, como, por exemplo, uma reprogramação.
A Figura 4.2 apresenta a estrutura do pacote utilizado na reprogramação do Deluge.
Os primeiros 6 Bytes dizem respeito ao protocolo DRIP, onde os dois primeiros Bytes
correspondem à Chave e os outros 4 Bytes ao Número de Sequência. Os restantes
10 Bytes dizem respeito a dados de reprogramação do Deluge, onde o 1 Byte
identifica a ação a ser executada no nó e os restantes 9 Bytes identificam
inequivocamente a aplicação a que a ação diz respeito. As ações a serem
executadas podem ser a de disseminação de uma aplicação ou a de disseminação
e reprogramação. Na primeira, quando um nó recebe um anúncio verifica se possui
a aplicação que deve disseminar, utilizando para isso a informação sobre aplicação
contida no anúncio recebido. Caso este não possua a aplicação correta, pede ao
vizinho que fez o anúncio para lhe enviar a aplicação para que este a possa depois
disseminar para outros nós. Na ação de disseminar e reprogramar o processo é o
mesmo que o anterior, no entanto, o nó reprograma-se imediatamente após ter a
aplicação correta
O Deluge permite apenas reprogramação total da rede garantindo que
eventualmente todos os nós vão receber a ordem do utilizador. Os nós que possam
estar desconetados da rede, quando voltarem a ter conetividade, podem
43
eventualmente receber um anúncio atualizado de um vizinho graças ao estado de
manutenção do DRIP.
Figura 4.2: Estrutura do pacote enviado por defeito pelo Deluge [5].
4.1.3 TosBoot
O Deluge por si só não é capaz de reprogramar o microcontrolador com uma
imagem guardada na memória externa. Para tal, é utilizado o bootloader do TinyOS,
ou seja, o TosBoot [48], que possui um conjunto de mecanismos que tornam este
processo possível.
O TosBoot é um programa independente que só pode ser instalado no nó através
de uma ligação com cabo e é sempre executado quando o nó sai do estado de reset,
ou seja, quando este se liga. O fato de ser um programa independente significa que
nenhum estado não-volátil deixado pelo microcontrolador antes de este ter sido
reiniciado vai afetar a sua execução. Desta forma, todos os parâmetros passados ao
TosBoot são passados através de memória não-volátil, garantindo assim um correto
funcionamento mesmo quando o nó tem uma falha de energia quando está a iniciar.
Os parâmetros passados ao TosBoot incluem: (i) o número de interrupções
consecutivas ao correto arranque do TosBoot; (ii) se existe necessidade de
programar o microcontrolador; e (iii) a localização na memória externa da imagem
de código com a qual se deve reprogramar o microcontrolador.
É possível ver quando o TosBoot está instalado no nó através de uma contagem
decrescente sinalizada por LEDs (caso existam) sempre que o nó é iniciado. Quando
44
a contagem decrescente termina, o TosBoot verifica se deve reprogramar o
microcontrolador. Caso isso se verifique, este apaga a memória interna do
microcontrolador que corre a aplicação e de seguida escreve a nova imagem,
copiando a aplicação pretendida da memória externa para a memória interna do
microcontrolador. Quando este processo termina, é feito um reset ao bit responsável
por assinalar a necessidade de reprogramação e o TosBoot passa para o seu estado
inicial. O funcionamento do TosBoot está representado na Figura 4.3. Durante este
processo, o TosBoot faz um conjunto de procedimentos para proteger o nó de um
possível conjunto de falhas, tais como:
1. É verificado se a corrente elétrica que a bateria fornece ao
microcontrolador está acima de um determinado valor. Isto é feito pois
muitos microcontroladores necessitam de um determinado nível de
corrente para se reprogramarem corretamente.
2. É efetuada a deteção de erros da imagem (método CRC3) antes de ser
feita a reprogramação. Caso seja detetado algum erro, o TosBoot aborta
o processo de reconfiguração e o nó é iniciado normalmente.
3. O endereço de memória é sempre verificado antes de se reprogramar o
microcontrolador, para que o TosBoot não comece a reescrever por cima
do seu próprio código. Apesar de alguns microcontroladores oferecerem
zonas da memória protegidas contra a escrita, existem alguns que não
oferecem esta funcionalidade, pelo que esta verificação é sempre
necessária.
4. Caso exista um erro enquanto a programação do microcontrolador está a
decorrer, o TosBoot irá tentar mais algumas vezes. Caso o erro persista,
o TosBoot vai tentar reprogramar o microcontrolador com a GoldenImage,
de forma que este passe para um estado em que possa ser reprogramado
remotamente.
3 Cyclic Redundancy Check: método para identificação de erros nos bits transmitidos.
45
Figura 4.3: Fluxograma de funcionamento do TosBoot.
4.1.4 Tos-Deluge
A partir do momento que os nós estão a correr o Deluge, é possível utilizar um
script em Python chamado Tos-Deluge que corre no PC e que permite ao utilizador
controlar todo o processo de reprogramação. Para isto ser possível é necessário ter
um nó diretamente ligado à máquina que corre o script, sendo denominado de
“estação-base”. A estação-basse corre um programa que apenas contém o Deluge
com a opção de estação base ativada, permitindo que este receba comandos pela
interface de comunicação série. A sua principal função é receber as instruções do
utilizador através do Tos-Deluge e funcionar como gateway entre este e a rede.
46
O script Tos-Deluge permite gerir as aplicações que estão nos volumes da
estação base permitindo ao utilizador injetar ou apagar uma imagem de código de
um dos volumes. As imagens de código são criadas após uma compilação feita com
sucesso, e ao código da aplicação é adicionado um conjunto de metadados
incluindo: nome da aplicação, data de compilação, ID do utilizador que realizou a
compilação, o tamanho e a plataforma para qual a aplicação foi desenvolvida, etc.
Esta informação é enviada juntamente com a imagem de código e é geralmente
utilizada para identificar a aplicação. Depois de as imagens de código estarem
corretamente colocadas nos volumes da estação base, o Tos-Deluge permite ao
utilizador controlar o processo de reprogramação da rede através das ações:
disseminar; disseminar e reprogramar; e parar a disseminação.
4.1.5 Análise e discussão
O Deluge utiliza o Tos-Deluge, o DRIP e o TosBoot com o objetivo de tornar o
processo de reprogramação dos nós o mais simples e transparente possível. O Tos-
Deluge, juntamente com a estação base, permite ao utilizador controlar a
reprogramação através de um conjunto de comandos. O DRIP é utilizado para
garantir que as ordens dadas pelo utilizador chegam a todos os nós da rede. O
TosBoot é responsável pela reprogramação do nó, copiando a aplicação da memória
externa para a memória flash do microcontrolador. Desta forma, é possível verificar
que a reprogramação remota dos nós oferecida pelo Deluge só é possível devido à
utilização de outros componentes como o Tos-Deluge, o DRIP e o TosBoot,
conforme indicado na Figura 4.4.
Como já foi dito, o do Deluge encara a rede como sendo uma única unidade,
ou seja, as ordens dadas pelo utilizador através da estação base vão afetar todos os
nós de igual modo, sem diferenciação. Outro especto a realçar é o fato de o Deluge
não oferecer nenhuma informação de estado sobre a reprogramação garantindo
apenas que eventualmente todos os nós vão ser reprogramados graças ao estado de
manutenção do DRIP.
47
Figura 4.4: Componentes utilizados pelo Deluge na reprogramação remota.
4.2 Discussão e Implantação de uma extensão ao Deluge
4.2.1 Planeamento da solução
Para possibilitar a reprogramação seletiva é necessário identificar os nós que se
pretende reprogramar e fazer chegar esta informação aos mesmos. Num cenário
onde não existiu nenhum planeamento na identificação específica de um conjunto
de nós (e.g. utilização de endereços de grupo) a pensar na reprogramação, a única
forma de selecionar um determinado nó é utilizando algo que o identifique
inequivocamente. O uso do identificador do nó (NodeID) é uma dessas formas, daí
ser utilizado no protocolo proposto para identificar o nó que se pretende
reprogramar. Para se reprogramar um conjunto específico de nós é necessário
adicionar à informação referente à aplicação que deve ser utilizada na
reprogramação, a lista de NodeIDs que devem executar esta operação. Esta
informação deve ser tratada cuidadosamente devido às limitações no tamanho dos
48
pacotes. Como já foi dito, no DRIP a informação que se pretende disseminar não
deve exceder o tamanho máximo do conteúdo de um pacote. Por defeito, o TinyOS
define o tamanho máximo do conteúdo de um pacote como sendo de 28 Bytes,
mas dependendo da plataforma este tamanho pode ser estendido até ao limite
máximo permitido pela norma IEEE 802.15.4. Assim sendo, para reprogramar
seletivamente um nó seria necessário adicionar ao conteúdo do pacote da Figura 1
a lista de nós a serem reprogramados. Atendendo ao tamanho do conteúdo do
pacote pode-se verificar que apenas restam 12 Bytes livres para a lista de NodeIDs,
caso o tamanho do conteúdo seja o utilizado por defeito (28 Bytes). Cada NodeID
ocupa 2 Bytes, pelo que, apenas se poderiam reprogramar seletivamente um
máximo de seis nós. Como é óbvio, a possibilidade de reprogramar seletivamente
apenas seis nós tornaria inviável a reprogramação seletiva, visto que o número de
nós nas redes de sensores é por norma mais elevado. Dadas estas limitações do
DRIP duas abordagens podem ser consideradas: (i) utilizar o tamanho padrão do
pacote e reprogramar seletivamente seis nós de cada vez, esperando que os
primeiros seis se reprogramem para depois voltar a disseminar nova ordem com
mais seis nós e assim sucessivamente até que todos os nós pretendidos sejam
reprogramado; e (ii) aumentar o tamanho do pacote para o valor máximo suportado
pelas plataformas que funcionam com o Deluge. No respeitante à primeira
abordagem, um dos potenciais problemas imediatos seria o longo período de tempo
que demoraria a reprogramação, visto que seria necessário esperar e ter a certeza
que o primeiro pacote chegou a todos os nós da rede para se iniciar a disseminação
do segundo pacote e assim sucessivamente. Outro grande problema seria o grande
aumento de informação irrelevante a circular na rede, visto que, no conteúdo de
cada pacote enviado após o primeiro, apenas a lista de nós não seria informação
redundante, pois a informação sobre a aplicação seria sempre a mesma.
Relativamente à segunda abordagem, referente ao aumento do tamanho máximo
do conteúdo dos pacotes a enviar, o número máximo de nós que se poderiam
reprogramar seletivamente continuaria limitado, além de que esta alteração no
tamanho do pacote seria feita para todas as comunicações do nó podendo, por
49
ventura, interferir com outras aplicações que já estivessem a correr na rede e não
utilizassem o Deluge.
Assim sendo, nenhuma das abordagens mais diretas ao problema permitem
uma reprogramação seletiva eficiente e generalizada para todos os cenários. Desta
forma, optou-se pela construção de uma extensão ao protocolo DRIP e do Deluge.
Esta extensão funciona como um novo protocolo sempre que é utilizada a
reprogramação seletiva.
O primeiro passo na construção do novo protocolo foi criar dois tipos de pacotes
distintos, que permitissem conciliar o funcionamento normal do Deluge com a
reprogramação seletiva, conforme indicado na Figura 4.5. As denominações de DE
e DF são para uma melhor identificação ao longo da dissertação, e dizem respeito
ao fato de estes serem os valores hexadecimais da Chave de cada pacote. Como se
pode verificar pela Figura 4.5, o pacote DE diz respeito ao pacote originalmente
enviado na reprogramação, mas com algumas alterações ao seu conteúdo. Estas
alterações passam pelo acréscimo de 1 Byte utilizado para identificar o tipo de
reprogramação, 1 Byte para indicar o tamanho da lista de nós que está a ser enviada
no pacote e os restantes 10 Bytes dizem respeito aos NodeIDs. Relativamente ao
pacote DF, este foi criado para transportar apenas os NodeIDs em excesso que não
podem ser transportados no pacote DE, servindo apenas para sustentar a
reprogramação seletiva. Neste pacote, os primeiros 6 Bytes são utilizados pelo DRIP
tal como acontece no pacote DE, sendo que no restante conteúdo o primeiro Byte é
utilizado para identificar o pacote, o segundo Byte diz respeito ao número de
NodeIDs transportados no mesmo, e os restantes Bytes são usados para os NodeIDs
dos nós que se pretendem reprogramar. Cada pacote DF pode transportar no
máximo dez NodeIDs, podendo ser criados tantos pacotes quantos os necessários
para acomodar toda a lista de NodeIDs que o utilizador pretende reprogramar.
50
Figura 4.5: Pacotes criados para a reprogramação seletiva [5].
4.2.2 Detalhes da implementação
Um dos principais requisitos a ter em conta na construção de uma extensão ao
Deluge que permita a reprogramação seletiva, é garantir compatibilidade com o
funcionamento original do mesmo. Desta forma, tanto o DRIP como o Deluge
deveriam funcionar de igual modo sempre que não fosse utilizada a reprogramação
seletiva. Aliado a este fator, a solução encontrada deverá ter o menor impacto
possível no tráfego da rede e oferecer um elevado grau de fiabilidade.
Assim sendo, com o protocolo criado é possível reprogramar a rede de duas
formas, sendo elas: a reprogramação de toda a rede suportada por defeito pelo
Deluge e a reprogramação seletiva através do tipo plataforma ou do NodeID. O tipo
de reprogramação é identificado pelo parâmetro ReprogramType permitindo aos nós
efetuar os devidos procedimentos consoante o tipo de reprogramação pretendida.
51
Um dos grandes desafios na construção do novo protocolo foi o fato de o TinyOS
ser um sistema operativo assente na linguagem NesC, que apresenta um grande
nível de modularidade em virtude do código ser formado por vários componentes.
Este fator aliado à falta de comentários no código complicou a tarefa de identificação
dos componentes que teriam de ser alterados, o que obrigou a um estudo
pormenorizado do funcionamento do Deluge. A Figura 4.6 mostra todos os
componentes de código que foram alterados e criados de forma a tornar possível a
reprogramação seletiva.
Figura 4.6: Componentes de código alterados (indicado a vermelho) e criados (indicado a verde).
4.2.2.1 Reprogramação Seletiva através da Plataforma
Numa reprogramação seletiva por plataforma são apenas reprogramados os nós
que partilham o mesmo tipo de plataforma de funcionamento. Este processo utiliza
52
apenas pacotes DE onde o ReprogramType especifica qual a plataforma que deve
efetuar a reprogramação. Neste caso, é utilizado o funcionamento normal do DRIP
para disseminar a informação para toda a rede. Quando os nós recebem este pacote,
a aplicação que corre no nó verifica que tipo de reprogramação se trata, e neste
caso, apenas os nós cuja plataforma é a indicada pelo ReprogramType iniciam a
sua reprogramação. Para que uma aplicação seja capaz de identificar a plataforma
onde está a correr foi necessário alterar o processo de compilação da mesma. Desta
forma, na altura da compilação a informação da plataforma é colocada numa
constante que pode ser acedida em tempo de execução pela própria aplicação. A
Figura 4.6 ilustra os dois componentes de código que foram alterados para satisfazer
o objetivo proposto.
A alteração consiste em utilizar as diretivas do compilador nesC quando uma
aplicação é compilada, para identificar de que plataforma se trata. Como exemplo,
sendo a plataforma Telosb, quando o utilizador compila a aplicação através o
comando “make telosb” (o target é “telosb”), é colocado um valor inteiro que
corresponde a esta plataforma numa constante chamada TOS_PLATFORM. Esta
constante pode depois ser acedida pela aplicação em tempo de execução durante o
processo de reprogramação.
4.2.2.2 Reprogramação Seletiva através do NodeID
Quando o utilizador pretende uma reprogramação seletiva através do NodeID, é
sempre utilizado um pacote DE onde o ReprogramType indica que se trata de uma
reprogramação seletiva através do NodeID, significando que será enviada a lista de
NodeIDs a serem reprogramados. Caso a lista de NodeIDs seja maior do que cinco,
significa que não cabem todos num pacote DE e o excesso será colocado em pacotes
DF. Cada pacote DF será identificado por um identificador único (PacketID), de
forma a diferenciar os pacotes com diferentes conteúdos, e será atribuído um
Número de Sequência no cabeçalho do DRIP igual ao Número de Sequência do
pacote DE. Isto permite relacionar os pacotes DF com o pacote DE correspondente
53
que possui a informação sobre a aplicação com a qual os nós se devem
reprogramar. Da mesma forma, este procedimento garante que nenhum pacote DF
com Número de Sequência diferente do último pacote DE recebido será levado em
consideração. Esta operação de empacotamento é realizada na estação-base
conforme indicado na pela Figura 4.7.
No funcionamento normal do DRIP, um pacote que seja recebido com o mesmo
Número de Sequência do anterior é considerado duplicado, sendo descartado e
levando ao incremento do TimerTrickle. Desta forma, pacotes DF que possuíssem o
mesmo Número de Sequência mas conteúdos diferentes seriam descartados, pois
só o primeiro pacote a chegar seria considerado válido enquanto os outros seriam
considerados duplicados. Para que a reprogramação seletiva através do NodeID
fosse possível, foi necessário alterar o modo de funcionamento do DRIP quando é
utilizado pelo Deluge. Desta forma, foi criado um gestor de pacotes DF que corre
em cada nó e é responsável por gerir e diferenciar pacotes DF com informação
relevante dos pacotes duplicados. Quando um pacote DF é recebido por um nó, o
seu PacketID é verificado de forma a verificar se já foi rcebido um pacote igual. Caso
o pacote recebido seja o primeiro, o seu conteúdo é guardado e é iniciado um
TimerTrickle para gerir a disseminação deste pacote. Caso o pacote recebido seja
duplicado, isso significa que já existe um TimerTrickle a correr e, portanto, este é
incrementado. Para cada pacote armazenado, seja do tipo DE ou DF, é verificado
se o NodeID do nó que recebeu o pacote consta da lista de NodeIDs a serem
reprogramados, e caso isso se confirme o nó inicia a sua reprogramação. Sempre
que um nó recebe um pacote DE com um Número de Sequência superior ao do
pacote DE que este tem guardado, todas as disseminações de pacotes DE e DF com
Número de Sequência inferior são interrompidas. No caso de o ReprogramType do
pacote DE recebido indicar que se trata de uma reprogramação seletiva através dos
NodeIDs, o gestor de pacotes DF prepara-se para receber os novos pacotes DF
iniciando novamente todo o processo.
54
É de salientar que com esta alteração ao funcionamento do DRIP é possível
disseminar ao mesmo tempo vários pacotes com a mesma Chave mas conteúdos
diferentes, havendo para cada pacote uma gestão individual da sua disseminação.
Figura 4.7: Processo de empacotamento na estação base [5].
4.2.3 Otimização do protocolo
À medida que a reprogramação dos nós vai acontecendo, a lista de nós a
reprogramar vai ficando desatualizada, pois contém NodeIDs de nós que já se
reprogramaram. De forma a diminuir a redundância da informação relativamente à
lista de NodeIDs que circula durante o processo de disseminação e reprogramação,
cada nó reprogramado com sucesso retira o seu NodeID da lista de nós a
55
reprogramar. Assim sendo, na próxima vez que um nó reprogramado enviar um
anúncio aos nós vizinhos, a lista de NodeIDs a reprogramar será menor pois já não
consta o seu NodeID. Um nó vizinho sempre que recebe um pacote, seja do tipo
DE ou DF, que possua uma lista de NodeIDs menor do que a do pacote que está a
disseminar, este automaticamente atualiza a lista de NodeIDs do pacote que tem
guardado. Desta forma, na próxima vez que o nó enviar o pacote que tem guardado,
a sua lista de NodeIDs já está atualizada. Para isto ser possível foi necessário alterar
o DRIP para que este suporte a disseminação de pacotes com tamanhos diferentes.
Desta forma, à medida que diminui a lista de NodeIDs também diminui o tamanho
dos pacotes, reduzindo tanto os custos energéticos associados à transmissão como
o volume de tráfego na rede.
De forma a garantir que a rede converge rapidamente para a disseminação da
lista de NodeIDs atualizada, é dada prioridade na transmissão aos nós que têm
informação mais relevante, ou seja, é dada prioridade aos nós que se reprogramam
e retiram o seu NodeID da lista de nós a reprogramar. A prioridade é dada através
da manipulação da incrementação ou não do TimerTrickle. Isto permite diminuir o
número de pacotes com informação desatualizada o mais rápido possível. Na Figura
4.8, está representado o processo de reprogramação seletiva bem como o conteúdo
dos pacotes trocados durante a mesma. A topologia da rede é também apresentada
no painel 0 da Figura 4.8 mostrando a disposição dos nós e o alcance dos seus
sinais de rádio. A Figura 4.9 apresenta o processo de reprogramação no nó.
57
Figura 4.9: Processo de reprogramação seletiva no nó [5].
No funcionamento normal do Deluge o intervalo entre anúncios vai
aumentando, contudo estes anúncios nunca deixam de ser realizados devido ao
estado de manutenção do DRIP. Isto acontece pois pretende-se que nós, que por
qualquer razão ficaram sem conetividade com a rede, quando a retomarem, sejam
informados da ordem de reprogramação ou disseminação dada pelo utilizador. Na
reprogramação seletiva, pretende-se que um conjunto específico de nós se
reprograme, e portanto, quando esse objetivo for alcançado, não há necessidade de
existir mais tráfego na rede relativo á ordem de reprogramação. Este aspeto não se
verifica no funcionamento normal do Deluge.
58
Contudo, para que se possa parar a disseminação de pacotes DF e DE é
necessário saber quando todos os nós se reprogramaram e fazer chegar esta
informação a toda a rede. Assim sendo, como já foi dito, no protocolo criado a lista
de NodeIDs vai diminuindo conforme os nós se vão reprogramando. Desta forma, o
último nó da lista que se reprogramou deve assinalar o fim da disseminação do
pacote onde estava contido o seu NodeID. Se o NodeID do último nó que se
reprogramou chegou num pacote DE, o nó utiliza o parâmetro ReprogramType para
assinalar fim da disseminação. Caso o seu NodeID tenha chegado dentro de um
pacote DF, este apenas retira o seu NodeID da lista e o fim da disseminação é
assinalado por uma lista de NodeIDs com tamanho zero. A razão de no pacote DE
ser utilizado o ReprogramType para assinalar o fim da disseminação, deve-se a
questões de eficiência. De fato, caso se utilizasse o parâmetro ListLentgh como
acontece nos pacotes DF, este implicaria o acréscimo de um Byte ao conteúdo do
pacote.
Um nó apenas retira o seu NodeID da lista de NodeIDs a reprogramar caso se
tenha reprogramado com sucesso. Esta preocupação assegura ao utilizador e aos
restantes nós da rede uma informação de estado fiável sobre o desenrolar da
reprogramação seletiva.
4.2.4 Modo de atualização
Para que a informação do fim da disseminação de um determinado pacote
chegue a toda a rede de forma eficiente, cada nó apenas pode transmitir este tipo
de pacote uma vez, entrando depois em modo de atualização. É de salientar que a
retransmissão é feita em broadcast e não existem retransmissões em caso de perdas.
Caso um nó intermédio receba um segundo pacote a assinalar o fim da
disseminação antes de ter feito a retransmissão do mesmo, este não envia nenhum
pacote e entra logo em modo de atualização. O fato de um nó poder retransmitir
uma vez o pacote de fim de disseminação e não passar diretamente para o modo
de atualização permite que numa rede multihop esta informação possa chegar mais
rapidamente aos nós mais distantes. Quando um nó está em modo de atualização,
59
este só envia o pacote a indicar o fim da disseminação caso se aperceba que um
vizinho está desatualizado e ainda não sabe que determinado pacote DE ou DF já
não precisa ser disseminado. Mesmo nas situações em que vários nós se apercebam
que um vizinho está desatualizado, apenas um responde com o pacote assinalando
o fim da disseminação. Um nó apercebe-se que um vizinho está desatualizado pois
recebe dele um pacote com ReprogrmType diferente do número decimal onze (nos
pacotes DE) ou um ListLength diferente do número decimal 0 (nos pacotes DF).
Um nó pode estar desatualizado por variadas razões, sendo uma delas a perda de
conetividade com a rede fazendo com que este não estivesse a par do processo de
reprogramação.
A Figura 4.10 representa um cenário em que toda a rede se reprogramou com
sucesso, sendo o nó 4 o último a se reprogramar, e portanto, é a ele que cabe a
responsabilidade de assinalar o fim da disseminação. Para tal, o nó 4 envia o pacote
P4 aos vizinhos em broadcast a assinalar o fim da disseminação e entra em modo
de atualização. Tanto o nó 5 como o nó 3 recebem esta notificação do nó 4, e como
já foi dito, sempre que um nó recebe um anúncio a assinalar o fim da disseminação
de um pacote, este deve retransmiti-lo. Neste caso, o nó 3 foi o primeiro a
retransmitir o pacote. Como o envio é em brodcast todos os seus vizinhos vão
receber esta notificação, o que no caso do nó 5 vai fazer com que este passe
diretamente para o modo de atualização. O processo repete-se até que todos os nós
estejam em modo de atualização. No cenário 5 o nó 7, que se encontra
desatualizado, envia um pacote aos seus vizinhos. Como todos os vizinhos já se
encontram em modo de atualização um deles, neste caso o nó 5, vai atualizar o nó
7 enviando um pacote P4. O nó 3 ao receber o pacote P4 vai cancelar a atualização
que iria fazer ao nó 7. Antes de passar ao modo de atualização o nó 7 faz a
retransmissão do pacote P4 como esperado.
60
Figura 4.10: Fim do processo de disseminação na Reprogramação Seletiva e o modo atualização
[5].
4.3 Sumário
Neste capítulo foram abordados os detalhes de desenho e implementação de
um protocolo que possibilita a reprogramação seletiva de uma RSSF. Para tal,
analisou-se a forma como a reprogramação é originalmente executada pelo Deluge,
identificando todos os componentes que este utiliza, nomeadamente o DRIP, o
TosBoot e o Tos-Deluge. Com base nesta análise foi planeada uma solução que
permite a reprogramação seletiva de uma rede de sensores, sendo especificados os
detalhes de implementação relativamente: (i) reprogramação seletiva por tipo de
plataforma ou NodeID; (ii) questões te otimização do protocolo; e (iii) modo de
atualização.
O próximo capítulo diz respeito aos testes efetuados ao protocolo criado, bem
como à análise e discussão dos resultados.
61
5. Resultados e discussão
Neste capítulo é feita uma descrição do cenário de testes utilizado,
nomeadamente a topologia, componentes e metodologia adotada. De seguida são
apresentados os resultados sendo feita uma análise e discussão dos mesmos. Por
fim, é feita uma análise final ao protocolo testado onde são realçadas algumas das
suas características de funcionamento de maior relevância.
5.1 Cenário de testes
Como cenário de testes utilizou-se uma topologia em malha completa, com
quatro nós Telosb e dois nós MicaZ. Neste tipo de topologia todos os nós da rede
estão ligados diretamente entre si, existindo uma ligação ponto-a-ponto entre cada
nó e os demais. A opção de uma topologia deste tipo deveu-se ao fato de existirem
poucos nós disponíveis para a construção de um cenário multihop.
O cenário experimental está representado na Figura 5.1, onde se pode verificar
que se encontram dois TelosB ligados ao PC: um é utilizado como estação base
enquanto o outro é usado como sniffer para fazer a captura dos pacotes que
circulam na rede. A estação base também comunica com todos os nós da rede à
distância de um salto. O TelosB utilizado para captura de tráfego corre uma
aplicação que funciona como gateway entre a rede e o PC, ou seja, faz o
encaminhamento dos pacotes que são captados pelo recetor de rádio para a porta
série do PC.
62
Figura 5.1:Cenário experimental.
O TinyOS disponibiliza uma aplicação chamada Listen.java que permite mostrar
na linha de comandos o conteúdo dos pacotes que são recebidos na porta série
através do gateway descrito anteriormente. Alterou-se esta aplicação para que fosse
possível filtrar os pacotes relativos à reprogramação. A informação sobre o conteúdo
dos pacotes é depois colocada num ficheiro juntamente com a informação temporal
de quando estes foram recebidos, criando assim um ficheiro de registo de dados
(vulgo “log de dados”) relativo ao processo de reprogramação, Figura 5.2. O
processo de filtragem é feito com base nos primeiros 4 Bytes do conteúdo de cada
pacote, que devem corresponder ao valor das Chaves hexadecimais do DRIP
utilizadas na reprogramação. Desta forma, apenas os pacotes com as Chaves DE e
DF são filtrados e colocados num ficheiro específico juntamente com a informação
temporal de quando foram recebidos.
63
Figura 5.2: Fluxograma da aplicação alterada para a criação dos ficheiros de log de dados.
5.2 Testes e análise de resultados
Foram realizados vários testes ao processo de reprogramação seletiva em
diferentes situações de forma a verificar se o comportamento do protocolo
desenvolvido era o espectável. É de salientar que os testes dizem respeito ao
processo de reprogramação depois de todos os nós possuírem as diferentes imagens
de código nos seus volumes de armazenamento.
64
Utilizou-se a ferramenta Gnuplot [49] no tratamento dos dados contidos nos
ficheiros de registo, nomeadamente na geração dos gráficos ilustrativos do processo
de reprogramação.
5.2.1 Reprogramação através do tipo de plataforma
Começou-se por analisar o processo de reprogramação da rede quando é
utilizado o Deluge na sua forma original. A Figura 5.3 representa o número de
pacotes relativos à reprogramação que circulam na rede durante 2 minutos. Foi
definido o intervalo de tempo de 2 minutos visto que não afeta os resultados obtidos,
nem prejudica a resolução temporal do gráfico. Como já foi referido, a disseminação
das ordens do Deluge é feita através do DRIP. Desta forma, seria expectável uma
grande quantidade de pacotes no início da reprogramação indo diminuindo
gradualmente até chegar a um estado onde apenas alguns pacotes são enviados
esporadicamente (estado de manutenção do DRIP). Este comportamento pode ser
verificado na Figura 5.3 a partir dos 10 segundos. Antes deste tempo, existe uma
grande quantidade de pacotes a serem enviados mas apenas nos primeiros 3
segundos existindo depois um período de aproximadamente 7 segundos onde
apenas um pacote é enviado. Isto acontece porque mal os primeiros pacotes são
enviados pela estação base, os nós iniciam a sua reprogramação e só depois de se
reprogramarem é que começam novamente o processo de disseminação.
No segundo teste foi utilizado uma reprogramação seletiva através do tipo de
plataforma. A plataforma selecionada para a reprogramação foi o TelosB. Como o
funcionamento do DRIP neste tipo de reprogramação é o mesmo de quando é
utilizada a reprogramação original do Deluge, o processo de disseminação é
portando muito semelhante, como pode ser constatado pela Figura 5.4. A única
diferença é que apenas os nós TelosB se vão reprogramar.
65
Figura 5.3:Distribuição temporal dos pacotes na reprogramação com o Deluge original.
Figura 5.4: Distribuição temporal dos pacotes na reprogramação seletiva por plataforma.
66
5.2.2 Reprogramação através do NodeID
Os gráficos relativos à reprogramação seletiva por NodeID mostram não só os
pacotes que circulam na rede durante o processo de reprogramação, mas também
dados adicionais como a origem do pacote, tamanho e conteúdo da lista de
NodeIDs. Estas informações são necessárias para se poder validar o correto
funcionamento do protocolo criado.
Inicialmente realizou-se uma reprogramação seletiva dos nós 5, 55 e 7, sendo
recolhidos os pacotes relativos à reprogramação durante 40 segundos, ver Figura
5.5. Neste teste foi definido o intervalo de tempo de 40 segundos visto que não
afeta os resultados obtidos, nem prejudica a resolução temporal do gráfico. Foram
utilizados pacotes DE na reprogramação. Como se pode verificar pela figura, a
disseminação inicia-se tal como previsto, ou seja, com um grande número de
pacotes a serem enviados numa primeira fase da reprogramação (primeiros 5 seg.).
Inicialmente os pacotes contêm toda a lista de NodeIDs a serem reprogramados e
não existe nenhum pacote enviado por um nó que seja alvo da reprogramação. Isto
acontece, pois os primeiros pacotes enviados pela estação base iniciam de imediato
a reprogramação dos nós alvo, impossibilitando portanto que estes participem na
fase inicial da disseminação. Assim que a reprogramação dos nós alvo é concluída
com sucesso, sempre que estes nós recebem um pacote retiram o seu NodeID da
lista, caso esta ainda não esteja atualizada. Isto provoca uma diminuição gradual
da mesma, até que o último nó da lista retira o seu NodeID e anuncia o fim da
disseminação. Como se pode verificar pela Figura 5.5, o nó 5 foi o que anunciou o
fim da disseminação. Como já foi referido anteriormente, quando um nó recebe a
informação do fim da disseminação deve retransmitir o pacote uma vez e entrar em
modo de atualização. Pode-se verificar que esta situação acontece
aproximadamente aos 15 segundos, quando um nó faz a retransmissão do pacote
que anuncia o fim da disseminação. Apenas um nó faz esta retransmissão, pois
este pacote vai chegar a todos os nós da rede fazendo com que entrem de imediato
em modo de atualização.
67
Outro aspeto importante que se pode verificar pela Figura 5.5 é que a partir dos
14 segundos, os nós alvo da reprogramação assumem o destaque no processo de
disseminação. Isto deve-se ao fato de que os nós alvo ao retirarem o seu NodeID
da lista de NodeIDs a reprogramar, passam a ter uma lista de NodeIDs mais
atualizada, e, portanto, antecipam-se no envio dos pacotes ganhando prioridade na
comunicação sobre os vizinhos.
Repetiu-se o mesmo teste mas com a lista de nós a reprogramar inserida num
pacote DF, ver Figura 5.6. Como o cenário de testes tem poucos nós (apenas 6)
utilizaram-se NodeIDs fictícios de forma a preencher um pacote DE e colocar os
NodeIDs 5, 55 e 7 num pacote DF. Como era esperado, o processo de
reprogramação e disseminação através do pacote DF tem um comportamento
similar ao processo de reprogramação com pacotes DE que é ilustrado na Figura
5.5. No entanto, a Figura 5.6 permite constatar que pacotes DF e DE enviados ao
mesmo tempo têm um processo de disseminação independente. Pode-se ainda
verificar que devido ao fato dos NodeIDs do pacote DE não existirem, nenhum nó é
reprogramado e portanto o tamanho da lista de NodeIDs mantém-se a mesma
fazendo com que o processo de disseminação deste pacote siga o padrão original
do DRIP, como exemplificado na Figura 5.3.
68
Figura 5.5: Reprogramação seletiva dos nós 5, 55 e 7 com pacotes DE.
Figura 5.6: Reprogramação seletiva dos nós 5, 55 e 7 com pacotes DF.
Na Figura 5.7, é representada a reprogramação seletiva aos nós 10, 7 e 55
através de um pacote DE, contudo, o nó 7 encontra-se desligado. Este teste tenta
simular situações em que os nós por alguma razão se encontram sem conetividade.
69
Assim sendo, é possível verificar que os nós que se encontram conectados, ou seja,
os nós 10 e 55, são reprogramados com sucesso e retiram os seus NodeIDs da lista
de nós a reprogramar. Contudo, tal como esperado, a disseminação não termina,
sendo enviado o pacote destinado ao nó 7 com um desfasamento temporal cada
vez maior até ao eventual estado de manutenção oferecido pelo DRIP. Quando o nó
7 voltar a ter conetividade vai receber eventualmente o pacote com a ordem de
reprogramação. Nesse momento o nó irá efetuar a sua reprogramação e anunciar o
fim da disseminação de forma a acabar com o estado de manutenção do DRIP.
Figura 5.7: Reprogramação seletiva dos nós 10, 55 e 7 com o nó 7 inacessível.
5.2.3 Modo de atualização
De forma a verificar o funcionamento do modo de atualização, foi efetuada uma
reprogramação seletiva aos nós 5, 55 e 7. Assim que a estação base envia os
primeiros pacotes DE e os respetivos nós iniciam a sua reprogramação, retirou-se o
nó 10 da rede para que este ficasse fora do alcance de todos os nós da rede, ficando
assim isolado. Depois de todos os nós se terem reprogramado e entrado em modo
de atualização, voltou-se a integrar o nó 10 na rede de forma que este voltasse a
70
ter conetividade. Consultando a Figura 5.8, pode-se verificar que todos os nós alvo
se reprogramaram corretamente e 18 segundos depois do primeiro pacote com a
ordem de reprogramação ter sido enviado para a rede, todos os nós entraram em
modo de atualização. Por volta dos 51 segundos, o nó 10 envia um pacote com
uma lista que contém três NodeIDs. Isto deve-se ao fato de este nó ter estado isolado
da rede durante o processo de reprogramação desconhecendo que esta já terminou.
Como esperado, os vizinhos que se encontram já em modo de atualização detetam
que o nó 10 está desatualizado e enviam um pacote com a informação do fim da
disseminação. Pode-se verificar que isto aconteceu por volta do segundo 52, onde
o nó 7 envia um pacote ao nó 10 assinalando o fim da disseminação para que este
entre também em modo de atualização. Como esperado o nó 10 faz a retransmissão
desse pacote e entra em modo de atualização.
Figura 5.8: Reprogramação seletiva dos nós 5, 55 e 7 e o modo de atualização.
71
5.3 Análise e discussão
Após a realização de todos os testes verificou-se que o funcionamento do
protocolo decorreu de acordo com os objetivos definidos na sua conceção, sendo
desta forma possível reprogramar seletivamente um conjunto de nós através do tipo
de plataforma ou do NodeID. Foi ainda possível verificar, que durante o processo
de reprogramação seletiva por NodeID o protocolo executa um conjunto de
mecanismos de forma a assegurar eficiência e fiabilidade no processo de
reprogramação. Neste sentido, destacam-se os seguintes aspetos:
1. Diminuição da lista de NodeIDs: Os nós que se reprogramam enviam
uma lista de NodeIDs atualizada. Desta forma, a lista de nós a reprogramar vai
diminuindo ao longo do processo de reprogramação, causando uma diminuição
no tamanho dos pacotes a circular na rede. Isto permite diminuir tanto os gastos
energéticos associados à transmissão como o tráfego a circular na rede.
2. Prioridade na comunicação: Os nós que retiram o seu NodeID da lista
de NodeIDs ganham prioridade na comunicação sobre os vizinhos. Desta forma,
a lista de NodeIDs a ser disseminada é sempre a mais atualizada possível
diminuindo a quantidade de informação desatualizada durante o processo de
reprogramação.
3. Estado de manutenção do DRIP: Com o estado de manutenção do DRIP,
os nós alvo da reprogramação que estejam sem conetividade, quando a
restabelecerem, poderão receber a ordem de reprogramação dada pelo
utilizador. A utilização desta característica do DRIP na reprogramação seletiva
garante uma elevada fiabilidade na reprogramação.
4. Anúncio do fim da disseminação: Quando o último nó da lista de
NodeIDs se reprograma assinala o fim da disseminação do pacote onde estava
contido o seu NodeID. Os vizinhos que recebem este tipo de pacote rapidamente
fazem a sua retransmissão e entram em modo de atualização. Contudo, caso
um nó receba de um vizinho um segundo pacote a assinalar o fim da
72
disseminação antes de fazer a retransmissão do mesmo, este entra logo em
modo de atualização cancelando a retransmissão. Isto permite que numa rede
multihop a informação do fim da disseminação chegue rapidamente aos nós
mais distantes, enquanto numa rede single-hop (rede utilizada no cenário de
testes) apenas é necessário ser feita uma retransmissão do pacote a assinalar o
fim a disseminação para colocar todos os nós em modo de atualização.
5. Modo de atualização: Depois dos nós entrarem no modo de atualização
apenas são enviados pacotes relativos à reprogramação caso seja detetado que
um nó vizinho está desatualizado. A atualização de um nó desatualizado é feita
por um nó vizinho através do envio de um pacote com a informação de fim da
disseminação. Este pacote não só atualiza o nó desatualizado como avisa os
restantes vizinhos de que já foi feita a atualização, e portanto, estes não
precisam de a fazer.
6. Informação de estado sobre a reprogramação seletiva por NodeID: Os
nós alvos apenas retiram os seus NodeIDs da lista de nós a reprogramar depois
de se terem reprogramado com sucesso. Este fator aliado à rápida convergência
da rede para a lista de NodeIDs mais atualizada, permite ao utilizador (ou
aplicação) e aos nós da rede ter uma informação de estado fiável sobre o
processo de reprogramação.
5.4 Sumário
Neste capítulo foi testado e analisado o comportamento do protocolo criado.
Foi descrito o cenário utilizado nos testes, nomeadamente a topologia, os
componentes e a forma como a recolha dos pacotes relativos à reprogramação
é feita. Foi também analisado o processo de reprogramação quando é utilizada
a reprogramação total da rede, oferecida por defeito pelo Deluge. Esta análise
serviu para verificar o processo normal de disseminação oferecido pelo DRIP.
De seguida, foi testada a reprogramação seletiva por tipo de plataforma e por
NodeID, sendo os seus resultados analisados individualmente. Na
73
reprogramação por NodeID foram utilizados diferentes cenários para verificar a
fiabilidade e robustez do protocolo. Por último, foi feita uma análise geral do
protocolo criado evidenciando os aspetos mais relevantes do funcionamento do
mesmo na reprogramação seletiva por NodeID.
O próximo capítulo diz respeito às conclusões e considerações finais sobre
esta dissertação e às possíveis direções futuras a serem tomadas.
74
6. Conclusões e Trabalho Futuro
6.1 Conclusões
A reprogramação remota é crucial para a gestão e implementação de uma RSSF,
não só porque permite a reprogramação de nós que se encontram em locais de
difícil acesso mas também porque permite agilizar o processo de deteção de erros e
teste de uma aplicação ou serviço.
Esta dissertação propõem uma extensão ao protocolo DRIP aumentando
consideravelmente a funcionalidade do Deluge na reprogramação de RSSFs. Para
tal, foi necessário alterar completamente o modo de funcionamento do DRIP, dando
origem a um novo protocolo capaz de reprogramar seletivamente os nós de uma
RSSF. Foram utilizados vários mecanismos para assegurar que apenas a informação
relevante e mais atualizada circula na rede durante o processo de reprogramação.
Combinando estes mecanismos com o estado de manutenção do DRIP, foi possível
obter um protocolo que oferece fiabilidade e eficiência durante o processo de
reprogramação ao mesmo tempo que são mantidas todas as funcionalidades
originais do Deluge. Desta forma, todos os objetivos inicialmente propostos nesta
dissertação foram cumpridos. A solução encontrada permite uma reprogramação
mais versátil do que a oferecida originalmente pelo Deluge, permitindo reprogramar
seletivamente os nós da rede através do tipo de plataforma ou do Node ID.
Um dos maiores desafios na construção deste protocolo deveu-se ao elevado
nível de modularidade do código do Deluge e DRIP, fazendo com que a sua lógica
aplicacional esteja espalhada por vários componentes. Este fator aliado à escassez
de documentação do código torna difícil qualquer alteração, visto que muitas vezes
o acréscimo de uma pequena funcionalidade obriga à alteração de vários
componentes.
Outro aspeto a realçar é relativo à bibliografia referente aos trabalhos
relacionados sobre a reprogramação remota das RSSFs que se encontra bastante
75
dispersa e com uma clara falta de rigor na sua estruturação. Assim, procurou-se
analisar e sistematizar o valor acrescentado do trabalho relacionado para o tema em
estudo.
Em resumo, salientam-se como principais contribuições decorrentes do trabalho
realizado: (i) análise e organização dos principais trabalhos relacionados permitindo
uma melhor distinção dos protocolos de reprogramação com base no tipo de
reprogramação usada; e (ii) proposta de uma extensão protocolar que aumenta a
funcionalidade do Deluge, permitindo uma maior flexibilidade e versatilidade na
implementação das RSSFs através da reprogramação seletiva de redes com
diferentes plataformas e aplicações.
6.2 Trabalho futuro
Nesta última secção identificam-se possíveis direções futuras de investigação e
desenvolvimento de forma a melhorar e consolidar o protocolo desenvolvido.
A identificação dos nós no protocolo criado é feita através do NodeID. Contudo,
em cenários onde exista um grupo de nós a ser reprogramados em conjunto, deve
ser possível utilizar outra forma de identificação, como, por exemplo, endereços de
grupo. Neste sentido, os pacotes DF e DE deverão ser capazes de transportar outros
dados como alternativa à lista de NodeIDs, de forma a aumentar ainda mais a
versatilidade do processo de reprogramação.
A abstração das funcionalidades do protocolo criado para funções genéricas
deve também ser um objetivo futuro. Desta forma, seria possível utilizar o DRIP no
controlo da reprogramação de outros protocolos distintos do Deluge e que sofressem
da mesma lacuna em termos de reprogramação seletiva.
Por fim, refira-se que o protocolo criado não é assumido como definitivo,
podendo ser feitas várias otimizações ao seu funcionamento. Contudo, o que fica
subjacente com este trabalho é o conceito de uma extensão ao DRIP que pode ser
77
Referências Bibliográficas
[1] P. Levis, S. Madden, and J. Polastre, “TinyOS: An operating system for sensor networks,” Ambient Intell., pp. 115–148, 2005.
[2] A. Dunkels, B. Gronvall, and T. Voigt, “Contiki-a lightweight and flexible operating system for tiny networked sensors,” in Local Computer Networks, 2004. 29th Annual IEEE International Conference on, 2004, pp. 455–462.
[3] G. Strazdins, A. Elsts, K. Nesenbergs, and L. Selavo, “Wireless Sensor Network Operating System Design Rules Based on Real-World Deployment Survey,” J. Sens. Actuator Networks, vol. 2, no. 3, pp. 509–556, Aug. 2013.
[4] A. Chlipala, J. Hui, and G. Tolle, “Deluge: data dissemination for network reprogramming at scale,” Univ. California, Berkeley, Tech. Rep, 2004.
[5] E. Lima, Ó. Gama, and P. Carvalho, “A Protocol Extension for Selective Reprogramming of WSNs.” 2015 IEEE Int. Conf. Commun. (Artigo submetido em revisão)
[6] I. F. Akyildiz and M. C. Vuran, Wireless sensor networks, vol. 4. John Wiley & Sons, 2010.
[7] P. Baronti, P. Pillai, V. W. C. Chook, S. Chessa, A. Gotta, and Y. F. Hu, “Wireless sensor networks: A survey on the state of the art and the 802.15.4 and ZigBee standards,” Comput. Commun., vol. 30, no. 7, pp. 1655–1695, May 2007.
[8] Z. Shelby and C. Bormann, 6LoWPAN: The wireless embedded Internet, vol. 43. John Wiley & Sons, 2011.
[9] M. O. Farooq and T. Kunz, “Operating systems for wireless sensor networks: a survey.,” Sensors (Basel)., vol. 11, no. 6, pp. 5900–30, Jan. 2011.
[10] Q. Cao, T. Abdelzaher, J. Stankovic, and T. He, “The LiteOS Operating System: Towards Unix-Like Abstractions for Wireless Sensor Networks,” 2008 Int. Conf. Inf. Process. Sens. Networks (ipsn 2008), pp. 233–244, Apr. 2008.
[11] S. Bhatti, J. Carlson, H. Dai, J. Deng, J. Rose, A. Sheth, B. Shucker, C. Gruenwald, A. Torgerson, and R. Han, “MANTIS OS: An Embedded
78
Multithreaded Operating System for Wireless Micro Sensor Platforms,” Mob. Networks Appl., vol. 10, no. 4, pp. 563–579, Aug. 2005.
[12] A. Eswaran, A. Rowe, and R. Rajkumar, “Nano-rk: an energy-aware resource-centric rtos for sensor networks,” in Real-Time Systems Symposium, 2005. RTSS 2005. 26th IEEE International, 2005, p. 10–pp.
[13] P. Levis and D. Gay, TinyOS Programming. Cambridge: Cambridge University Press, 2009.
[14] G. Tolle, J. Polastre, and R. Szewczyk, “A macroscope in the redwoods,” in Proceedings of the 3rd international conference on Embedded networked sensor systems, 2005, pp. 51–63.
[15] G. Werner-Allen and K. Lorincz, “Deploying a wireless sensor network on an active volcano,” Internet Comput. IEEE, vol. 10, no. 2, pp. 18–25, 2006.
[16] Ó. Gama, P. Carvalho, J. Afonso, and P. Mendes, “Wireless sensor networks with QoS for e-health and e-emergency applications,” 2008.
[17] W.-Y. Chung, Y.-D. Lee, and S.-J. Jung, “A wireless sensor network compatible wearable u-healthcare monitoring system using integrated ECG, accelerometer and SpO2.,” Conf. Proc. IEEE Eng. Med. Biol. Soc., vol. 2008, pp. 1529–32, Jan. 2008.
[18] A. Wood, G. Virone, T. Doan, Q. Cao, L. Selavo, Y. Wu, L. Fang, Z. He, S. Lin, and J. Stankovic, “ALARM-NET: Wireless sensor networks for assisted-living and residential monitoring,” Univ. Virginia Comput. Sci. Dep. Tech. Rep., vol. 2, 2006.
[19] P. Lopez-Matenci, J. V. Alonso, F. J. Gonzalez-Castano, J. L. Sieiro, and J. J. Alcaraz, “Ambient intelligence assistant for running sports based on k-NN classifiers,” 3rd Int. Conf. Hum. Syst. Interact., pp. 605–611, May 2010.
[20] P. Castillejo, J.-F. Martinez, J. Rodriguez-Molina, and A. Cuerva, “Integration of wearable devices in a wireless sensor network for an E-health application,” Wirel. Commun. IEEE, vol. 20, no. 4, 2013.
[21] “GINSENG.” [Online]. Available: https://www.cisuc.uc.pt/projects/show/108. [Accessed: 30-Sep-2014].
[22] S. W. Arms and C. P. Townsend, “Wireless Strain Measurement Systems–Applications & Solutions,” in Proceedings of NSF-ESF Joint Conference on Structural Health Monitoring, Strasbourg, France, 2003.
79
[23] S. W. Arms, C. P. Townsend, and M. J. Hamel, “Validation of remotely powered and interrogated sensing networks for composite cure monitoring,” in 8th International Conference on Composites Engineering (ICCE/8), Tenerife, Spain, 2001.
[24] M. Pejanovi and Z. Tafa, “A Survey of Military Applications of Wireless Sensor Networks,” 2012.
[25] G. Tolle and D. E. Culler, “Design of an application-cooperative management system for wireless sensor networks.,” in EWSN, 2005, vol. 5, pp. 121–132.
[26] P. Levis and D. Culler, “Maté: A tiny virtual machine for sensor networks,” ACM Sigplan Not., 2002.
[27] A. Boulis, C.-C. Han, R. Shea, and M. B. Srivastava, “Sensorware: Programming sensor networks beyond code update and querying,” Pervasive Mob. Comput., vol. 3, no. 4, pp. 386–412, 2007.
[28] J. Koshy and R. Pandey, “VMSTAR: synthesizing scalable runtime environments for sensor networks,” in Proceedings of the 3rd international conference on Embedded networked sensor systems, 2005, pp. 243–254.
[29] Q. Xie, J. Liu, and P. H. Chou, “Tapper: a lightweight scripting engine for highly constrained wireless sensor nodes,” 2006 5th Int. Conf. Inf. Process. Sens. Networks, pp. 342–349, 2006.
[30] J. Jeong, S. Kim, and A. Broad, “Network reprogramming,” Univ. Calif. Berkeley, Berkeley, CA, USA, 2003.
[31] R. K. Panta, I. Khalil, and S. Bagchi, “Stream: Low overhead wireless reprogramming for sensor networks,” in INFOCOM 2007. 26th IEEE International Conference on Computer Communications. IEEE, 2007, pp. 928–936.
[32] R. Panta, S. Bagchi, I. Khalil, and L. Montestruque, “Single versus multi-hop wireless reprogramming in sensor networks,” in Proceedings of the 4th International Conference on Testbeds and research infrastructures for the development of networks & communities, 2008, p. 34.
[33] S. S. Kulkarni and M. Arumugam, “Infuse: A TDMA Based Data Dissemination Protocol for Sensor Networks,” Int. J. Distrib. Sens. Networks, vol. 2, no. 1, pp. 55–78, 2006.
[34] G. Maia, D. L. Guidoni, A. L. L. Aquino, and A. A. F. Loureiro, “Improving an over-the-air programming protocol for wireless sensor networks based on
80
small world concepts,” in Proceedings of the 12th ACM international conference on Modeling, analysis and simulation of wireless and mobile systems, 2009, pp. 261–267.
[35] L. Wang and S. Kulkarni, “Gappa: Gossip based multi-channel reprogramming for sensor networks,” Distrib. Comput. Sens. Syst., pp. 119–134, 2006.
[36] T. Stathopoulos, J. Heidemann, and D. Estrin, “A remote code update mechanism for wireless sensor networks,” 2003.
[37] A. Tridgell and P. Mackerras, “The rsync algorithm,” no. June, 1996.
[38] R. K. Panta, S. Bagchi, and S. P. Midkiff, “Efficient incremental code update for sensor networks,” ACM Trans. Sens. Networks, vol. 7, no. 4, pp. 1–32, Feb. 2011.
[39] R. K. Panta and S. Bagchi, “Hermes: Fast and Energy Efficient Incremental Code Updates for Wireless Sensor Networks,” IEEE INFOCOM 2009 - 28th Conf. Comput. Commun., pp. 639–647, Apr. 2009.
[40] W. Dong, Y. Liu, C. Chen, J. Bu, C. Huang, and Z. Zhao, “R2: Incremental reprogramming using relocatable code in networked embedded systems,” Comput. IEEE Trans., vol. 62, no. 9, pp. 1837–1849, 2013.
[41] “TelosB Datasheet.” [Online]. Available: http://www.memsic.com/userfiles/files/Datasheets/WSN/6020-0094-02_B_TELOSB.pdf. [Accessed: 31-Oct-2014].
[42] “MicaZ Datasheet.” [Online]. Available: http://www.memsic.com/userfiles/files/Datasheets/WSN/6020-0060-04-B_MICAz.pdf. [Accessed: 31-Oct-2014].
[43] “EPIC.” [Online]. Available: http://www.cs.berkeley.edu/~prabal/projects/epic/. [Accessed: 31-Oct-2014].
[44] “IRIS Datasheet.” [Online]. Available: http://www.memsic.com/userfiles/files/Datasheets/WSN/6020-0124-01_B_IRIS.pdf. [Accessed: 31-Oct-2014].
[45] H. Dubois-Ferrière, L. Fabre, R. Meier, and P. Metrailler, “TinyNode: a comprehensive platform for wireless sensor network applications,” in Proceedings of the 5th international conference on Information processing in sensor networks, 2006, pp. 358–365.
81
[46] P. Levis and G. Tolle, “TEP 118 Dissemination,” Core Work. Group, TinyOS Community, pp. 1–4, 2007.
[47] P. Levis, N. Patel, D. Culler, and S. Shenker, Trickle: A self regulating algorithm for code propagation and maintenance in wireless sensor networks. 2003.
[48] J. Hui, “Deluge 2.0-TinyOS network programming,” found Feb. 2007 http//www. cs. berkeley. edu/jwhui/research/deluge/deluge-manual. pdf, 2005.
[49] T. Williams and C. Kelley, “Gnuplot 4.4: an interactive plotting program,” Off. gnuplot Doc. http//sourceforge. net/projects/gnuplot, 2010.