|
Docente/i:
Alessandro Rubini
Denominazione del corso: Sistemi real-time
Codice del corso: 064095
Corso di laurea: Ingegneria Informatica
Settore scientifico disciplinare: ING-INF/05
L'insegnamento è caratterizzante per: Ingegneria Informatica
Crediti formativi: CFU 5
Sito web del corso: http://gnudd.com/srt-2007/
Obiettivi formativi specifici
Lo scopo del corso e` fornire metodologie per lo sviluppo di sistemi in cui sia richiesto il rispetto di vincoli temporali sui processi applicativi e presentare lo sviluppo di sistemi embedded in ambiente GNU/Linux. Al termine del corso lo studente dovrebbe essere in grado di analizzare un problema di controllo in tempo reale e progettarne l'implementazione, come pure saper affrontare le normali problematiche che si incontrano nella realizzazione di un elaboratore industriale per usi specifici.
Programma del corso
Il corso e` diviso in due parti. Nella prima vengono trattate le problematiche di schedulazione e gestione di risorse condivise nei sistemi in tempo reale stretto. Nella seconda vengono trattati i sistemi embedded basati su kernel Linux: dal boot loader alla programmazione in spazio kernel alla realizzazione di un file system.
Sistemi in tempo reale stretto
- Concetti introduttivi: problematiche di progetto di un sistema
real-time; architetture gerarchiche modulari; tempo reale e
prevedibilità; concetto di garanzia; requisiti ideali di un sistema
real-time; modelli di processo e tipi di vincoli; problemi di
schedulazione; tassonomia dei sistemi real-time.
- Algoritmi di schedulazione: schedulazione di processi aperiodici;
schedulazione preemptive e non preemptive; gestione di attività
periodiche; server aperiodici a priorità statica e dinamica.
- Protocolli l'accesso a risorse condivise: il problema dell'inversione di
priorità e analisi delle possibili soluzioni; valutazione dei tempi di
bloccaggio; considerazioni implementative.
- Gestione dei sovraccarichi: controllo del carico dovuto ad attività
aperiodiche attivate da eventi casuali; sovraccarichi in sistemi
caratterizzati da attività periodiche; tecnica del job-skipping; cenni
su processi periodici elastici, problema dell'overrun, tecniche di
protezione temporale e meccanismi di resource reservation.
- Meccanismi a supporto dei sistemi real-time: meccanismi di nucleo per il
supporto di software real-time; temporizzazione; considerazioni
sull'overhead di sistema; comunicazione sincrona e asincrona, bloccante
e non bloccante; gestione delle interruzioni.
- A supporto dell'attività didattica, verrà portato avanti lo studio
dell'architettura del kernel real-time S.Ha.R.K., che implementa in modo
modulare ed intercambiabile numerose soluzioni presentate durante il corso.
Programmazione di sistema
- Ripasso di linguaggio C: preprocessore, macro variadiche, puntatori a
funzione, allocazione statica e dinamica, stringhe e vettori,
strutture dati, little-endian e big-endian, allinemanto dei dati,
programmazione orientata agli oggetti in C.
- Compilazione: compilatore assembler e linker, cross-compilazione,
decompilazione e debugging, uso del gcc, compilazione di applicazioni,
compilazione del boot loader, compilazione del kernel.
- Struttura di un sistema GNU/Linux: kernel, spazio utente, chiamate di
sistema, procedura di avvio del sistema, il processo init, primitive
di comunicazione tra processi.
- Memoria fisica e memoria virtuale: concetti di memoria virtuale
e loro implementazione, DMA, accesso alle periferiche tramite mmap.
- Gestione delle interruzioni: interruzioni ed eccezioni, gestori
di interruzione, multiplexing e condivisione, interruzioni sulla
soglia e sul livello, corse critiche.
- Problematiche di concorrenza: accesso a risorse condivise e corse
critiche, strumenti software per gestire l'accesso concorrente.
Linux Embedded
- Definizione di sistema embedded, requisiti di memoria, processori
supportati.
- Componenti di una distribuzione embedded: busybox, glibc, uclibc.
Tipi di filesystem
- Dispositivi di memoria di massa: NOR flash, NAND flash, dispositivi
esterni (USB, SD, HD, ecc.).
- Applicazioni soft-real-time: primitive per la schedulazione in tempo
reale, limitazioni del modello
Bus periferici
- PCI: indirizzamento geografico, enumerazione, allocazione nello spazio
fisico, allocazione nello spazio virtuale, primitive di accesso alle
periferiche, problematiche di rimozione e inserimento a caldo
- USB: full speed e high speed, controllori USB, classi di dispositivi,
registrazione di un driver, gestione di URB e callback, accesso alle
periferiche dallo spazio utente.
- I2C: controllori I2C e accesso bit-banging, primitive software per la
definizione di un bus i2c, accesso alle periferiche da spazio kernel e
da spazio utente.
- CAN: protocollo di comunicazione, controllori hw, caratteristiche
"real-time" del bus, esempi di applicazioni.
Estensioni real-time del kernel Linux
Introduzione alle varie proposte disponibili: RTLinux-GPL, RTAI, Xenomai.
Prerequisiti
Nozioni generali sui sistemi operativi e analisi matematica. Conoscenza di base del linguaggio C (che verra` approfondito durante il corso).
Tipologia delle attività formative
Lezioni (ore/anno in aula): 25
Esercitazioni (ore/anno in aula): 25
Laboratori (ore/anno in aula): 0
Progetti (ore/anno in aula): 0
Materiale didattico consigliato
Materiale didattico fornito dal docente.
Giorgio Buttazzo. Sistemi in tempo reale. Pitagora Editrice, Bologna, 1995.
Modalità di verifica dell'apprendimento
L’esame consiste in una prova scritta che comprende domande aperte su GNU/Linux
embedded e un esercizio di schedulazione real-time. Inoltre e` obbligatoria la
realizzazione di un progetto ("prova pratica"), da concordare con il docente.
Il progetto potra` essere svolto autonomamente sul proprio PC usando GNU/Linux o Shark, oppure nel laboratorio di robotica, con l'assistenza del docente e del personale del laboratorio. Il progetto svolto in laboratorio puo` essere realizzato su Shark, su Linux embedded in ambiente ARM, su microcontrollori
con sistema operativo Erika o microcontrollori senza sistema operativo a bordo.
|