Elementi di sistemi operativi (2008/2009)

Corso a esaurimento

Codice insegnamento
4S01832
Crediti
6
Coordinatore
Tiziano Villa
L'insegnamento è organizzato come segue:
Modulo Crediti Settore disciplinare Periodo Docenti
Laboratorio 2 ING-INF/05-SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI 1° Q Nicola Bombieri
Teoria 4 ING-INF/05-SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI 1° Q Tiziano Villa

Obiettivi formativi

Modulo: Teoria
-------
Teoria

Lo scopo del corso e' di presentare l'organizzazione di un sistema operativo e le problematiche connesse di correttezza ed efficienza.

Saranno trattati capitoli scelti dai seguenti argomenti:
- definizione e storia dei sistemi operativi e di programmazione;
- programmi di utilita', sottosistemi, sistemi a multiprogrammazione;
- processi, comunicazione tra processi e sincronizzazione;
- allocazione della memoria, segmentazione e impaginazione;
- caricamento e collegamento, librerie;
- allocazione delle risorse, schedulazione, valutazione delle prestazioni;
- sistemi d'ingresso e uscita, dispositivi di memorizzazione, organizzazione degli archivi;
- concetti elementari di reti, protocolli e archivi distribuiti, protezione, sicurezza e riservatezza.

Il corso di teoria e' svolto in 32 ore (4 crediti) di lezioni frontali. A latere si svolge un laboratorio di 24 ore (2 crediti).

Laboratorio

Il corso, svolto in 24 ore di esercitazione (2 crediti), introduce alla programmazione di sistema facendo riferimento ai sistemi operativi UNIX system V e Linux. Al termine del corso lo studente avrà acquisito la capacità di realizzare procedure di sistema e programmi C per utilizzare il sistema operativo con correttezza ed efficienza.


Modulo: Laboratorio
-------
Il corso, svolto in 24 ore di lezione/esercitazione (2 crediti), fornisce una INTRODUZIONE alla programmazione di sistema facendo riferimento ai sistemi operativi UNIX system V e Linux.
Al termine del corso lo studente avrà acquisito la capacità di realizzare script di shell e programmi C per gestire le problematiche riportate nel programma sottostante.

Programma

Modulo: Teoria
-------
Teoria

- Nozione di sistema operativo e storia dei sistemi operativi
- Interfaccia utente-sistema operativo; chiamate di sistema
- Processi e fili esecutivi ("threads"); creazione, esecuzione e distruzione di fili esecutivi; modelli di fili esecutivi di utente e di sistema operativo
- Sincronizzazione; meta-esempio di protocolli di mutua esclusione; primitive atomiche di sincronizzazione; lucchetti ("locks") e loro acquisizione/rilascio; disabilitazione delle interruzioni durante la sezione critica o durante l'acquisizione/rilascio dei lucchetti; istruzioni macchina atomiche e loro utilizzo per realizzare lucchetti; problema dell'attesa occupata e sua limitazione all'acquisizione/rilascio dei lucchetti
- Primitive di programmazione per la sincronizzazione; semafori con esempio dei produttori-consumatori; osservatori, variabili di condizione ed esempio dei lettori-scrittori; supporto alla sincronizzazione nei linguaggi di programmazione
- Processi concorrenti e blocco critico ("deadlock")
- Algoritmi di assegnamento ("scheduling") del processore
- Gestione e protezione della memoria (sistema operativo e spazi d'indirizzamento);
gerarchia della memoria e memorie temporanee veloci ("caches"); memoria virtuale, traduzione degli indirizzi e tavole associative di traduzione; richiesta selettiva, allocazione e rimpiazzo delle pagine di memoria
- Sistemi d'ingresso/uscita; gestione della memoria su disco
- Organizzazione degli archivi di documenti ("file systems"); nomi e strutture dati di memorizzazione e ricerca
- Cenni su reti e sistemi operativi distribuiti

Laboratorio

- Introduzione alla programmazione C:
compilatore, caricatore ("loader") e collegatore ("linker"); librerie e programma make
- La struttura di un programma C:
variabili; istruzioni; funzioni e passaggio dei parametri; puntatori e allocazione della memoria dinamica; stringhe; gestione dell'ingresso/uscita
- Programmazione di sistema tramite procedura d'interfaccia (per shell bash):
struttura del programma d'interfaccia; selezione e iterazione; ingresso e uscita; variabili; comandi di sistema
- Programmazione di sistema in C:
documenti ("files") e cartelle ("directories"); processi (fork/exec); concatenazione di processi ("pipe" e "named pipe"); semafori; memoria condivisa; code di messaggi
- Programmazione e sincronizzazione di fili esecutivi


Modulo: Laboratorio
-------
* Introduzione alla programmazione C:
- compilatore, linker, librerie e programma make.

* La struttura di un programma C:
- variabili, tipi e istruzioni
- funzioni e passaggio dei parametri
- puntatori
- gestione I/O
- stringhe
- allocazione della memoria dinamica

* Programmazione di sistema
- introduzione a Unix e comandi base
- shell e programmazione di shell
- bash e comandi fondamentali
- processi e comandi per gestione processi
- file: comparazione, ricerca, ordinamento
- costrutti condizionali
- comandi di sistema

* Cenni a IPC: pipe, semafori, memoria condivisa, code di messaggi
* Cenni a threads: programmazione e sincronizzazione delle threads

Modalità d'esame

Modulo: Teoria
-------
Teoria

L'esame consiste in una prova scritta, contenente domande teoriche ed esercizi.
L'esame deve essere completato (teoria+laboratorio) entro 4 sessioni a partire da quella in cui è stata sostenuta con successo la prova di teoria o la prova di laboratorio (a seconda di quale delle due viene superata per prima).
Il voto finale si ottiene dalla seguente media pesata:
Voto = Voto_teoria*(2/3) + Voto_laboratorio*(1/3).
Esempio: Uno studente che supera la prova di teoria (o laboratorio) in uno degli appelli della sessione autunnale dell'anno X, dovrà superare la prova di laboratorio (o teoria) entro la sessione estiva dell'anno X+1, pena l'annullamento del voto della prova di teoria (o laboratorio).

Laboratorio

L'esame consiste in una prova scritta, contenente domande teoriche ed esercizi.
L'esame deve essere completato (teoria+laboratorio) entro 4 sessioni a partire da quella in cui è stata sostenuta con successo la prova di teoria o la prova di laboratorio (a seconda di quale delle due viene superata per prima).
Il voto finale si ottiene dalla seguente media pesata:
Voto = Voto_teoria*(2/3) + Voto_laboratorio*(1/3).
Esempio: Uno studente che supera la prova di teoria (o laboratorio) in uno degli appelli della sessione autunnale dell'anno X, dovrà superare la prova di laboratorio (o teoria) entro la sessione estiva dell'anno X+1, pena l'annullamento del voto della prova di teoria (o laboratorio).

Nota: Per errore in una versione precedente di questa pagina si riportavano i pesi 0,6 e 0,4 invece dei valori corretti 2/3 e 1/3, rispettivamente per la teoria e il laboratorio;
i pesi non sono arbitrari, ma riflettono la proporzione tra le 4 CFU della teoria e le 2 CFU del laboratorio.


Modulo: Laboratorio
-------
L'esame per la parte di laboratorio consiste nel risolvere alcuni problemi di programmazione di sistema (tramite programmi C o script di shell) durante uno degli appelli ufficiali.

Statistiche per i requisiti di trasparenza (Attuazione Art. 2 del D.M. 31/10/2007, n. 544)

Statistiche esiti
Esiti Esami Esiti Percentuali Media voti Deviazione Standard
Positivi 37.37% 23 2
Respinti 2.02%
Assenti 60.60%
Ritirati --
Annullati --
Distribuzione degli esiti positivi
18 19 20 21 22 23 24 25 26 27 28 29 30 30 e Lode
8.1% 2.7% 5.4% 13.5% 5.4% 21.6% 8.1% 13.5% 5.4% 10.8% 5.4% 0.0% 0.0% 0.0%

Valori relativi all'AA 2008/2009 calcolati su un totale di 99 iscritti. I valori in percentuale sono arrotondati al numero intero più vicino.