TinyOS: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Maupag (discussione | contributi)
Aggiunta (fonte la mia tesi)
Maupag (discussione | contributi)
mNessun oggetto della modifica
Riga 8:
Questo semplice modello di concorrenza funziona bene per applicazioni con prevalenza di operazioni di I/O (applicazioni I/O bound) ma può generare delle difficoltà per applicazioni con prevalenza di elaborazioni (applicazioni CPU bound). Sono state avanzate delle proposte per l'incorporazione del multi-threading al livello d'utente (a livello di sistema esistono dei thread di controllo) nel sistema, proprio per far fronte ad applicazioni CPU bound, ma è stato dimostrato che ciò avrebbe un impatto negativo sulle prestazioni del sistema stesso. Ad ogni modo, per motivazioni legate al risparmio energetico, i mote delle reti wireless di sensori non dovrebbero svolgere elaborazioni intensive. Uno dei primi suggerimenti di TinyOS programming, il manuale di riferimento per i programmatori, recita: "Keep tasks short", "fai in modo che le sezioni di codice dei task siano brevi".
 
Gli scopi dichiarati dei progettisti di TinyOS sono:<br />
- ridurre i consumi di energia;<br />
- ridurre il sovraccarico computazionale (overhead);<br />
- minimizzare le dimensioni del sistema operativo;<br />
- supportare le richieste di operazioni frequenti e concorrenti con un alto livello di robustezza ed efficienza.<br />
Per raggiungere questi scopi sono state fatte delle scelte che escludono l'utilizzo dei meccanismi delle interruzioni software e dei cambi di contesto (context switch); tali scelte massimizzano il rendimento della CPU, risorsa costosa in termini energetici.
All'atto della compilazione di un programma NesC, il codice dell'utente e quello delle componenti di sistema utilizzate vengono collegati staticamente e tradotti dal compilatore NesC in un unico file sorgente C; questo viene quindi processato dal compilatore C nativo che genera un unico file binario di dimensioni ridotte. Il sistema ha un unico stack riservato alle variabili locali e uno spazio di memoria riservato alle variabili globali (data). La memoria destinata al codice (text) del file binario eseguibile è assegnata in modo contiguo.