Salta ai contenuti. | Salta alla navigazione

Strumenti personali

SISTEMI OPERATIVI

Anno accademico e docente
Non hai trovato la Scheda dell'insegnamento riferita a un anno accademico precedente? Ecco come fare >>
English course description
Anno accademico
2022/2023
Docente
CESARE STEFANELLI
Crediti formativi
6
Periodo didattico
Secondo Semestre
SSD
ING-INF/05

Obiettivi formativi

Obiettivi del corso sono descrivere le funzioni e l'architettura del sistema operativo e introdurre quindi la programmazione di Shell e la programmazione di sistema nel linguaggio C.

Le principali conoscenze acquisite saranno:
- le funzioni di base di un sistema operativo;
- l'architettura di un sistema operativo;
- i componenti fondamentali di un sistema operativo;
- i principali sistemi operativi (Unix e Windows);
- shell come strumento di rapid application development;
- le system call del sistema operativo Unix.

Le principali abilità (ossia la capacità di applicare le conoscenze acquisite) saranno:
- identificare i vincoli di progetto alla base della realizzazione dei principali sistemi operativi;
- saper utilizzare la Shell di Bourne come linguaggio di programmazione;
- saper realizzare applicazioni concorrenti multi processo in Unix.

Prerequisiti

Si deve avere un'ottima padronanza del linguaggio di programmazione C e una buona conoscenza del linguaggio Java, acquisite nei corsi di Fondamenti di Informatica.

Contenuti del corso

Il corso prevede 60 ore di didattica tra lezioni ed esercitazioni. In particolare sono previste 42 ore di lezione in aula e 18 ore di esercitazioni guidate in laboratorio.

La Shell di Bourne come linguaggio di programmazione (8 ore + 8 ore di laboratorio): i principali comandi Unix; la ridirezione di ingresso e uscita, il piping dei comandi, le strutture di controllo della Shell, i file comandi.

La programmazione di sistema Unix (8 ore + 10 ore di laboratorio): le system call del sistema operativo Unix per la gestione dei file, dei segnali, per la gestione dei processi e la loro comunicazione con le pipe.

L'architettura e i componenti del Sistema Operativo (20 ore): la memoria virtuale, lo scheduling, la gestione dell'I/O, il file system, la protezione.

Casi di studio (6 ore): i principali sistemi operativi (Unix, Windows, Linux).

Metodi didattici

Il corso è organizzato nel seguente modo:

- Lezioni in aula su tutti gli argomenti del corso.

- Esercitazioni nel laboratorio di informatica per la programmazione in shell e per la programmazione di sistema. Ogni studente avrà a disposizione una macchina per svolgere singolarmente le esercitazioni assegnate, sotto la supervisione del docente o del tutor.

Nota: per la modalità di erogazione delle lezioni si valuteranno le condizioni Covid nel secondo semestre. In ogni caso, anche se le lezioni saranno in presenza, le video registrazioni delle lezioni saranno rese disponibili nel sito Classroom del corso.

Modalità di verifica dell'apprendimento

L’obiettivo della prova d’esame consiste nel verificare il livello di raggiungimento degli obiettivi formativi precedentemente indicati.

L’esame è diviso in 2 parti, una prova scritta e una prova orale.

Prova scritta. Si richiede la soluzione di due esercizi, uno di programmazione di sistema Unix (linguaggio C con System Call) e uno di programmazione in Shell di Bourne. Il voto della prova scritta sarà calcolato a partire da quanto ottenuto nella prova di programmazione di sistema (voto da Insufficiente a 30), con la prova in Shell che servirà ad arrotondare tale punteggio (influendo all'incirca più o meno 2 punti). Il servizio Web di pubblicazione degli esiti degli esami ci vincola a esprimere il risultato dell'esercizio di Shell in giudizi. La corrispondenza voto-giudizi è la seguente:
Ins. --> Ins.
-2 --> Suff.
-1 --> Discreto
- --> Buono
+1 --> Distinto
+2 --> Ottimo

Le 2 prove scritte sono indipendenti e possono anche essere svolte in sessioni diverse. La prova scritta ha lo scopo di valutare la capacità di programmazione e ha carattere di selezione (lo studente che non ottiene la sufficienza non è ammesso alla prova orale). Per superare la prova è necessario acquisire almeno 18 punti su 30. Il tempo previsto per la prova è di circa 3 ore (circa 1,5 ore per la parte di programmazione di sistema e circa 1 ora per la parte di Shell).
Nella prova scritta di Shell NON si può consultare alcun materiale, né appunti, né libri, né altro.
Nella prova scritta di Programmazione di Sistema in C si possono consultare solo libri e copie delle dispense (NON si può consultare il codice di esercizi e prove di esame risolte).
Si può decidere di sostenere nuovamente una parte scritta per migliorare il voto. In caso di consegna della seconda prova verrà automaticamente cancellato il voto di quella precedente.

La prova orale, che potrà essere sostenuta SOLO DOPO il superamento delle 2 prove scritte, verifica la preparazione sulle restanti parti del programma del corso e servirà per definire il punteggio finale (incidendo circa 3 punti in più o in meno). Se non si supera la prova orale, la si potrà sostenere in un altro appello senza bisogno di sostenere nuovamente gli scritti. Gli scritti non "scadono", quindi l'orale può essere sostenuto anche (molto) tempo dopo aver superato lo scritto, anche se si suggerisce agli studenti di non lasciar passare troppo tempo tra scritti e orale.

L'esame può anche essere sostenuto in lingua inglese.

Nota Covid: Tutti gli esami saranno svolti presenza, nei laboratori del Dipartimento. Ovviamente se questo sarà consentito dalle normative vigenti.

Testi di riferimento

Tutto il materiale didattico (Slides presentate a lezione ed esercizi) è presente sul sito Classroom il cui link è indicato su questo sito, nella sezione "materiale didattico".

Testi suggeriti per la parte sull'architettura e i principali componenti dei sistemi operativi:

A. Silberschatz, P.Galvin, G. Gagne, “Sistemi Operativi, Concetti ed esempi”, Pearson, 10a edizione.

A. Tanenbaum, H. Bos, "I Moderni Sistemi Operativi". Pearson, 2019.

Ancilotti, Boari, Ciampolini, Lipari, "Sistemi operativi", seconda edizione, McGraw-Hill, 2008

Sulla programmazione di sistema UNIX un libro di testo molto dettagliato è:

W.R. Stevens, "Advanced Programming in the UNIX Environment, 3rd Edition", Addison-Wesley, 2013

Non dimenticate di utilizzare il man sulle macchine Unix e la documentazione texinfo, accessibile tramite terminale digitando il comando info (esempio, "info ps" per avere informazioni sul ps).