Seminario Programmare le Reti di Sensoria008149/corsi/so/materiale/Esercitazioni/... ·...

52
Seminario Programmare le Reti di Sensori Insegnamento 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

Transcript of Seminario Programmare le Reti di Sensoria008149/corsi/so/materiale/Esercitazioni/... ·...

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

Reti di sensori

PerLab

Sistemi Operativi

Wireless Sensor Network

Nodi sensori

Base Station (sink)

5

WSN

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 7

Dettagli Tmote SKY / TelosB

Blocco batterie (AA)

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

TinyOS

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 31

Modello di esecuzione

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

Grafo dei componenti

48

interfacce

configurazioni

modulo

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