Seminario
Programmare le Reti di SensoriInsegnamento di Sistemi Operativi
Laurea Specialistica in Ingegneria Elettronica
Ing. Ilaria Giannetti
E-mail: [email protected] Telefono: 050 2217 468
Pervasive Computing & Networking Lab (PerLab) http://www.perlab.it
Dipartimento di Ingegneria dell’Informazione, Università di Pisa
© 2009 Prof. M. Avvenuti – Dipartimento di Ingegneria dell‟Informazione
PerLab
Sistemi Operativi
Informazioni generali
Pagina web del corso
http://www2.ing.unipi.it/~a008149/corsi/so/
Materiale:
http://www2.ing.unipi.it/~a008149/corsi/so/materiale/
index.html
Sezione “MATERIALE PER ESERCITAZIONI E
PROGETTO (a.a. 2009/2010) - Slide esercitazioni”
2
PerLab
Sistemi Operativi
Sommario
Wireless Sensor Networks
TinyOS
Caratteristiche
Architettura
Linguaggio NesC
3
PerLab
Sistemi Operativi
Architettura generale:
Sistema di comunicazione (radio)
Alimentazione (batterie)
Sistema di sensing (sensori di luce, temperatura,
umidità, ..)
Unità di elaborazione (processore) + memoria
6
Nodi sensori
PROCESSING
SUB-SYSTEM
COMMUNICATION
SUB-SYSTEM
SENSING
SUB-SYSTEM
POWER MGMT.
SUB-SYSTEM
ACTUATION
SUB-SYSTEM
PerLab
Sistemi Operativi
Nuova classe di dispositivi programmabili
Caratteristiche:
Comunicazione wireless
Alimentazione a batteria
Smart
dispositivi integrati dotati di microcontrollori in grado
di effettuare attività di comunicazione ed
elaborazione dell‟informazione
8
Caratteristiche
PerLab
Sistemi Operativi
Equipaggiati di sensori di ogni tipo, sono adatti
per applicazioni eterogenee
Ambito ambientale: monitoraggio ambientale
Ambito militare: operazioni militari
Ambito agricolo: agricoltura di precisione
Ambito medico: monitoraggio dello stato di salute di
pazienti
Ambito domestico: automazione e monitoraggio di
edifici
9
Applicazioni
PerLab
Sistemi Operativi
Applicazioni concurrency intensive:
i nodi sensori contemporaneamente trasmettono
dati e campionano dai sensori
Come gestire la concorrenza con un processore
a 8 MHz?
Usare le interruzioni
Massimizzare il parallelismo del processore
10
Caratteristiche delle applicazioni
PerLab
Sistemi Operativi
Applicazione: estrazione dei dati dalla rete e
loro elaborazione e trasmissione
..ma non è facile! Applicazioni durature vs limitata capacità delle
batterie
Perdita di dati, banda limitata, comunicazione a corto raggio
Limitata affidabilità data l‟assenza di meccanismi di recovery
Ambiente altamente distribuito
Pochi tool di sviluppo
11
Programmazione
PerLab
Sistemi Operativi
Elementi critici:
Budget energetico limitato
Scarse risorse hardware
Elaborazione in tempo reale
Differenze applicative
Necessità di un adeguato sistema operativo con
i seguenti requisiti funzionali:
Uso efficiente delle risorse (consumo energetico)
Supporto efficiente alla concorrenza (per ottimizzare
l‟uso delle limitate risorse e vincoli real-time)
Flessibilità e modularità (per adeguarsi alle diverse
piattaforme e scenari applicativi)12
Criticità delle WSN
PerLab
Sistemi Operativi
Sistema operativo per i nodi delle reti wireless
di sensori (Wireless Sensor Network)
Architettura modulare, component-based
Progetto accademico sviluppato da parte di un
consorzio guidato dall'Università della
California, Berkeley, in collaborazione con Intel
Research
14
TinyOS
PerLab
Sistemi Operativi
Ottimizza l‟uso delle risorse
Piccole dimensioni (circa 3 Kbyte)
Minimale, fornisce solamente:
Scheduling
Gestione dell‟hardware
Molti protocolli implementati (MAC, routing,
applicazioni, DB, simulatori)
15
Caratteristiche generali
PerLab
Sistemi Operativi
http://www.tinyos.net
Ultima versione: 2.0
Disponibile per
Linux
Windows (sotto l‟ambiente Cygwin)
16
Download
PerLab
Sistemi Operativi
Non general purpose
Application-specific – usa solamente le feature
di cui necessita per l‟applicazione specifica, per
risparmiare memoria
Thread „leggeri‟: meccanismi di lock di base e
veloci cambi di contesto
Input/output: interfacce per comunicare coi
dispositivi e per il buffering
17
Sistema embedded 1/2
PerLab
Sistemi Operativi
Gestione delle interruzioni (reactive):
trasforma le interruzioni in eventi che il codice
utente deve gestire
abilita l‟esecuzione di nuovi task
Aspetti real-time:
garantisce che i task vengano eseguiti con una
certa frequenza
garantisce che un‟interruzione venga gestita in un
certo tempo
schedula i task in funzione della loro priorità e della
loro deadline
18
Sistema embedded 2/2
PerLab
Sistemi Operativi
Sistema operativo embedded ed application-
specific
Tutte le risorse sono note in maniera statica
(non esiste allocazione dinamica)
Le applicazioni sono costruite da una suite di
componenti di sistema riutilizzabili insieme a
codice specifico dell‟applicazione
19
Caratteristiche tecniche
PerLab
Sistemi Operativi
Event-driven:
i nodi reagiscono ai cambiamenti dell‟ambiente
(arrivo di messaggi o acquisizione di dati dai
sensori)
e
l‟arrivo di eventi e l‟elaborazione dei dati sono
attività concorrenti
20
Modello di concorrenza
PerLab
Sistemi Operativi
Il confine tra hardware e software varia in
funzione dell‟applicazione e della piattaforma
hardware (flessibilità)
21
Separazione HW / SW
PerLab
Sistemi Operativi
networks of embedded sensors C
Linguaggio event – driven
Linguaggio statico
No allocazione dinamica della memoria (no malloc)
No puntatori a funzione
No heap
Compilatore per applicazioni che girano sui nodi
sensori
Usa l‟estensione ".nc“
Dialetto del C con influenze di Java
Progettato con l‟idea di riuso del codice22
NesC
PerLab
Sistemi Operativi 23
Compilazione
Applicazione
(NesC)
Applicazione &
TinyOs (C)
Applicazione
eseguibile
TinyOS kernel (C)
& TinyOS lib (NesC)Compilatore
NesC
Compilatore
C
PerLab
Sistemi Operativi
Differenza tra composizione e costruzione
i programmi sono composizioni di componenti
Il comportamento dei componenti è dato in
termini di un set di interfacce
i componenti specificano quali interfacce usano e
quali interfacce forniscono
I componenti sono collegati staticamente tra
loro tramite le interfacce
maggiore efficienza (il compilatore carica ed esegue
solo i componenti necessari)
24
Modello di programmazione
PerLab
Sistemi Operativi
Composizione di componenti
1 configurazione + un set di moduli
La configurazione è un componente che
specifica i collegamenti tra i moduli
Ogni modulo è un componente costituito da:
interfaccia
implementazione
25
Programma NesC
PerLab
Sistemi Operativi
Comandi
implementati dai componenti
usati da altri componenti per invocare azioni sul
componente
Eventi
generati dai componenti
notificano che è stata eseguita un‟azione sul
componente
sono anche call back usate per fornire risultati ottenuti
dall‟esecuzione precedente di un comando
spesso sono generati direttamente da interruzioni hw
26
Costrutti di base 1/2
PerLab
Sistemi Operativi
Tasks
non sono time critical
servono per gestire eventi nel caso si debbano
eseguire operazioni lunghe (operazioni di I/O)
Split-phase:
operazioni che, dopo essere state invocate, al
momento del loro completamento, innescano
l'esecuzione di una funzione di ritorno (callback)
27
Costrutti di base 2/2
PerLab
Sistemi Operativi
Limitato carico di lavoro
non bloccanti
Agiscono in modo simile a chiamate di funzioni
L‟esecuzione di eventi e comandi è immediata
I comandi si invocano con la parola chiave call
call Timer.start(TIMER_REPEAT, 1000);
Gli eventi sono sollevati con la parola chiave signal
signal ByteComm.txByteReady(SUCCESS);
28
Comandi ed eventi
PerLab
Sistemi Operativi
Forniscono concorrenza internamente ad un
componente
Possono invocare comandi e sollevare eventi
Esempi di task
alto livello: aggregazione dei dati letti dai sensori
basso livello: calcolo del CRC sui pacchetti da inviare
I task si mettono in coda tramite la parola chiave post
post Timer.start(TIMER_REPEAT, 1000);
29
Task
{
...
post TskName();
...
}
task void TskName {
...
}
PerLab
Sistemi Operativi
Fase 1 un evento o un task sollevato da
componente 1 chiama un
comando di componente 2
componente 2 esegue il
comando per fare operazioni
lunghe invoca un task e ritorna ok
(ma non il risultato del task)
Fase 2 il task completa l‟esecuzione e lo
segnala con un evento a
componente 1
il gestore di eventi di componente
1 controlla l‟esito dell‟operazione
30
Split-phase
PerLab
Sistemi Operativi
Gli eventi richiedono l‟esecuzione di comandi e
task che a loro volta invocano comandi che causano altri eventi…
32
Flusso di esecuzione
Hardware
Interrupts
eve
nts
commands
Tasks
PerLab
Sistemi Operativi
Esecuzione guidata dagli eventi (event - driven)
Due contesti:
foreground: comandi ed eventi
background: task
Il contesto di background può essere interrotto da
quello in foreground, ma non è vero il contrario
Eventi generati da interruzione hanno diritto di
preemption sui task
33
Modello di concorrenza 1/2
PerLab
Sistemi Operativi
I task vengono inseriti in una coda FIFO
Una volta in esecuzione vengono eseguiti fino al
completamento
eventi possono interromperli e fare preemption
altri task NON possono interromperli (non hanno
diritto di preemption)
34
Modello di concorrenza 2/2
PerLab
Sistemi Operativi
Canali bidirezionali per l‟interazione
multifunzionale tra componenti
“Fornire” interfacce
indica le funzionalità che il componente fornisce ai
suoi utilizzatori
serve comandi, implementa funzionalità
invoca eventi, cioè segnala all‟utilizzatore la presenza
di dati o il completamento di un‟operazione
35
Interfacce 1/2
PerLab
Sistemi Operativi
“Usare” interfacce
indica le funzionalità fornite da un altro componente di
cui il componente ha bisogno
serve eventi, cioè implementa la gestione di eventi
invoca comandi, cioè chiede ad un componente
fornitore qualche operazione
36
Interfacce 2/2
PerLab
Sistemi Operativi
Due tipi di componenti
Moduli
Configurazioni
I componenti specificano un set di interfacce
attraverso le quali si connettono ad altri
componenti
forniscono un set di interfacce che altri componenti
useranno
usano un set di interfacce fornite da altri componenti
37
Componenti
PerLab
Sistemi Operativi
Codice applicativo
contengono codice
Devono implementare le interfacce fornite
implementare i comandi che forniscono
signal di eventi
Devono implementare le interfacce usate
implementare la gestione degli eventi
call di comandi
38
Moduli
PerLab
Sistemi Operativi
Componente che collega componenti tra loro,
che assembla componenti
In particolare, connette interfacce usate da
componenti a interfacce fornite da altri
componenti
39
Configurazione
PerLab
Sistemi Operativi
Un componente specifica un set di interfacce
attraverso le quali è connesso ad altri
componenti
Moduli
forniscono codice che implementa una o più
interfacce e comportamenti interni
Configurazioni
linkano componenti per ottenere altri componenti
Interfacce
mettono in relazione logica comandi ed eventi
sono bidirezionali
40
Rivediamo le definizioni
PerLab
Sistemi Operativi
Uno o più componenti collegati tra loro a formare
un programma eseguibile
Unica configurazione di alto livello che specifica il
set di componenti dell‟applicazione e come sono
collegati tra loro
Il componente principale (main) deve
implementare i comandi
init
start
stop
41
Applicazioni in NesC
PerLab
Sistemi Operativi
Connessione diretta (->)
solo 2 componenti alla volta – point-to-point
connessione tra interfacce compatibili
„A <- B‟ equivale a „B -> A‟
[componente che usa interfaccia] -> [componente
che fornisce interfaccia]
[interface] -> [implementation]
„=‟ può essere usato per collegare direttamente
un componente all‟interfaccia di un oggetto di alto
livello
Le componenti non utilizzate sono escluse dalla
compilazione42
Collegamento tra componenti
PerLab
Sistemi Operativi
Semplice applicazione che accende e spegne i
led alla frequenza di 1 Hz implementando un
contatore
2 componenti:
1 modulo Blink.nc
implementa l‟applicazione
1 configurazione BlinkAppC.nc
collega il componente Blink ad altri componenti che
l‟applicazione richiede (Timer, Led, ..)
43
Esempio: applicazione Blink
PerLab
Sistemi Operativi
44
module BlinkC {
uses interface Timer<TMilli> as Timer;
uses interface Leds;
uses interface Boot;
}
implementation
{
uint8_t counter=0;
event void Boot.booted()
{
call Timer.startPeriodic( 1000 );
}
event void Timer.fired()
{
counter++;
call Leds.set(counter);
}
}
Il componente BlinkC è un Modulo: implementa alcune
funzioni
non collega componenti
BlinkC
Boot
LedsTimer
uses
uses
Modulo BlinkC
PerLab
Sistemi Operativi
Interfacce di Blink
45
BlinkC
Boot
LedsTimer
uses
uses
MainC
providesBoot
LedsC
Ledsprovides
TimerMilliC
Timerprovides
module BlinkC {
uses interface Timer<TMilli> as Timer;
uses interface Leds;
uses interface Boot;
}
configuration MainC {
provides interface Boot;
}
configuration TimerMilliC {
provides interface Timer;
}
PerLab
Sistemi Operativi 46
Configurazione BlinkAppC
configuration BlinkAppC {
}
implementation
{
components MainC, BlinkC, LedsC;
components new TimerMilliC() as Timer;
BlinkC -> MainC.Boot;
BlinkC.Timer -> Timer;
BlinkC.Leds -> LedsC;
}
PerLab
Sistemi Operativi
BlinkAppC è una configurazione di alto livello che
connette solo interfacce
Collega le interfacce che il componente BlinkC
usa con quelle fornite da altri componenti, cioè
TimerMilliC e Leds
L‟interfaccia Boot di MainC è parte della
sequenza di boot di TinyOS ed è necessaria per
l‟inizializzazione dei componenti Timer e Led
Le configurazioni possono anche fornire e usare
interfacce, non sono tutte di alto livello
47
Descrizione
PerLab
Sistemi Operativi
49
MainC
{
signal Boot.booted()
}
BlinkC
Implementation{
event void Boot.booted() {
call Timer.startPeriodic(1000);
…
}
…
}
TimerMilliC
{
….
command Timer0.setRate(…){
….
}
….
} Timer0 Hardware
TimerMilliC
{
….
signal Timer.fired();
}
….
}
BlinkC
Implementation {event void Timer.fired()
{
counter++;
call Leds.set(counter);
}
…
}
Flusso di BlinkAppC
PerLab
Sistemi Operativi
Pro
Allocazione statica della memoria -> risorse garantite
Schedulazione non preemptive -> uso minimo di
memoria
Linguaggio modulare -> consente lo sviluppo di
software indipendente
Contro
Allocazione statica della memoria -> sovrastima delle
risorse, spreco
Modello di concorrenza semplice -> no sezioni
critiche
Nuovo linguaggio di programmazione
50
TinyOS: Pro e Contro
PerLab
Sistemi Operativi
Risorse e riferimenti 1/2
TINYOS:
La versione è la 2.
http://www.tinyos.net/ e in particolare le sezioni nel
Site Menu a sinistra relative a Installazione e
Documentazione:
Downloads and Releases
– Installing TinyOS
– ...
Documentation
– Documentation Wiki
– Using TinyOS
– TinyOS Tutorials
51
PerLab
Sistemi Operativi
Risorse e riferimenti 2/2
NesC
Download:
http://sourceforge.net/projects/nescc/files/nescc/
Manuale di programmazione per TinyOS:
http://www.tinyos.net/tinyos-2.x/doc/pdf/tinyos-
programming.pdf
Reference Manual NesC 1.2 (differenze con la
versione precedente):
http://www.tinyos.net/dist-2.0.0/tinyos-
2.0.0beta1/doc/nesc/ref.pdf
52