SISTEMI OPERATIVI - canale 1

Anno accademico 2016/2017 - 2° anno
Docente: Lucia LO BELLO
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

Acquisire la conoscenza dei concetti di base inerenti il progetto di sistemi operativi e la stesura di programmi 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).

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

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

-Acquisiranno 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.

-Sulla programmazione:

“familiarità con l’uso dei parametri argc e argv nella funzione main()”

“uso dei puntatori e dei vettori in ANSI C”

“uso dei vettori di strutture in ANSI C”

“implementazione di liste, pile e code in ANSI C”

“programmazione con funzioni e passaggio di parametri per valore e per riferimento”

“puntatori a funzione”

“tabelle hash”.


Frequenza lezioni

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


Contenuti del corso

  • Generalità sui sistemi operativi. Gestione delle risorse. Interfaccia utente. Concetto di Kernel. •Il sistema GNU/Linux. Struttura dei sistemi operativi: monolitici, microkernel, ibridi, client/server. System call. System call di Unix/Linux, Windows
  • Software libero e relative licenze d'uso. GPL.
  • La storia di Unix. La genealogia dei sistemi operativi. Lo standard POSIX. Peculiarità di Unix e differenze tra Unix e Linux.
  • 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: WMware e Virtual Box
  • 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(). • Cancellazione di thread. • Esempi di programmi che usano la libreria Pthread.
  • Cenni di thread in ambiente Windows.
  • Linux: Esercitazione sui comandi di shell.
  • Programmazione della shell.
  • Esercitazioni sui contenuti precedenti
  • 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.
  • 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.
  • 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

1) Per la parte teorica: In alternativa

Andrew S. Tanenbaum, “I moderni sistemi operativi 4/Ed.", 2016, ISBN 9788891901019.
oppure

Abraham Silberschatz, Peter Baer Galvin, Greg Gagne, “Sistemi Operativi, Concetti e esempi”, Nona Edizione, Pearson, ISBN 9788865183717.2)

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



Programmazione del corso

 *ArgomentiRiferimenti testi
1*Generalità sui sistemi operativi. Gestione delle risorse. Interfaccia utente. Concetto di Kernel. •Il sistema GNU/Linux. Struttura dei sistemi operativi: monolitici, microkernel, ibridi, client/server. System call. System call di Unix/Linux, WindowsSilbershatz: Cap.1, 2. Tanenbaum: Cap.1. Dispense Docente 
2 Software libero e relative licenze d'uso. GPL.Dispense Docente 
3 La storia di Unix. La genealogia dei sistemi operativi. Lo standard POSIX. Peculiarità di Unix e differenze tra Unix e Linux.Dispense Docente 
4 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: WMware e Virtual BoxSilbershatz: Cap. 2, 16 Tanenbaum: Cap.1, Cap.8.1.2 (multiprocessore) Dispense Docente 
5*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(). Silbershatz: Cap.3. Tanenbaum: Cap.2.1. Beginning Linux Programming: Cap.11. Dispense Docente 
6 Cenni di system call per la gestione di processi in ambiente Windows.Silbershatz: Cap. 2. Tanenbaum: Cap.1. Dispense Docente 
7*Segnali e loro gestione. System call kill(), signal(), alarm(), sigaction(). • Esempi di programmi che impiegano tutte le system call menzionate. Beginning Linux Programming: Cap.11. Dispense Docente 
8*Thread. Generalità, caratteristiche. • Implementazione dei thread: user space, kernel space, ibride (con riferimento alle scelte progettuali dei principali SO).Silbershatz: Cap.4 Tanenbaum: Cap. 2.2 Beginning Linux Programming: Cap.12. Dispense Docente 
9 Attivazione dello Scheduler, upcall. Dati specifici dei thread. Gruppi di thread. Silbershatz: Cap.4 Tanenbaum: Cap. 2.2. Dispense Docente 
10*La libreria Pthread. Funzioni pthread_create(), pthread_join(), pthread_exit(), pthread_detach, pthread_attr_init(). • Cancellazione di thread. • Esempi di programmi che usano la libreria Pthread.Silbershatz: Cap.4 Tanenbaum: Cap. 2.2 Beginning Linux Programming: Cap.12. Dispense Docente 
11 Cenni di thread in ambiente Windows.Silbershatz: Cap.4. Dispense Docente 
12*Linux: Esercitazione sui comandi di shell. Beginning Linux Programming: Cap. 2. 
13 Programmazione della shell.Beginning Linux Programming: Cap. 2. 
14*Esercitazioni sui contenuti precedenti Dispense Docente 
15*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.Silbershatz: Cap.3, Cap.5 Tanenbaum: Cap.2.3. Beginning Linux Programming: Cap. 12 (mutex). Dispense Docente 
16*IPC in Linux. Semafori: semget(), semop(), semctl(). Code di messaggi: msgget(), msgsnd(), msgrcv(), msgctl(). Shared memory: shmget(), shmat(), shmdt(), shmctl(). Esempi di programmi.Beginning Linux Programming: Cap. 14. Dispense Docente. 
17*Comunicazione nei sistemi client-server: socket, pipe, FIFO.Beginning Linux Programming: Cap. 13, 15. Dispense Docente. 
18*Deadlock. Definizione del problema e strategie di gestione. Silbershatz:Cap.7. Tanenbaum: Cap.6. Dispense Docente 
19 Algoritmo del banchiere con risorsa singola.Silbershatz:Cap.7. Tanenbaum: Cap.6. Dispense Docente 
20*Schedulazione della CPU. Obiettivi. Algoritmi classici: FIFO, Round-robin, Schedulazione basata su priorità. Il problema della Starvation. Code multiple. Silbershatz: Cap.6, Cap.7 Tanenbaum: Cap.2.4. Dispense Docente 
21 Cenni sullo scheduling nei sistemi real-time. • Cenni sullo scheduling di Linux: Completely Fair Scheduler.Dispense Docente 
22*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. Silbershatz, Cap.8, Cap 11, 13 Tanenbaum, Cap.3, Cap.4 (File system), Cap.5 (I/O) Dispense Docente 
* 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. Prenotazione obbligatoria tramite portale di Ateneo. La data di chiusura delle prenotazioni è fissata di norma uno-due giorni prima dell’esame per questioni logistiche (il numero di postazioni limitate per la prova scritta al calcolatore richiede la necessità di programmare più turni nello stesso appello).

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, oppure superata con riserva (se il voto è superiore a 15/30, ma inferiore a 18/30), o pienamente superata se il voto è maggiore di, 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/con i Docenti.


Esempi di domande e/o esercizi frequenti

System call per la getsione dei processi e dei segnali.

Differenze tra thread e processi.

Implementazioni di thread.

La libreari dei thread.

Mutua esclusione e relative soluzioni.

Meccanismi di Inter Process Communication.