Obiettivi formativi
Il corso si propone di fornire allo studente la comprensione di come i sistemi operativi gestiscano le risorse dei calcolatori e la capacità di utilizzarne le principali funzionalità. In particolare:
- le gestione dei tempi di CPU in rapporto alle operazioni di I/O;
- il concetto di processo e l'interazione tra processi;
- i principali criteri di scheduling dei processi;
- la nozione di chiamata di sistema ed la loro definizione nei sistemi UNIX/Linux.
Il corso promuove, inoltre, l'acquisizione di competenze di utilizzo e programmazione dei sistemi operativi quali:
- valutare i sistemi operativi general purpose sulla base delle loro caratteristiche principali;
- utilizzare i comandi da terminale e gestire lo stato di un sistema operativo come utente esperto;
- programmare applicazioni costituite da più processi e gestirne l'interazione e la comunicazione;
- conoscere le peculiarità della programmazione concorrente e programmare le politiche di accesso ai dati condivisi in contesti semplici.
Prerequisiti
Precedenti insegnamenti di programmazione:
- Informatica e Laboratorio di Programmazione
- Programmazione ad Oggetti
Contenuti dell'insegnamento
A. Sistemi Operativi: concetti e principi
Introduzione ai sistemi operativi, gestione tempo CPU e interruzioni
Multiprogrammazione e processi
File system
Gestione I/O, primitive ed introduzione alle reti di calcolatori
Scheduling di processi
Introduzione alla programmazione concorrente
B Sistemi UNIX/Linux: analisi ed esecitazioni di laboratorio
Storia e organizzazione del sistema (file system, utenti e permessi, elementi principali)
Introduzione alla shell e ai comandi da terminale
Programmazione in linguaggio, ciclo e strumenti di sviluppo
Gestione dei processi e processi figli
Primitive di comunicazione tra processi
Cenni alla programmazione concorrente
Programma esteso
A. Sistemi Operativi: concetti e principi (20 ore)
A.1 Definizione di Sistema Operativo: gestione tempo CPU (batch, time-sharing, spooling), I/O e interruzioni.
A.2 Multiprogrammazione e processi: stato, cambio di contesto, modelli di interazioni tra processi, process control block (PCB), protezione.
A.3 File system: files, directories, realizzazione del file system.
A.4 Gestione I/O: astrazione, deadlock, modello stream, chiamate di sistema.
A.5 Introduzione alle reti: modello ISO/OSI, protocollo TCP/IP, UDP, primitive socket per processi.
A.6 Scheduling: algoritmi e criteri, algoritmi di scheduling (FCFS, SJF, round-robin, priority).
A.7 Threads, memoria condivisa sezioni critiche, primitive per accesso concorrente (semafori, mutex, varibili di condizione).
B Sistemi UNIX/Linux
B1 Analisi dei sistemi UNIX/Linux (14 hours)
B1.1 Introduzione ai sistemi UNIX: storia, organizzazione del file system, utenti e permessi, comandi del terminale/shell
B1.2 Programmazione e sviluppo in linguaggio C per sistemi UNIX/Linux
B1.3 Programmazione di sistema: varibili d'ambiente, primitive I/O, coandi per l'esecuzione di processi
B1.4 Gestione e comunicazione tra processi: API, pipe e FIFO, segnali
B1.5 Comuncazione tra processi: introduzione alle reti, livelli di astrazione, protocolli TCP e UDP, socket
B1.6 Brevi cenni a POSIX Threads: concetto di thread, primitive per la gestione di thread, gestione delle sezioni critiche
B2 Esercitazioni di laboratorio con sistemi UNIX/Linux (14 ore).
B2.1 Gestione file e directory con UNIX-Linux, permessi, link, manipolazione di files, principali comandi al terminale, redirezione I/O al terminale.
B2.2 Bash scripting, programmazione in linguaggio C e compilazione, librerie, strumenti di sviluppo (make, cmake, gdb, valgrind).
B2.3 Chiamate di sistema (interfaccia in C) per stream I/O, descrittori, piping, variabili d'ambiente.
B2.4 Controllo dei processi e programmazione in C: identificatori di processi, comandi per l'esecuzione di processi, processi figli (commandi fork, execv*).
B2.5 Comunicazione tra processi 1: pipe, FIFO, segnali, select.
B2.6 Comunicazione tra processi 2: chiamate di sistema per socket, socket TCP e UDP, paradigma client/server.
B2.7 Introduzione a POSIX Thread: esecuzione di thread, join, attese, gestione accesso a sezioni critiche.
B2.8 Preparazione ad esercizi d'esame.
Bibliografia
Sono rese disponibili sulla pagina del corso le diapositive utilizzate nelle lezioni ed il materiale di laboratorio.
Libri di testo suggeriti (anche le edizioni precedenti a quelle indicate sono adeguate):
- A. Tanenbaum, H. Bos, Modern Operating Systems, Pearson Education, 4th edition, 2014
- A. Silberschatz, G. Gagne, P.B. Galvin, Operating System Concepts, Wiley, 10th edition, 2021
- A. Tanenbaum, A. Woodhull, Operating Systems: Design and Implementation, Pearson Education, 2nd Edition, 1997
- S. Piccardi, GaPiL -- Guida alla Programmazione in Linux, http://gapil.truelite.it
Metodi didattici
Il corso prevede lezioni frontali ed esercitazioni di laboratorio.
Le lezioni trattano i concetti dei sistemi operativi ed anche presentano le primitive di sistemi UNIX/Linux che saranno utilizzate in laboratorio.
Le esercitazioni si svolgono nei laboratori di informatica di base dotate di calcolatori o terminali con macchine virtuali che ospitano sistemi operativi Linux.
L'apprendimento avviene svolgendo esercizi guidati.
Modalità verifica apprendimento
La valutazione si svolge in due parti.
1) Una prova scritta con domande aperte sulla parte di teoria che contribuisce alla valutazione finale con peso 50%. La valutazione della prova scritta è in trentesimi.
2) Una prova pratica al calcolatore costituita da un esercizio in linguaggio C svolta in laboratorio sulla interazione tra processi UNIX che contribuisce alla valutazione finale con peso 50%. La soluzione fornita deve essere funzionante ed coerente con la consegna. La valutazione della prova è in trentesimi.
3) Assegnamento proposto durante il corso che può contribuire ad incrementare il voto finale. Il tema dell'assegnamento può riguardare la gestione di processi o altri aspetti dei sistemi operativi trattati nelle esercitazioni di laboratorio.
Entrambe le prove, scritta e pratica, devono essere superate ai fini del superamento dell'esame. Gli studenti possono sostenere il giorno dell'esame una sola o entrambe le prove. I risultati parziali conseguiti rimangono validi per tutto l'anno accademico (sessione autunnale compresa). In caso di ripetizione di una prova già superata (teoria e/o UNIX), rimane valido l'ultimo voto ottenuto.
Altre informazioni
Il materiale delle lezioni e delle esercitazioni è reso disponibile sulla pagina dell'insegnamento http://elly****.dia.unipr.it/ (**** = anno del corso).
Obiettivi agenda 2030 per lo sviluppo sostenibile
Il corso di sistemi operativi non tratta direttamente i problemi della sostenibilità. Ma i sistemi operativi sono gestori delle risorse di calcolo ed il loro studio fornisce nozioni sull'uso efficiente di risorse e la limitazione degli sprechi.