SISTEMI OPERATIVI - canale 2

Anno accademico 2017/2018 - 2° anno
Docente: Salvatore CAVALIERI
Crediti: 6
SSD: ING-INF/05 - Sistemi di elaborazione delle informazioni
Organizzazione didattica: 150 ore d'impegno totale, 100 di studio individuale, 35 di lezione frontale, 15 di esercitazione
Semestre:
ENGLISH VERSION

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.


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

-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 è fortemente consigliata sia per le prove in itinere sia per sostenere la prova d’esame


Contenuti del corso

UNITÀ DIDATTICA 1: EVOLUZIONE, STRUTTURA E CLASSIFICAZIONE DEI SISTEMI OPERATIVI. IL SISTEMA GNU/LINUX. VIRTUALIZZAZIONE.

  • Generalità sui sistemi operativi. Gestione delle risorse. Interfaccia utente. Concetto di Kernel.
  • Il sistema GNU/Linux.
  • Software libero e relative licenze d'uso. GPL.
  • Struttura dei sistemi operativi: monolitici, microkernel, ibridi, client/server.
  • La storia di Unix. La genealogia dei sistemi operativi. Lo standard POSIX. Peculiarità di Unix e differenze tra Unix e Linux.
  • Concetto di System call e passi necessari a realizzarle. Panoramica delle system call di Unix/Linux, Windows.
  • Classificazione 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.

 

UNITÀ DIDATTICA 2: PROCESSI E THREAD

  • Concetto di Processo. Diagramma a stati di un processo.
  • Interruzioni hardware e software e loro gestione nei sistemi operativi.
  • System call per creazione e gestione di processi: fork(), wait(), waitpid(). Famiglia delle exec().
  • Cenni di system call per la gestione di processi in ambiente Windows.
  • Segnali e loro gestione. System call kill(), signal(), alarm(), sigaction().
  • Esempi di programmi che impiegano tutte le system call menzionate.
  • Thread. Generalità, caratteristiche.
  • Implementazione dei thread: user space, kernel space, ibride (con riferimento alle scelte progettuali dei principali SO).
  • Attivazione dello Scheduler, upcall. Dati specifici dei thread. Gruppi di thread.
  • 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.
  • Linux: Esercitazione sui comandi di shell. Programmazione della shell.

 

UNITÀ DIDATTICA 3: GESTIONE DELLA CONCORRENZA, INTER PROCESS COMMUNICATION, DEADLOCK.

 

  • Sezione critica. Mutua esclusione con attesa attiva. Semafori.
  • Problema del produttore e del consumatore e sua soluzione tramite semafori.
  • Mutex. Implementazione con thread in user space. Funzioni pthread_mutex.
  • IPC in Linux. Semafori: semget(), semop(), semctl(). Code di messaggi: msgget(), msgsnd(), msgrcv(), msgctl(). Shared memory: shmget(), shmat(), shmdt(), shmctl(). Esempi di programmi.
  • Comunicazione nei sistemi client-server: socket, pipe, FIFO.
  • Deadlock. Definizione del problema e strategie di gestione. Algoritmo del banchiere con risorsa singola.

 

UNITÀ DIDATTICA 4: SCHEDULAZIONE DELLA CPU

  • 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.
  • Cenni sullo scheduling di Linux: Completely Fair Scheduler.

 

UNITÀ DIDATTICA 5: GESTIONE DELLA MEMORIA CENTRALE, MEMORIA DI MASSA E I/O

  • Cenni di gestione della memoria centrale. Spazio degli indirizzi. Segmentazione, Paginazione e Swapping.
  • File System. Gestione dello spazio su disco, affidabilità e prestazioni. System call sui file.
  • I/O Software.

Testi di riferimento

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

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.



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 
2 Il sistema GNU/Linux. Software libero e relative licenze d'uso. GPL.[1] Capitolo 1,2 - [2] Capitolo 1 
3*Struttura dei sistemi operativi: monolitici, microkernel, ibridi, client/server. [1] Capitolo 1,2 - [2] Capitolo 1 
4 La storia di Unix. La genealogia dei sistemi operativi. Lo standard POSIX. Peculiarità di Unix e differenze tra Unix e Linux.[1] Capitolo 1,2 - [2] Capitolo 1 
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 
6 Classificazione dei sistemi operativi. Scelte progettuali relative alle diverse tipologie di SO.[1] Capitolo 1,2 - [2] Capitolo 1 
7 Sistemi operativi per architetture multiprocessore.[1] Capitolo 1,2 - [2] Capitolo 8.1.2 
8 Virtualizzazione. Macchine virtuali. Hypervisor di livello 1 e 2. Esempi: struttura di WMware e Virtual Box.[1] Capitolo 1,2, 16 - [2] Capitolo 1 
9*Concetto di Processo. Diagramma a stati di un processo.[1] Capitolo 3 - [2] Capitolo 2.1, 2.2 
10*Interruzioni hardware e software e loro gestione nei sistemi operativi. [1] Capitolo 3 - [2] Capitolo 2.1, 2.2 
11*System call per creazione e gestione di processi: fork(), wait(), waitpid(). Famiglia delle exec(). [1] Capitolo 3 e [3] Capitolo 11 
12 Cenni di system call per la gestione di processi in ambiente Windows.[1] Capitolo 3 - [2] Capitolo 2.1, 2.2 
13*Segnali e loro gestione. System call kill(), signal(), alarm(), sigaction(). [3] Capitolo 11 
14 Esempi di programmi che impiegano tutte le system call sui processi e sui segnali[3] Capitolo 11 
15*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 
16*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 
17 Linux: Esercitazione sui comandi di shell. Programmazione della shell. Shell Bash[3] Capitolo 2 
18*Sezione critica. Mutua esclusione con attesa attiva. Semafori.[1] Capitolo 5 - [3] Capitolo 14 - [2] Capitolo 2.3, 2.5 
19 Problema del produttore e del consumatore e sua soluzione tramite semafori.[1] Capitolo 5 - [2] Capitolo 2.3, 2.5 
20*Mutex. Implementazione con thread in user space. Funzioni pthread_mutex.[3] Capitolo 12 
21 IPC 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 
22 Comunicazione nei sistemi client-server: socket, pipe, FIFO.[3] Capitolo 15 
23 Deadlock. Definizione del problema e strategie di gestione. Algoritmo del banchiere con risorsa singola.[1] Capitolo 7 - [2] Capitolo 7 
24*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 
25 Cenni sullo scheduling di Linux: Completely Fair Scheduler.[1] Capitolo 6 
26*Cenni di gestione della memoria centrale. Spazio degli indirizzi. Segmentazione, Paginazione e Swapping. File System. Gestione dello spazio su disco, affidabilità e prestazioni. System call sui file. I/O Software. [1] Capitoli 8, 11 e 13 - [2] Capitoli 3,4,5 
* Conoscenze minime irrinunciabili per il superamento dell'esame.

N.B. La conoscenza degli argomenti contrassegnati con l'asterisco è condizione necessaria ma non sufficiente per il superamento dell'esame. Rispondere in maniera sufficiente o anche più che sufficiente alle domande su tali argomenti non assicura, pertanto, 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.

L’esame si compone di una prova scritta, seguita da una prova orale.

La prova scritta è rappresentata da un elaborato al calcolatore e da una sezione teorica, entrambe obbligatorie. La prova scritta può essere: non superata (voto inferiore a 15/30), oppure superata con riserva (se il voto è superiore o uguale a 15/30, ma inferiore a 18/30), o pienamente superata se il voto è maggiore o uguale a 18/30.

La prova orale è obbligatoria per chi supera con riserva, mentre è facoltativa nel caso in cui la prova scritta sia pienamente superata e può essere svolta in un qualunque appello dell’anno accademico in cui la prova scritta è stata superata (pienamente o con riserva), fissato o concordato dal Docente.


Esempi di domande e/o esercizi frequenti

Sul sito docente e sul sito 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.