tesi di laurea Anno Accademico 2005/2006 relatore Ch.mo prof. Domenico Cotroneo candidato Giovanni Chierchia Matr. 534 / 804
::. Obiettivi del lavoro di tesi Studio del sistema operativo TinyOS Studio della virtual machine matè Installazione di TinyOS su una macchina linux
::. Reti di sensori TinyOS è un sistema operativo open-source per reti di sensori senza filo. Una rete di sensori è un sistema distribuito formato da un insieme di nodi capaci di: ospitare sensori o attuatori eseguire elaborazioni comunicare tra loro attraverso protocolli di rete multi-hop Una rete di sensori è caratterizzata da: Centralità dei dati: : l osservazione l del fenomeno è più importante del singolo nodo sensore Orientamento alle applicazioni: : le reti di sensore sono progettate per una specifica applicazione Scalabilità: : le reti di sensori sono composte da un grande numero di nodi Autoconfigurazione: : il comportamento di un nodo deve variare a seconda dello stato in cui si trova la rete Ridotti consumi di energia: : i nodi sono alimentati unicamente da batterie Semplicità: : l hardware l e il software di una rete di sensore devono essere il piùp semplici possibili
::. Sistemi operativi per reti di sensori Le proprietà di una rete di sensori impongono lo sviluppo di S. O. che tengano conto di: Ridotte dimensioni dell hardware e scarsa disponibilità di energia Alto numero di eventi a cui sono soggette le reti di sensori Basso livello di parallelismo delle reti di sensori Necessità di adeguare lo stesso software ai diversi dispositivi hardware Tolleranza ai guasti nelle reti di sensori che lavorano in ambienti critici Un S. O. per reti di sensori dovrebbe quindi essere caratterizzato to da: Semplicità: evitare operazioni inutili e molto ingombranti Semplicit evitare operazioni inutili e molto ingombranti Risparmio energetico: spegnere le risorse hardware quando non sono utilizzate Efficienza: gestire rapidamente grandi quantità di eventi per evitare di perdere informazioni preziose Basso parallelismo: rapido accesso all hardware e basso overhead di esecuzione Modularità: garantire riusabilità e manutenibilità del software Tolleranza ai guasti: favorire lo sviluppo di applicazioni distribuite affidabili
::. Sistema operativo TinyOS TinyOS è stato progettato con l obiettivo l di: Ridurre i consumi di energia, il carico computazionale e l occupazione l di memoria Supportare intensive richieste di operazioni concorrenti, robuste, efficienti e modulari Il risultato è un sistema operativo caratterizzato da: Kernel ridotto che permette l accesso l diretto all hardware Meccanismi di gestione del processore che non prevedono i cambi di contesto Memoria considerata come un unico e lineare spazio fisico allocato a tempo di compilazione
::. Sistema operativo TinyOS Per soddisfare il requisito dell efficienza, efficienza, TinyOS è stato implementato seguendo il modello a eventi. Nel campo delle reti di sensori, l approccio l basato sugli eventi consente di utilizzare le risorse hardware nel n modo più efficiente possibile. Per soddisfare il requisito della modularità, TinyOS è stato implementato utilizzando il modello a componenti. Ogni componente presente in TinyOS è un unit unità software indipendente dotata di interfacce, le cui dipendenze da altri componenti sono esplicite nelle interfacce stesse, ed è formato da quattro parti tra loro collegate: un frame un insieme di comandi un insieme di eventi un certo numero di task
::. Elementi di TinyOS Il frame è l area dati di un componente ed è allocata a tempo di compilazione. I comandi sono richieste di un servizio offerto da un altro componente. Gli eventi sono, direttamente o indirettamente, delle interruzioni hardware. I task sono attività indipendenti che non hanno diritto di prelazione su nessuna delle attività in corso. Lo scheduling ha due livelli di priorità: quello normale per i task e quello più alto per gli eventi, che possono interrompere i task.
::. Linguaggio nesc Il sistema TinyOS e le sue applicazioni sono scritte nel linguaggio nesc,, il quale implementa il modello a eventi, il modello a componenti e il modello concorrente previsti da TinyOS. Le caratteristiche principali di tale linguaggio sono: la bidirezionalità delle interfacce il linking statico dei componenti di un applicazione Il linking statico consente un ingente risparmio di energia e di memoria, tuttavia limita molto la versatilità: : infatti non è possibile installare più applicazioni indipendenti sullo stesso nodo sensore e non è possibile effettuare linking dinamico di librerie esterne o riconfigurazione dinamica di parte del codice presente sul sensore.
::. Virtual machine Matè Il linking statico di un applicazione può sollevare seri problemi qualora sia necessario riprogrammare una rete di sensori formata da centinaia o da migliaia di nodi. In tale scenario diventa indispensabile ricorrere ad applicazioni i che offrono una gamma di servizi a più alto livello rispetto al solo sistema operativo: le virtual machine. Per il sistema operativo tinyos è disponibile la virtual machine Matè, un applicazione TinyOS che implementa un sistema per la riprogrammabilità dinamica dei nodi sensori basato sulla diffusione in tutta la rete di frammenti di codice. Tra le altre caratteristiche, Matè fornisce anche alcune funzionalità che permettono di rendere sicuri i programmi concorrenti e di rendere sincrone le operazioni tinyos.
::. Installazione di TinyOS e di Matè L installazione di TinyOS su una macchina linux consiste nell installazione di 9 pacchetti sorgente: I pacchetti JDK-1.4.2 e javax.comm consentono di installare la Java virtual machine. I pacchetti avr-binutils, avr-gcc, avr-libc, avr-insight e avarice consentono di installare l ambiente l di sviluppo GNU C per la programmazione dei microcontrollori AVR 8-bit 8 RISC della Atmel Il pacchetto nesc-1.1.2b consente di installare il compilatore per il linguaggio nesc Il pacchetto tinyos-1.1.15 consente di installare il sistema operativo TinyOS vero e proprio L installazione della virtual machine Matè consiste nell installazione di un solo pacchetto sorgente: tinyos-vm-1.1.0