Ti trovi qui: Home » Didattica » Insegnamento: Sistemi Operativi e Lab.

Insegnamento: Sistemi Operativi e Lab. (Offerta Formativa a.a. 2014/2015)

Corso di studio: Corso di Laurea in Ingegneria Informatica (D.M.270/04)

CFU9
Moduli

Modulo: Sistemi Operativi e Lab.
TAF: Caratterizzante; SSD: ING-INF/05; Ambito: Ingegneria informatica
Docenti: Letizia LEONARDI, Nicola BICOCCHI

Dolly Accedi ai dati dell'insegnamento su Dolly
Orario Lezioni Accedi all'orario settimanale dell'insegnamento
Propedeuticità obbligatorie Fondamenti di Informatica I e Lab. Fondamenti di Informatica II e Lab.
Modalità di accertamento del profitto Scritto
Modalità di valutazione Voto
Esse3 Accedi ai dati dell'insegnamento su Esse3
Lingua di insegnamento

Italiano

Partizionamento studenti

Nessun partizionamento

Obiettivi

L'insegnamento ha come obiettivo formativo quello di fornire la conoscenza e la capacità di comprensione di base dei Sistemi Operativi introducendo alcuni aspetti della programmazione di sistema in UNIX relativamente sia al linguaggio comandi (Shell) e sia al linguaggio di programmazione C, applicandoli a progetti concorrenti -in ambiente locale- di complessità crescente.

Prerequisiti

Propedeuticità obbligatorie: Fondamenti di Informatica I e Lab., Fondamenti di Informatica II e Lab.
Propedeuticità consigliate: Inglese, Calcolatori Elettronici e Lab.

Contenuti

Classificazione dei Sistemi Operativi. In particolare, sistemi multi-utente e multiprocesso.
Il Sistema Operativo come insieme di gestori delle risorse. Introduzione ai concetti di processo e thread e loro gestore: scheduling. Introduzione al concetto di file e direttorio e loro gestore: il File System a livello di organizzazione logica.
La programmazione di sistema utilizzando i linguaggi comandi. Il Bourne Shell di UNIX.
La programmazione di sistema utilizzando il linguaggio di programmazione C per UNIX. Le primitive di basso livello per l'accesso ai file (in particolare, open, creat, close, read, write e lseek) e le primitive per la creazione, comunicazione e sincronizzazione dei processi (in particolare, fork, exit, wait, pipe, signal e kill).
Laboratorio di Sistemi Operativi. Esercitazioni pratiche, in laboratorio, utilizzando computer provvisti di sistema operativo UNIX/LINUX. Verifica pratica della programmazione di sistema UNIX, utilizzando sia il linguaggio dello Shell che il linguaggio di programmazione C per arrivare allo svolgimento di un progetto completo di ricerca ricorsiva nel file system avente una parte in Shell e una in C che si coordinano l'un l'altra.

Metodi didattici

La metodologia didattica utilizzata per l’insegnamento si compone sia di lezioni frontali in aula e sia di esercitazioni pratiche in laboratorio: la percentuale di ore di lezioni in aula è 2/3 delle ore totali e quella di lezioni in laboratorio è 1/3. Le lezioni in aula affrontano aspetti teorici inerenti ai sistemi operativi in generale e in specifico al Sistema Operativo UNIX e aspetti pratici relativi alla programmazione di Sistema in una shell di Unix e utilizzando il Linguaggio di Programmazione C: le lezione fanno uso oltre che di lucidi (forniti preventivamente agli studenti) anche di un video-proiettore con accesso ad un Sistema Operativo Linux per l’esemplificazione delle nozione pratiche. Le esercitazioni, che si svolgono in un laboratorio informatico con postazioni di lavoro con dual boot utilizzando il sistema operativo Linux, sono parte integrante dell’insegnamento e consentono agli studenti di esercitarsi individualmente nello sviluppo di programmi di sistema sia utilizzando una shell di Linux che il linguaggio di Programmazione C per Unix. Sulla pagina Web (gestita direttamente dal docente) gli studenti possono trovare, oltre ai file pdf dei lucidi (protetti da password di lettura che verrà comunicata agli studenti nella prima lezione), esempi di esercizi, tutti i testi delle prove d’esame e di alcuni di questi anche le relative soluzioni, utili per la auto-verifica dell’apprendimento.

Verifica dell'apprendimento

La verifica dell’apprendimento (l'esame) si compone di una prova scritta, che viene svolta in laboratorio. La prova scritta comprende un singolo esercizio che richiede la soluzione di un problema di sincronizzazione in ambito locale, ottenuta facendo riferimento al sistema operativo UNIX, che si compone di due parti: 1. una parte in Bourne Shell che deve risolvere un sottoproblema di esplorazione nel file system; 2. una parte in linguaggio C che deve risolvere un sottoproblema concorrente facendo uso delle primitive di gestione dei processi proprie di UNIX. Dato che lo svolgimento della prova scritta avviene in laboratorio, lo studente dovrà produrre un insieme di file corrispondenti alla soluzione dell'esercizio: i file che risolvono il primo sottoproblema DEVONO avere il nome che termina con .sh, mentre i file che risolvono il secondo problema DEVONO avere il nome che termina con .c per il file che contiene il sorgente in linguaggio C e il nome Makefile per quello che verrà usato dal comando make. Saranno corrette SOLO le soluzioni che non conterranno né errori di sintassi nella parte Shell e C né errori di collegamento (linking) nella parte C. La sufficienza è rappresentata da un voto maggiore o uguale a 18/32 Saranno organizzate anche due verifiche in itinere (la prima sulla parte in Bourne shell e la seconda sulla parte in C, cui si può partecipare solo se superata la prima verifica): in questo caso, la valutazione finale dell'insegnamento deriverà dalla media arrotondata per difetto delle due prove.

Risultati attesi

Conoscenza e comprensione - Conoscere e comprendere i fondamenti dei sistemi operativi, con particolare riferimento a UNIX/Linux e alla relativa programmazione di sistema. Capacità di applicare conoscenza e comprensione - Sapere utilizzare i principali comandi shell di UNIX/Linux e avere la capacità di sviluppare programmi di script in Shell e programmi concorrenti usando il linguaggio di programmazione C. Autonomia di giudizio - autonomia di giudizio nell'analizzare e progettare sistemi complessi, valutando l'impatto delle soluzioni informatiche nel contesto applicativo, sia relativamente agli aspetti tecnici che agli aspetti organizzativi e dimostrando di partecipare attivamente al processo decisionale in contesti anche interdisciplinari. - autonomia di giudizio nel valutare le implicazioni economiche, sociali ed etiche associate alle soluzioni individuate. Abilità comunicative - interagire efficacemente con interlocutori sia non specialisti che specialisti di diversi settori applicativi al fine di comprenderne le specifiche esigenze per la realizzazione di sistemi complessi; - descrivere a tali interlocutori in modo chiaro e comprensibile informazioni, idee, problemi e soluzioni oltre che aspetti tecnici. Capacità di apprendimento - capacità di apprendimento che consente di affrontare in modo efficace le mutevoli problematiche lavorative connesse con l'innovazione propria dell'area dell'Ingegneria Informatica; - capacità di riconoscere la necessità di apprendimento autonomo durante tutto l'arco della vita, dato l'elevato tasso di innovazione tecnologica e metodologica nell'area dell'Ingegneria Informatica; - capacità di acquisire in modo autonomo nuove conoscenze specialistiche dalla letteratura scientifica e tecnica del settore, sia nell'ambito delle tematiche approfondite nel proprio percorso formativo, sia in altri ambiti dell'Ingegneria Informatica.

Testi

Materiale come lucidi, esercizi e testi di esame (e alcune soluzioni) sono disponibili via WEB alla URL: http://www.didattica.agentgroup.unimore.it/wiki/index.php/Sistemi_Operativi_e_Lab. (il punto finale è compreso nella URL).

Testi di riferimento possono essere:
HAVILAND K., GRAY D., SALAMA B., Unix System Programming, Casa Editrice Addison-Wesley, 1999.
BOURNE S. R., UNIX System V, Casa Editrice Addison-Wesley, 1990.
In alternativa la seconda parte del testo seguente contiene tutti gli argomenti del corso (mentre la prima parte puo' essere usata per un ripasso del Linguaggio C):
BELLAVIA G., CORRADI A., LEONARDI L., Fondamenti di Informatica II: Dispense del corso (seconda edizione), Casa Editrice Esculapio, Progetto Leonardo, 1994.
Per un eserciziario relativo al Linguaggio C si segnala: LEONARDI L.: Linguaggio C: Raccolta di esercizi e relative soluzioni, Ed. Esculapio - Progetto Leonardo, 1996.

Docenti

Letizia LEONARDI
Nicola BICOCCHI