SISTEMI OPERATIVI M - Z

ING-INF/05 - 6 CFU - 1° semestre

Docente titolare dell'insegnamento

SALVATORE CAVALIERI


Obiettivi formativi

Obiettivo formativo del corso è acquisire la conoscenza dei concetti di base inerenti il progetto di sistemi operativi e la stesura di programmi che sfruttano le System Call in ambiente Linux/UNIX.

Alla fine del corso gli allievi:

-Conosceranno la struttura dei Sistemi Operativi, le relative problematiche di progetto e le politiche utilizzate per la virtualizzazione e per la gestione delle risorse (CPU, memoria centrale, memoria di massa, periferiche).

- Avranno acquisito conoscenze sui concetti di processo e di thread e sulla loro gestione.

- Avranno acquisito conoscenze sulle tecniche di gestione della concorrenza su risorse mutuamente esclusive.

- Avranno acquisito familiarità nell’interazione con la shell di Linux.

Gli allievi a fine corso saranno in grado di scrivere applicazioni contenenti system call per:

- creazione e gestione di processi, invio/gestione segnali, interazione e comunicazione tra processi;

- gestire la concorrenza sulle risorse condivise;

- creare applicazioni multithread.


Modalità di svolgimento dell'insegnamento

Il corso si basa essenzialmente su lezioni frontali, che includono lo svolgimento di esercizi da parte del docente. Gli esercizi proposti vengono affrontati dal docente tramite l'uso di computer connesso a proiettore. Il corso prevede anche esercitazioni pratiche svolte dagli studenti. Tali esercitazioni vengono svolte anche nelle aule multimediali dell'Ateneo. Ad ogni studente viene assegnato un compito che deve essere svolto al calcolatore. Il docente supervisiona il lavoro degli studenti fornendo le spiegazioni e gli aiuti didattici necessari per il completare i compiti assegnati.
Le modalità di svolgimento dell'insegnamento appena descritte permettono il raggiungimento degli obiettivi formativi prefissati, che includono l’acquisizione di conoscenze e la capacità di applicare la conoscenza.


Prerequisiti richiesti

Requisiti necessari ad affrontare con successo gli argomenti del corso:

-Conoscenza generale dell’architettura del calcolatore, in particolare: CPU, interruzioni, registri, memorie, tipologie di architetture multiprocessore, dispositivi di I/O.

-Capacità di programmazione e conoscenza del Linguaggio ANSI C, con particolare riferimento a: "uso dei parametri argc e argv nella funzione main()", "uso dei puntatori, dei vettori e dell'allocazione dinamica", "uso dei vettori e strutture", "uso di funzioni e relativo passaggio di parametri per valore e per riferimento"

-Conoscenza delle principali strutture dati: liste, pile, code, tabelle hash, alberi e grafi e delle loro implementazione in linguaggio ANSI C



Frequenza lezioni

La frequenza è obbligatoria per poter sostenere le prove in itinere e fortemente consigliata per sostenere la prova d’esame



Contenuti del corso

Gli argomenti rappresentati in grassetto rappresentano le competenze minime.

 

UNITÀ DIDATTICA 1: INTRODUZIONE AI SISTEMI OPERATIVI. IL SISTEMA GNU/LINUX. SYSTEM CALL. VIRTUALIZZAZIONE.

 

UNITÀ DIDATTICA 2: PROCESSI E THREAD

 

UNITÀ DIDATTICA 3: SCHEDULAZIONE DELLA CPU

 

UNITÀ DIDATTICA 4: GESTIONE DELLA CONCORRENZA E SINCRONIZZAZIONE.

 

UNITÀ DIDATTICA 5: INTER PROCESS COMMUNICATION (IPC)



Testi di riferimento

Per la parte teorica: [1] Abraham Silberschatz, Peter Baer Galvin, Greg Gagne, “Sistemi Operativi, Concetti e esempi”, Nona Edizione, Pearson.

In alternativa: [2] Andrew S. Tanenbaum, “I moderni sistemi operativi 4/Ed.", 2016, ISBN 9788891901019.

 

Ad integrazione della parte teorica e per tutta la parte pratica: [3] R. Stones, N. Matthew, “Beginning Linux Programming”, 4th edition, Wrox Press, 2007.


Altro materiale didattico

Dispense Docente, scaricabili dal sito www.studium.it. Possono riguardare sintesi e approfondimenti di teria non disponibili nei libri di testo o codice in linguaggio C per le esercitazioni.



Programmazione del corso

 ArgomentiRiferimenti testi
1* Generalità sui sistemi operativi. Gestione delle risorse. Interfaccia utente. Concetto di Kernel. [1] Capitolo 1,2 - [2] Capitolo 1 
2Il sistema GNU/Linux. Software libero e relative licenze d'uso. GPL.dispense docente 
3* Struttura dei sistemi operativi: monolitici, microkernel, ibridi, client/server. [1] Capitolo 1,2 - [2] Capitolo 1 
4Cenni su UNIX e sullo standard POSIXdispense docente 
5* Concetto di System call e passi necessari a realizzarle. Panoramica delle system call di Unix/Linux, Windows.[1] Capitolo 1,2 - [2] Capitolo 1 
6Classificazione dei sistemi operativi. Scelte progettuali relative alle diverse tipologie di SO. Sistemi operativi per architetture multiprocessore. Virtualizzazione. Macchine virtuali. Hypervisor di livello 1 e 2. Esempi: struttura di WMware e Virtual Box.[1] Capitolo 2,16 - [2] Capitolo 1, 8.1.2 (multiprocessore) 
7File System e System call sui file. [1] Capitoli 8, 11 e 13 - [2] Capitolo 4 (File System) 
8* Concetto di Processo. Diagramma a stati di un processo.[1] Capitolo 3 - [2] Capitolo 2.1, 2.2 
9Interruzioni hardware e software e loro gestione nei sistemi operativi. [1] Capitolo 3 - [2] Capitolo 2.1, 2.2 
10* System call per creazione e gestione di processi: fork(), wait(), waitpid(). Famiglia delle exec(). [1] Capitolo 3 e [3] Capitolo 11 
11Cenni di system call per la gestione di processi in ambiente Windows.[1] Capitolo 3 - [2] Capitolo 2.1, 2.2 
12* Segnali e loro gestione. System call kill(), signal(), alarm(), sigaction(). [3] Capitolo 11 
13Esempi di programmi che impiegano tutte le system call sui processi e sui segnali[3] Capitolo 11 
14* Thread. Generalità, caratteristiche. Implementazione dei thread: user space, kernel space, ibride (con riferimento alle scelte progettuali dei principali SO).[1] Capitolo 4 - [2] Capitolo 2.1, 2.2 
15* La libreria Pthread. Funzioni pthread_create(), pthread_join(), pthread_exit(), pthread_detach, pthread_attr_init(). Cenni di thread in ambiente Windows. Cancellazione di thread. Esempi di programmi che usano la libreria Pthread.[3] Capitolo 12 - [2] Capitolo 2.1, 2.2 
16Linux: Esercitazione sui comandi di shell. Programmazione della shell. Shell Bash[3] Capitolo 2 
17* Sezione critica. Mutua esclusione con attesa attiva. Semafori.[1] Capitolo 5 - [3] Capitolo 14 - [2] Capitolo 2.3, 2.5 
18Problema Classici di sincronizzazione: Produttore/Consumatore, Lettori/Scrittori e loro soluzione tramite semafori.[1] Capitolo 5 - [2] Capitolo 2.3, 2.5 
19* Mutex. Implementazione con thread in user space. Funzioni pthread_mutex.[3] Capitolo 12 
20IPC in Linux. Semafori: semget(), semop(), semctl(). Code di messaggi: msgget(), msgsnd(), msgrcv(), msgctl(). Shared memory: shmget(), shmat(), shmdt(), shmctl(). Esempi di programmi.[1] Capitolo 3 e [3] Capitolo 13 
21Comunicazione nei sistemi client-server: socket.[3] Capitolo 15 
22Deadlock. Definizione del problema e strategie di gestione. Algoritmo del banchiere con risorsa singola.[1] Capitolo 7 - [2] Capitolo 7 
23* Schedulazione della CPU. Obiettivi. Algoritmi classici: FIFO, Round-robin, Schedulazione basata su priorità. Il problema della Starvation. Code multiple. Cenni sullo scheduling nei sistemi real-time.[1] Capitolo 6 - [2] Capitolo 2.4 
24Cenni sullo scheduling di Linux: Completely Fair Scheduler.[1] Capitolo 6-Dispense Docente 
25Nota: * Conoscenze Minime Irrinunciabili per il superamento dell'esame 


Verifica dell'apprendimento


MODALITÀ DI VERIFICA DELL'APPRENDIMENTO

Gli appelli sono fissati di concerto con il CdS in ottemperanza alle modalità stabilite dal calendario accademico.

La prenotazione è obbligatoria tramite il portale di Ateneo. La data di chiusura delle prenotazioni è fissata di norma uno-due giorni prima dell'esame.

L’esame si compone di una prova scritta, seguita da una prova orale. La prova scritta, della durata di 3 ore, è rappresentata da un elaborato al calcolatore, del valore di 18/30 punti, e da una sezione teorica, composta da due quesiti a risposta aperta, del valore complessivo di 12/30 punti. La prova scritta si intende superata se il voto è maggiore o uguale a 18/30.

Sul sito della materia disponibile su Studium (www.studium.it) è presente un fac simile della prova scritta che specifica sia le tipologie di problemi somministrati sia le relative votazioni.

La prova orale è facoltativa e può essere svolta solo nello stesso appello in cui la prova scritta è stata superata. La prova orale verte sugli argomenti teorici svolti a lezione.

Durante le lezioni sono previste due prove in itinere. Ciascuna prova in itinere si intende superata se il voto ottenuto è maggiore o uguale a 18/30. Nel caso in cui entrambe le prove sono superate, il voto finale è uguale alla media della valutazione delle due prove. Se le due prove in itinere sono entrambe superate, esse si sostituiscono alla prova scritta. La durata delle prove in itinere è di tre ore ciascuna, e consistono di una parte teorica (domande a risposta aperta) e di una parte relativa allo sviluppo di uno o più programmi da svolgere al calcolatore. I valori in termini di punteggio associati alle varie domande e il numero di domande sono variabili tra prima e seconda prova e vengono esplicitamente indicati nel compito. E’ prevista una Prova Orale facoltativa per chi supera le prove in itinere. Le prove in itinere sono facoltative e possono essere svolte solo da chi frequenta (a tal fine si procederà alla rilevazione delle presenze durante il corso); le prove in itinere si svolgono una a metà corso e l'altra a fine corso.


ESEMPI DI DOMANDE E/O ESERCIZI FREQUENTI

Sul sito docente della materia su Studium (www.studium.it) sono presenti esempi di domande ed esercizi frequenti. Per ciascuna domanda viene fornita la relativa risposta corretta. Sempre nello stesso sito sono disponibili tutti i testi dei compiti di esami assegnati in appelli precedente. Per ciascun compito viene fornita la relativa soluzione.




Apri in formato Pdf English version