Università Politecnica delle Marche CORSO DI LAUREA SPECIALISTICA IN INGEGNERIA ELETTRONICA ANNO ACCADEMICO 2005 – 2006 STUDIO COMPARATO DEI PRINCIPALI SISTEMI OPERATIVI IN TEMPO REALE Relatore: Chiar.mo Prof. Aldo F. Dragoni Tesi di Laurea di: Colella Guido SOMMARIO Introduzione ai sistemi operativi real-time; Passaggio dagli OS ai sistemi operativi di natura realtime; Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI; Un’estensione firm real-time di Linux: il KURT; TinyOS e Mantis: uno sguardo all’immediato futuro degli RTOS; Conclusioni sullo studio dei sistemi operativi realtime; 2 EVOLUZIONE DEI CALCOLATORI ELETTRONICI Introduzione ai sistemi operativi real-time 3 APPLICAZIONI DEI SISTEMI OPERATIVI REAL-TIME (1) Introduzione ai sistemi operativi real-time 4 APPLICAZIONI DEI SISTEMI OPERATIVI REAL-TIME (2) …e ancora : Controllo sismico Controllo del microclima in edifici “Sensing” per la sicurezza e strategico Domotica & elettronica consumer Musei interattivi Agricoltura intelligente Navigazione robotica …….e tantissime altre Introduzione ai sistemi operativi real-time 5 SCENARIO DI UN SISTEMA OPERATIVO REAL-TIME All’interno di tali contesti applicativi gli RTOS (acronimo di Real-Time Operative System) si collocano come: 1. Sistemi operativi capaci di eseguire tutti i propri “tasks” senza violare specifici vincoli temporali; 2. Il tempo di esecuzione dei tasks può essere calcolato a priori e in modo deterministico sulla base della configurazione sia hardware che software del sistema; 3. Sistemi contraddistinti dal fatto che, la correttezza della risposta dipende non solo dai valori che assume l’uscita dell’elaboratore ma anche dal tempo in cui questi vengono prodotti; pertanto, il tempo del sistema deve essere necessariamente sincronizzato con il tempo dell’ambiente circostante Introduzione ai sistemi operativi real-time 6 OSSERVAZIONI SUL REAL-TIME E’ importante sottolineare alcune caratteristiche che contraddistinguono un RTOS che spesso possono dar luogo ad equivoci o ad interpretazioni errate specie per chi si avvicina per la prima volta in tale contesto: Anzitutto, un sistema in tempo reale non è necessariamente un sistema veloce; ossia “real-time” non è sinonimo di “veloce” ; Il concetto di velocità è sempre relativo ad uno specifico ambiente; La velocità deve comunque garantire la correttezza; L’obiettivo di un RTOS è quello di garantire la tempistica di ogni singolo task, mentre l’obiettivo di un sistema veloce è quello di minimizzare il tempo medio di risposta dei vari tasks; Il tempo medio di risposta non può essere preso come un parametro significativo nel real-time; Introduzione ai sistemi operativi real-time 7 RTOS ALL’INTERNO DELLA SCALA GERARCHICA DEGLI OS Ha delle periferiche di I/O che sono architetture di calcolatori diffuse in ambiente industriale e biomedico; La memoria di massa non è un disco fisso bensì una memoria flash; è un sistema “speciale” che deve solo assolvere il compito specifico per cui è stato programmato i sistemi Real-time possono essere considerati Embedded ma non viceversa devono soddisfare precisi vincoli temporali per quel che concerne l’esecuzione dei propri tasks; devono essere caratterizzati non dalla velocità di esecuzione (parametro insignificante per il real-time), ma dalla “predicibilità” in quanto real-time non è sinonimo di “veloce” ma di “predicibile”; Introduzione ai sistemi operativi real-time 8 CAUSE DI INDETERMINISMO Si nota che per realizzare un valido sistema real-time, bisogna cercare di “emarginare”, nella maniera più efficace possibile, o quanto meno ridurre, le cause di indeterminismo che affliggono l’esecuzione di ogni singolo task. Queste ultime possono essere di diversa natura: 1. Architetturiale - Cache, pipelining, interruptus, DMA; 2. Operativo - Scheduling, sincronizzazione, comunicazione; 3. Linguaggio - Non hanno esplicito supporto per il tempo; 4. Metodologie progettuali - Mancanza di tecniche di analisi e verifica. Introduzione ai sistemi operativi real-time 9 PREDICIBILITA’ IN FUNZIONE DELLA TIPOLOGIA DI SCHEDULER da un’analisi superficiale potrebbe risultare che solamente scheduler ciclici garantirebbero un alto valore di predicibilità; la scelta di uno scheduler diverso da quello ciclico, garantisce ancora predicibilità Scheduler ciclico: tasks attivati sempre in maniera predefinita Determinismo Scheduler basato sulle priorità: tasks attivati in base a priorità e ready queue, ma a livello macroscopico il comportamento può essere predetto La predicibilità è un requisito di correttezza per le applicazioni real-time Introduzione ai sistemi operativi real-time 10 SOMMARIO Introduzione ai sistemi operativi real-time; Passaggio dagli OS ai sistemi operativi di natura realtime; Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI; Un’estensione firm real-time di Linux: il KURT; TinyOS e Mantis: uno sguardo all’immediato futuro degli RTOS; Conclusioni sullo studio dei sistemi operativi realtime; 11 PREMESSA Per un’analisi più prolifica delle numerose famiglie di RTOS è opportuno scindere il problema alla base diversificando anzitutto almeno due tipologie implementative: Sistemi RTOS progettati appositamente che non si basano su OS già esistenti sul mercato; Sistemi RTOS ottenuti mediante l’adattamento di OS originari già esistenti sul mercato; Per la realizzazione di tale elaborato si è fatto riferimento quasi esclusivamente alla prima tipologia implementativa, ed in particolar modo a sistemi derivanti dalla piattaforma Linux consentendo quest’ultima risorse di tipo “Open Source” ed un ottima documentazione di base. Passaggio dagli OS ai sistemi operativi di natura real-time 12 CARATERISTICHE STRUTTURALI DI LINUX OS : LO SCHEDULING la politica del Time-sharing letteralmente “uccide” il real-time perché in quest’ultimo il tempo di esecuzione deve essere conosciuto a priori, mentre in Time-sharing non è affatto predicibile. Passaggio dagli OS ai sistemi operativi di natura real-time 13 PROBLEMATICHE PER IMPLEMENTAZIONE DI LINUX IN REAL-TIME Dati relativi al kernel 2.4 Lo scheduler di Linux ha un taglio “general purpose”.Ciò sostanzialmente è fatto per distribuire equamente le risorse ai tasks in esecuzione; Attualmente Linux non fornisce alcuna interfaccia per comunicare allo scheduler la possibile natura real-time di un task o dati specifici circa il suo timing (deadlines, computational times…); Il kernel non è preemptable (ciò significa sostanzialmente alta latenza di scheduling per scenari real time); Kernel Control Path non interrompibili( ma piuttosto reentrant, quindi annidabili) introducono in determinismo nel sistema; Kernel non ancora 100% reentrant(alcune funzioni disabilitano gli interrupt globalmente sulla CPU corrente per preservare strutture dati condivise). Tali funzioni sono interrompibili solo attraverso un NMI; La frequenza massima di richiamo della schedule() di Linux è 10ms(corrispondente al minimo time-quantum) che non risulta sufficiente per scenari real-time e oltretutto non vi è alcuna garanzia su tale periodo. Passaggio dagli OS ai sistemi operativi di natura real-time 14 LA LATENZA IN LINUX Latenza di scheduling : distanza temporale tra il segnale (stimolo) di wakeup che un evento è accaduto e l’istante in cui lo scheduter lancia il thread che è in attesa che quel segnale arrivi (risposta). Interrupt latency; aumentano Interrupt Handler duration; Scheduler Latency; Scheduling duration; Response Time riducono Preemption patches lanciare più frequentemente la schedule(); Low latency patches introduzione di punti di prelazione nel codice del kernel Passagio dagli OS ai sistemi operativi di natura real-time 15 CON KERNEL 2.6 SI VA VERSO IL REAL TIME Punti salienti: Modifica della struttura generale dello scheduler (ad esempio, invece di un’unica coda per tutti i task del sistema esiste una coda per ognuno dei 140 livelli di priorità su ogni CPU); Frequenza interna del clock portata da 100 Hz (kernel 2.4) a 1000 Hz; Parte del kernel è divenuta preemptable; Eliminati numerosi “Big Locks”; Compatibilità con Preemption e Low Latency Patches; Migliorato il sistema di gestione di I/O. risultati: Linux 2.6.9 without Preemption patch Passaggio dagli OS ai sistemi operativi di natura real-time Linux 2.6.9 with Preemption patch 16 PREDISPOSIZIONE DI LINUX AD UNA POLITICA REAL-TIME Linux è un sistema operativo di alto livello ed è Open Source; E’ molto ben documentato; Nasce nell’ambiente universitario ed è naturalmente inserito in svariati contesti di ricerca; E’ compatibile con i maggiori standard relativi al software (POSIX etc…); Ha buone prestazioni già in versioni base (senza modifiche strutturali); La struttura monolitica lo rende adatto ad essere utilizzato in scenari Embedded; Il mondo dell’industria è interessato ad applicazioni di Linux in svariati settori: GPS (Global Positioning System), HDTV (High Definition TV), DVBRCS, cellulari, PDA, space segment, signal processing, radar system, robotica… Sono attualmente disponibili numerose implementazioni di architetture software Open Source per modificare Linux dotandolo di funzionalità realtime da cui attingere spunto… Passaggio dagli OS ai sistemi operativi di natura real-time 17 STRATEGIE PER IL REAL-TIME IN LINUX Esistono due possibili approcci: Il PREEMPTABLE KERNEL sostituisce gran parte del kernel di Linux Il RESURCE KERNEL gestisce il kernel di Linux come un normale task a bassa priorità Passaggio dagli OS ai sistemi operativi di natura real-time 18 PANORAMICA DEI SISTEMI OPERATIVI REAL-TIME PRESENTI SUL MERCATO: DISTRIBUZIONI COMMERCIALI RTLinuxPro(FSMLabs). RTCore fornisce un ambiente real-time POSIX in cui Linux gira come task a bassa priorità. Limiti prestazionali: quelli dell’ hardware. Latenza di scheduling sotto 20 microsecondi sulla maggior parte delle piattaforme. MontaVista RTLinux. Basato su miglioramenti a MontaVista Linux. Preemptable kernel + real-time scheduler + frameworks. BlueCat RT (LynuxWorks). Microsistema operativo real-time (non Linuxbased) che gira Linux come processo a bassa priorità. BlueCat RT è incentrato sulle basse latenze di interrupt raggiunte grazie al core ridottissimo e altamente performante. uLinux (Lineo Solutions). Footprint ridottissimo, tempi di startup e shutdown minimi, prestazioni real-time rendono adatto questo OS made in Japan per l’utilizzo nell’elettronica (dispositivi embedded). FlightLinux (NASA). Versione real-time di Linux adattata ad applicazioni spaziali al Goddard Space Flight Center e testata sullo Space Shuttle (progetto nato come Open Source ma i sorgenti non sono attualmente pubblicati). Passaggio dagli OS ai sistemi operativi di natura real-time 19 PANORAMICA DEI SISTEMI OPERATIVI REAL-TIME PRESENTI SUL MERCATO: DISTRIBUZIONI OPEN SOURCE RTLinux. Hard Real Time mini sistema operativo che gira Linux come processo a minima priorità rendendolo totalmente preemptable. L’ultima versione supporta user-space RT programming. La versione MiniRTL è adatta ad utilizzi embedded. RTAI (Dipartimento di Ingegneria Aerospaziale del Politecnico di Milano). Simile ad RTLinux ma con varie funzionalità in più tra cui LXRT Layer che permette di controllare task real-time dallo user-space memoryprotected di Linux . AtomicRTAI è la versione a ridotto footprint. KURT. The Kansas University RealTime Linux. Implementazione realtime di Linux che permette lo scheduling degli eventi con periodo di 10 microsecondi. RED-Linux. Ridotti kernel blocking times, rapidi tempi di risposta, scheduler modularizzato “modificabile” a runtime. Università della California, Irvine. QLinux. Implementazione tagliata per garantire caratteristiche di QoS per task soft real-time. Tagliata per l’utilizzo in applicazioni multimediali, telefonia mobile… Passaggio dagli OS ai sistemi operativi di natura real-time 20 SOMMARIO Introduzione ai sistemi operativi real-time; Passaggio dagli OS ai sistemi operativi di natura realtime; Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI; Un’estensione firm real-time di Linux: il KURT; TinyOS e Mantis: uno sguardo all’immediato futuro degli RTOS; Conclusioni sullo studio dei sistemi operativi realtime; 21 RTLINUX : UN’AGGIUNTA HARD REAL-TIME A LINUX (1) RTLinux, sviluppato originariamente nell’Istituto di Tecnologia del New Mexico, si pone in commercio come un prodotto “open-source”. Componenti specifici di RTLinux vengono rilasciati sotto licenza GPL, mentre i componenti di Linux vengono rilasciati sotto la licenza di Linux standard. Il codice sorgente viene liberamente distribuito. Le versioni non a licenza GPL dei componenti di RTLinux sono disponibili tramite gli FSMLabs. RTLinux è un sistema operativo hard real-time che gira in Linux come il suo thread di esecuzione a più bassa priorità. Il thread di Linux è reso completamente prelazionabile così che i threads real-time ed i gestori di interrupts non possano venir mai ritardati da operazioni non real-time. Le applicazioni real-time consistono in tasks real-time che sono incorporati in moduli caricabili del kernel ed in processi di Linux/Unix che si occupano dei registri dati, del display, dell’accesso alla rete, e di altre funzioni che non sono vincolate da una caratterizzazione del comportamento nel caso peggiore (worst case). Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI 22 RTLINUX : UN’AGGIUNTA HARD REALTIME A LINUX (2) I threads real-time in RTLinux possono comunicare con i processi Linux attraverso una memoria condivisa oppure mediante una particolare interfaccia simile ad un file in tal modo le applicazioni real-time possono far uso di tutti i potenti servizi non real-time di Linux (incluso Networking, Grafica, Sistemi Windowing, Packages per l’analisi dei dati, Drivers per Linux, standard POSIX API). Per esempio è piuttosto semplice comporre uno script che visualizzi dati in Xwindows, risponda a comandi trasmessi da rete e collezioni dati da un task real-time. In pratica, l’approccio ad RT-Linux ha avuto molto successo in quanto si è dimostrato essere un approccio vincente. La latenza di interrupt nel caso peggiore su un PC 486 a 33 MHz si assesta ben sotto i 30 µs, vicino al limite dell’hardware. Molte applicazioni sembrano trarre beneficio da una “sinergia” tra il sistema real-time ed il sistema operativo standard ottimizzato (average case). Per esempio, le applicazioni di acquisizione dati sono spesso composte da un semplice polling o un task real-time di tipo interrupt-driven che conduce i dati attraverso una coda al processo Linux che si occupa di gestire il logging ed il display. Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI 23 VERSIONI… RTLinux V3 Beta. E’ stato immesso sul mercato il 3 Gennaio del 2000 e rispetto alle precedenti versioni essa aggiunge il supporto PowerPC RTLinux V1. Si tratta di un sistema eccezionalmente stabile che viene utilizzato sia in prodotti commerciale che in ambienti di laboratorio. Fornisce inoltre una semplice libreria API per eseguire, iniziare, e fermare lo scheduling dei tasks realtime. RTLinux V2. Offre una versione semplificata dell’ API dei pthreads POSIX ed è conforme allo standard “Minimal Realtime” di POSIX (all’interno del quale un componente realtime è considerato un processo POSIX singolo e multithread). L’obiettivo del kernel V2 è senza dubbio quello di accostarsi il più possibile allo standard POSIX, senza attuare alcun sacrificio dal punto di vista della semplicità e velocità del sistema, ma al tempo stesso fornendo spunti ed aggiunte per realizzare una piena compatibilità con POSIX. V2, messo sul mercato nel Novembre del 1999, è un sistema x86 capace di SMP. Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI 24 STORIA DI RTAI Al fine di rendere Linux utilizzabile per applicazioni hard real-time, i membri del Dipartimento di Ingegneria Aerospaziale del Politecnico di Milano (DIAPM) crearono un livello di astrazione hardware real-time (RTHAL) sul quale poter implementare un interfaccia per applicazioni real-time RTAI. Sfortunatamente, ulteriori indagini rivelarono che il kernel di Linux disponibile nel vicino 1996, ovvero il 2.0.25, non era ancora pronto ad accogliere tale innovazione. Nello stesso periodo, un gruppo capeggiato da Victor Yodaiken all’Istituto del New Mexico of Minino and Technology (NMT) , introdusse la sua versione real-time di Linux (RTLinux) che fornì al team DIAPM l’opportunità di apprendere ulteriori nozioni sul kernel di Linux, sull’ hardware e sulle modifiche necessarie a rendere prelazionabile e deterministico lo scheduling. Il punto di svolta ci fu poi nel 1998 quando fu sviluppato il kernel di Linux 2.2.x che ebbe come punto di forza i noti miglioramenti proposti dall’RTLinux, incluso le molte e necessarie modifiche architetturiali all’interfaccia Linux/hardware. Tali modifiche, combinate con l’esperienza acquisita dal team DIAPM durante il loro lavoro di evoluzione dell’NMT-RTLinux kernel, e con le nozioni informatiche del 1996, sfociarono nella creazione della piattaforma RTAI. Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI 25 CARATTERISTICHE DI RTAI RTAI è un sistema operativo “guaranteed-based” che assicura uno scheduling hard real-time ed inoltre conserva tutte le caratteristiche ed i servizi del Linux standard. In aggiunta, RTAI fornisce un supporto sia per UP che per SMP con la capacità di assegnare sia tasks che IRQs alle specifiche CPUs, x486 e Pentiums, schedulers one-shot e periodici, sia inter-Linux che intra-Linux shared memory, compatibilità con lo standard POSIX, supporto FPU, sincronizzazione tra tasks, semafori, sincronizzazione mutua, code per messaggi, RPCs, mailboxes, la possibilità di utilizzare le system call RTAI direttamente da dentro lo user-space standard, e tante altre funzionalità. Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI 26 RTAI: REAL-TIME APPLICATION INTERFACE RTAI supporta ben 5 moduli caricabili del core che conferiscono al sistema le proprietà real-time desiderate “a richiesta”(on-demand) rtai, che fornisce la struttura base rtai; rtai_fifos, che altro non è che un adattamento di NMT RTLinux FIFOs (file in, file out); rtai_sched, che fornisce al sistema uno scheduling one-shot oppure periodico; rtai_mups, che consente l’uso simultaneo degli schedulers one-shot e periodico oppure di due schedulers periodici, ognuno avente il proprio clock di base differente; rtai_shm, che alloca la memoria propria di inter-Linux tra i tasks real-time ed i tradizionali processi di Linux, ed anche intra-Linux come sostituto per UNIX V IPC; Come tutti i moduli del kernel, questi possono essere caricati in memoria e deallocati da essa (usando rispettivamente i comandi standard di Linux insmod ed rmmod) quando le loro rispettive funzionalità sono richieste o meno Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI 27 SCHEMA ARCHITETTURIALE Per ogni implementazione, il sistema operativo Linux è eseguito come il task a più bassa priorità di un piccolo sistema operativo real-time. Pertanto Linux non apporta cambiamenti alle sue operazioni sia dal punto di vista utente che dal punto di vista kernel, eccetto quello di permettere l’esecuzione solo quando non ci sono già tasks real-time che devono essere eseguiti. Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI 28 ARCHITETTURA INTERNA riduce i cambiamenti al kernel file di source del kernel che si manifestano standard di Linux mediante l’aggiunta di un in modifiche ed aggiunte ai numerosissimi livello di astrazione hardware (HAL) composto da una struttura di puntatori a vettori di files sorgenti del kernel di Linux interrupt e da funzioni che permettono di aumento del codice da memorizzare abilitare/disabilitare gli interruptus RTLinux applica molti cambiamenti ai RTAI Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI 29 STRUTTURA COMPLETA DI RTAI L’HAL viene implementato modificando meno di 20 linee di codice esistente, ed aggiungendo circa 50 linee di nuovo codice. Questo approccio è sicuramente più elegante in quanto minimizza l’investigazione del kernel standard di Linux e localizza più facilmente il codice di gestione degli interrupt. Un altro vantaggio della tecnica HAL è che mediante essa è possibile far tornare Linux al suo ruolo standard (general-purpose) cambiando semplicemente la posizione dei suoi puntatori dalla struttura RTHAL (real-time) a quella originale. Ciò si è dimostrato abbastanza utile quando le operazioni real-time sono inattive o quando si prova ad isolare virus di natura oscura. “…Molti studiosi suppongono che il livello HAL possa causare inaccettabili ritardi e latenze per via del percorso di analisi e monitoraggio dei tasks real-time. In realtà negli ultimi anni l’impatto dell’HAL sulle performances del kernel è divenuto trascurabile per via della maturità e del progetto del kernel di Linux…” Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI 30 RTAI: SCHEDULERS E TIMERS SUPPORTATI Si nota che dal momento che il MUP utilizza l’APIC (advanced programmable interrupt controller) timer, esso non può operare sotto SMP e richiede pertanto che ogni task scedulato MUP sia eseguito all’interno di una specifica CPU (da qui la designazione MultiUniProcessor). Comunque il MUP conserva tutte le coordinate ed i servizi IPC in modo che le altre proprietà non vengano perse Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI 31 RTLinux vs RTAI La seguente tabella riassume in maniera alquanto semplice le principali differenze risultanti dall’analisi svolta dei due RTOS. Ovviamente non vengono incluse le caratteristiche che caratterizzano entrambi i sistemi: RTLinux RTAI Company FSM Labs DENX Software Engineering, Pengutronix and Sysgo Realtime Solutions Arch i386, PPC, ARM i386, MIPS, PPC, ARM, m68k-nommu License GPL - Comercial LGPL - GPL API POSIX custom Memory shared dynamic and shared Debug GDB, Event tracer Cross GDB, LTT IPC FIFO's FIFO's, Named FIFO's, Mailboxes, messages, PQueues, net_rpc User space Real Time Signal handlers LXRT soft, LXRT hard, Mini LXRT Misc RT-Lab Octave, proc, Watchdog, Scripting, Xenomai Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI 32 SOMMARIO Introduzione ai sistemi operativi real-time; Passaggio dagli OS ai sistemi operativi di natura realtime; Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI; Un’estensione firm real-time di Linux: il KURT; TinyOS e Mantis: uno sguardo all’immediato futuro degli RTOS; Conclusioni sullo studio dei sistemi operativi realtime; 33 L’RTOS KURT Il KURT (acronimo di Kansas University Real Time Linux) altro non è che una modifica real-time (firm) al sistema operativo Linux, che consente lo scheduling di eventi real-time alla risoluzione di 10µs. Piuttosto che contare su uno scheduling basato su priorità o su “rigidi” schedules periodici, schedules del sistema operativo KURT sono esplicitamente specificati dal programmatore dell’applicazione. KURT può tuttavia funzionare in due modi: “focussed mode”, dove solo ad i processi real-time è permessa l’esecuzione; ed il “mixed mode”, dove l’esecuzione dei processi real-time ha ancora la precedenza, ma è consentito a tutti i processi non real-time di essere eseguiti purchè all’interno dei “buchi” dello schedule real-time. Una semplice system call permette il passaggio tra le due modalità. Il KURT “gira” su una piattaforma compatibile x86 con un contatore di tipo “timestamp” (ossia i processori Pentium o i loro equivalenti). Effettuare il “porting” di KURT ad altre architetture, richiede tuttavia solo minime aggiunte. Un'estensione firm real-time di Linux : il KURT 34 KURT: CONCETTI CHIAVE Real time framework il KURT si compone di una struttura real-time (framework) che si preoccupa di realizzare lo scheduling di eventi real-time. Quando un evento real-time sta per essere eseguito, la struttura real-time chiama il gestore degli eventi (event handler) dell’ RTmod associato. RTMods moduli real time, ovvero moduli del kernel che possono essere caricati a “runtime” ottimizzando così certe azioni quando vengono invocati. Gli sviluppatori della piattaforma KURT hanno scritto un RTMod che cambia il contesto al processo utente specificato non appena è invocato. Lo schedule real-time è un file che specifica come ed in che momento l’RTMod necessiti di essere invocato. Questo schedule viene poi passato al framework real-time che si prende cura dello scheduling di ogni evento invocando, nel momento giusto, l’appropriato gestore degli eventi. Gli sviluppatori del KURT hanno realizzato un semplice programma che genera questo schedule; rt-id altro non è che il numero identificativo associato ad ogni processo del KURT. Ogni processo del KURT può infatti richiedere (o essere dato da) un rt-id non appena esso viene registrato nel modulo di processo settando set_rtparams. Un processo KURT può modificare il suo rt_id utilizzandola medesima system call; Registrazione degli RTMods un RTMod registra se stesso all’interno del framework real-time provvedendo ad un nome, a dei puntatori a funzione per i gestori degli eventi, all’inizializzazione, ed alla sua eventuale ripulitura(clean up). Quando un modulo real-time viene registrato, gli viene assegnato un numero identificativo che viene utilizzato per schedulare i suoi eventi; Un'estensione firm real-time di Linux : il KURT 35 KURT: LO SCHEDULING Scheduling Modes modalità: il framework real-time può schedulare eventi secondo due FROM_MEM : Nella seguente modalità , il file di schedule viene completamente letto nella memoria del kernel e solo poi lo scheduling di ogni evento ha luogo. E’ possibile ripetere questo schedule per un numero di volte in maniera ciclica. Lo svantaggio di questa modalità è che richiede abbastanza memoria per occupare il file di schedule completo. Si pensi infatti che ogni evento occupa circa 24 bytes di memoria. FROM_DISK : In questa modalità, il file di schedule viene letto nella memoria del kernel una pagina per volta. Arbitrariamente, lunghi schedules possono essere presentati al framework real-time per lo scheduling. Lo svantaggio di questa modalità è che ci potrebbero essere alcune distorsioni nello scheduling degli eventi a causa dell’operazione di lettura intermittente da disco. UTIME il KURT utilizza un sistema “utime” per schedulare gli eventi con una risoluzione in termini di microsecondi (µs). Gli eventi possono anche esser schedulati con una risoluzione di 10 ms se UTIME non è installato. Un'estensione firm real-time di Linux : il KURT 36 PERFORMANCES: DISPATCH TIME PER I MODULI DEL KERNEL E PER I PROCESSI REAL-TIME Per testare il tempo richiesto ad invocare un modulo del kernel ed un processo realtime, basta un semplice processo real-time KURT che viene eseguito ogni 10ms (nella modalità periodica). Ogni volta che cicla, il programma restituisce il tempo corrente e lo immagazzina in memoria. Dopo che il programma ha terminato la sua esecuzione, i tempi vengono stampati al fine di permettere un immediato confronto. Le informazioni temporali, inoltre, sono state anche conservate per valutare la differenza tra quando un evento occorre nel tempo e quando l’RTMod inizia realmente la sua esecuzione. Un'estensione firm real-time di Linux : il KURT 37 PERFORMANCES: KURT vs SCHED FIFO SOFT REAL TIME …efficienza di scheduling SCHED_KURT_PROCS (modalità focus ) SCED_FIFO Un'estensione firm real-time di Linux : il KURT SCHED_ALL_PROCS (modalità mixed) 38 SCHED_FIFO: performances all’aumentare del numero dei processi (interrupts dell’hardware VALUTAZIONE DELLE esterno considerevole numero di contex switch prelazionabili affligge le prestazioni); PERFORMANCES(1) SCHED_KURT: le performances sostanzialmente restano invariate quando viene aumentato il numero dei processi (c’è un minimo contex switch tra queste applicazioni); SCHED_KURT: non c’è quasi differenza tra la modalità SCHED_KURT_PROCS e SCHED_ALL_PROCS (Ciò si verifica perché il sistema è essenzialmente idle eccetto per i processi da testare); SCHED_KURT: non c’è un vero e proprio meccanismo di controllo dell’ ingresso che previene l’overloading della CPU. Dal momento che ogni processo setta le sue richieste di processamento a 300µs (è l’attuale tempo di CPU richiesto dal processo per completare un’iterazione del suo ciclo), non sono permessi più di 30 processi all’interno del sistema. SCHED_FIFO: qualsiasi numero dei processi dovrebbe essere permesso all’interno del sistema. Questo dovrebbe portare ad un ulteriore degradazione delle performances; quindi… A prescindere dal numero dei processi, il KURT schedula ogni applicazione al tempo appropriato (in rosso). KURT con o senza focalizzazione è un’alternativa fattibile per lo scheduling firm real-time dei Un'estensione firm real-time di Linux : il KURT 39 processi. VALUTAZIONE DELLE PERFORMANCES (2) … ed inoltre… Se un sistema è caricato, le performances dello scheduler esplicito nella modalità SCHED_ALL_PROCS potrebbero essere distorte nel momento in cui gli interrupts vengono disabilitati da altre parti del sistema operativo. Worst case: interrupts disabilitati dall’attività di backgraund del disco (infatti in Linux disabilita gli interruptus per la massima durata del tempo) effetto sulle performances degli schedulers FIFO e KURT Si può notare che persino in presenza di “background disk activity”, lo SCHED_KURT funziona ancora molto meglio dello SCED_FIFO. Un'estensione firm real-time di Linux : il KURT 40 SOMMARIO Introduzione ai sistemi operativi real-time; Passaggio dagli OS ai sistemi operativi di natura realtime; Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI; Un’estensione firm real-time di Linux: il KURT; TinyOS e Mantis: uno sguardo all’immediato futuro degli RTOS; Conclusioni sullo studio dei sistemi operativi realtime; 41 OS PER APPLICAZIONI EMBEDDED Sviluppare un sistema i cui componenti vengono compilati insieme all’applicazione (come TinyOS e BTnode system software) Un sistema operativo realizzato per un ambito embedded, deve avere alcune caratteristiche di base: Ridotte dimensioni Basso consumo durante l’elaborazione Consumo pressoché nullo in stato di “idle” Deve gestire la concorrenza Implementare protocolli di rete a seconda della periferica di rete utilizzata Protocolli poco dispendiosi in termini di energia(TCP/IP è in genere inapplicabile) Deve inoltre fornire un’astrazione per i dispositivi hardware (sensori e attuatori) TinyOS e Mantis: uno sguardo all'immediato montati sul sensore futuro degli RTOS .…si distinguono generalmente due approcci: Sviluppare un sistema che includa i tradizionali strati di software dei sistemi general purpose in versione ridotta (ad es. BerthaOS e MANTIS) 42 IL PRIMO APPROCCIO: IL TINYOS OS di tipo “open source” specificamente ideato per reti “embedded” di sensori wireless (attualmente è il più affermato) sviluppato dall’università di Berkeley in California per la tecnologia motes Modello di programmazione tagliato per applicazioni attivate da eventi e con una occupazione ridottissima (il core richiede solo 400 byte di dati) essendo realmente inserite nel sistema solo le funzionalità richieste Appartiene al primo approccio, dunque i componenti vengono montati assieme all’applicazione: ciò consente una singola applicazione in esecuzione in un dato momento Tuttavia tale sistema permette di avere bassissimi consumi (non esistendo in genere context switch dal momento che gli scheduler seguono una politica FIFO run to completion, ovvero un task non può interrompere un altro task) Lo svantaggio derivante da tale approccio è la limitata versatilità e i seri vincoli di riconfigurabilità TinyOS e Mantis: uno sguardo all'immediato dell’applicazione futuro degli RTOS Mica Mote (Berkeley 2001) 43 IL MODELLO A COMPONENTI DEL TINYOS Scambia dati per mezzo di una rete di componenti che comunicano tra loro mediante un’interfaccia per gli “eventi” (asincroni) e per i “comandi” (sincroni) Utilizza il nesC, ovvero un linguaggio di programmazione evoluto(derivato dal C) per sistemi embedded connessi in rete (per es. Mote) Mica Mote: 128KB di codice, 4KB di dati, ed una flash di 512KB Hardware abstraction mappa le funzionalità sw su quelle hw creando …3 possibili categorie di componenti… un’astrazione dello stesso utilizzabile dai moduli superiori(ad TinyOS e Mantis: uno sguardo all'immediato futuro degli RTOS es. un componente che legge/ scrive 1bit sul canale radio) High level software component sono quelli di livello più alto e si occupano di eseguire algoritmi che prescindono dal particolare hardware(ad es. il componente che implementa il protocollo di routing) Synthetic hardware simulano il comportamento di hardware più sofisticato di quello realmente presente sul sensore(ad es un componente che compone 8 bit e li invia a quelli di livello superiore) 44 MIGLIORAMENTO DELLO SCHEDULER DELLA VERSIONE 1.0 CONCETTO DI PRIORITA’ TinyOS 1.0. (curva in blue): si nota come la resa dei pacchetti (throughput) si riduca in presenza di un task locale ad 8Hz (125 ms) con tempi di esecuzione variabili all’interno di una piattaforma TinyOS 1.0. Non appena il tempo di esecuzione di un task locale aumenta (overload del sistema), il throughput dei pacchetti radio diminuisce sensibilmente (scheduler FIFO per tutti i tasks). TinyOS 2.0. (curva in viola): l’aggiunta della priorità per i tasks, per differenziare i tasks real-time dai tasks ordinari, migliora sostanzialmente il throughput in caso di overload del sistema (perché magari è in esecuzione un task locale, e quindi il processamento di tale pacchetto bloccherebbe completamente un nodo sensore), Attualmente presenta uno scheduler FIFO run to completion con due livelli di priorità: quello normale per i task e quello più alto per gli eventi, che possono interrompere i task (preemption). TinyOS e Mantis: uno sguardo all'immediato futuro degli RTOS 45 UNO SGUARDO AL SECONDO APPROCCIO: MANTIS OS Mantis OS è il sistema operativo della piattaforma MANTIS che si basa sui sensori nymph. Appartiene al secondo approccio, quindi include i tradizionali strati di software dei sistemi general purpose in versione “ridotta” Concettualmente è opposto a TinyOS, infatti esso ha la struttura di un OS general purpose, è organizzato in livelli, è multithread e contiene uno scheduler preemptive con time slicing, meccanismi di sincronizzazione attraverso sezioni in mutua esclusione, uno stack protocollare standard per la rete e device drivers Questo approccio accelera l’apprendimento della nuova tecnologia e aumenta la versatilità (potendo eseguire più applicazioni in contemporanea), ma pone seri problemi di prestazioni e di consumi. Il componente “command server” permette di amministrare da remoto il singolo sensore attraverso una shell UNIX-like ...si nota la somiglianza dell’architettura con i sistemi UNIX … TinyOS e Mantis: uno sguardo all'immediato futuro degli RTOS 46 MANTIS: KERNEL, SCHEDULER & STACK Le funzionalità offerte dal kernel di MANTIS OS sono un sottoinsieme dell’interfaccia POSIX, in particolare lo scheduler priority-based (secondo l’algoritmo round-robin) Per la sincronizzazione e la concorrenza il sistema supporta semafori sempre secondo lo standard posix. La memoria RAM è divisa in due sezioni: statica dove vengono allocate al momento della compilazione le varabili globali; heap dove vengono allocati i thread al momento dell’esecuzione. Non è possibile allocare manualmente memoria dinamica al momento. Per quanto riguarda la comunicazione di rete, MANTIS OS prevede uno stack protocollare strutturato su quattro livelli: fisico, MAC, network e applicazione. Il sistema è molto più sofisticato e versatile di quello di TinyOS, infatti possono coesistere meccanismi di routing diversi (unicast, flooding, multicast). Di contro questo sistema è prestazionalmente più scadente dell’ Active Messages utilizzato dal TinyOS, essendo l’elaborazione del singolo pacchetto più lunga, e comportando un continuo scambio di contesto di esecuzione al momento della comunicazione di rete. Questo causa consumi maggiori. TinyOS e Mantis: uno sguardo all'immediato futuro degli RTOS 47 SOMMARIO Introduzione ai sistemi operativi real-time; Passaggio dagli OS ai sistemi operativi di natura realtime; Le più diffuse alternative hard real-time oggi sul mercato: RTLinux ed RTAI; Un’estensione firm real-time di Linux: il KURT; TinyOS e Mantis: uno sguardo all’immediato futuro degli RTOS; Conclusioni sullo studio dei sistemi operativi realtime; 48 CONSIDERAZIONI FINALI:PANORAMICA COMPLETA Fare un confronto tra sistemi hard, soft e firm real-time è alquanto difficile Tabella finalizzata a permettere un immediato confronto all’interno di un contesto specificatamente “real-time” aggiunge funzionalità al sistema per mezzo di un “resurce kernel” implementato come un modulo caricabile proprietà fornita ai tasks che fa uso della API RK, ma che non può far uso di RK(e della sua API) se si sta gia utilizzando RTAI, vista la mutua esclusività tra i due ..Conclusione.. non c’è un singolo prodotto che offra un set “all-inclusive” di proprietà RT, pertanto molte società offrono tecnologie alternative mutiple (come più miglioramenti per lo scheduler di RTLinux ed RTAI) in modo da soddisfare un range sicuramente più ampio Conclusioni sullo studio dei sistemi operativi 49 di esigenze real-time real-time CONSIDERAZIONI FINALI: OS vs EVENT-DRIVEN Caratteristiche General purpose OS Event-driven OS Models of Computation(MOC) Multi-tasking Comunicazione tra macchine a stati finiti estese (EFSM) Scopo d’uso Generale Rivolto a sistemi eventdriven Costi di comunicazione Alti Bassi Frequenza di comunicazione Bassa Alta Richiesta di memoria Ampia Bassa OS type Processore General Purpose ARM7 thumb Event-driven Event-driven Memoria totale istruzioni Memoria dati 10.096 22324 54988 ARM7 thumb 5312 8000 2800 8 bit RISC 2740 3176 709 confronto tra la diversa richiesta di memoria tra le due differenti politiche di OS quindi.. Con la medesima scelta del processore(ARM7 a 16 bit), TinyOS necessita di metà memoria istruzioni e di circa 1/30 di memoria dati. Gli studi dimostrano che il consumo di potenza di una SRAM scala approssimativamente con la capacità Questo significa che in TinyOS la potenza della memoria istruzioni può essere ridotta di 1.6x 22324 e quella della memoria dati rispettivamente di 4.2x 54988 Applicazione confronto generale tra le caratteristiche degli OS “general purpose” e quelle degli “eventdriven” 8000 2800 Utilizzando un più semplice processore come quello RISC a 8-bit, si potrebbe ulteriormente ridurre la dimensione della memoria ed il consumo di potenza. Conclusioni sullo studio dei sistemi operativi real-time 50 CONSIDERAZIONI SULLE PERFORMANCE: OS vs EVENT-DRIVEN confronta il conteggio dei cicli totali del processore: ben 16365 del general purpose contro i 2554 del TinyOS. quest’ultimo mostra un fattore di ben 8 miglioramenti, che si traduce in un fattore di 8 riduzioni nel consumo di potenza del processore. confronta i costi dei due OS (le porzioni piu basse della barra) in termini di percentuale dei cicli totali. come indicazione della propria inefficienza, il sistema operativo general- purpose presenta un costo di OS pari all’86% mentre TinyOS circa del 10%. Esempio: stima di potenza realmente risparmiata da un processore e da i suoi blocchi di memoria: Con tecnologia di 0.18µm e tensione di 1.8V, un ARM7 consuma circa 0.25mW/MHz. Per una memoria di dimensione pari a 64KB per l’acceso alla lettura si consuma circa 0.407mW/MHz mentre per l’accesso alla scrittura circa 0.447mW/MHz. Se si suppone che il 10% delle istruzioni coinvolgono le operazioni di lettura da memoria ed il 10% quelle di scrittura e di allocazione della memoria, oltre alla scalatura del conteggio del ciclo del processore, il consumo di potenza dei due OSs sono rispettivamente: 0.608mW/MHz e 0.053mW/MHz. Cioè, in altri termini, TinyOS presenta un fattore di miglioramento di potenza pari a 12. Conclusioni sullo studio dei sistemi operativi real-time 51