SISTEMI OPERATIVI - canale 1

Anno accademico 2018/2019 - 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.


Modalità di svolgimento dell'insegnamento

Lezioni frontali. Esercitazioni.


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

Gli asterischi indicano le competenze minime.

  • 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. (*)
  • 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. • File System e System call sui file. • Cenni su 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
1Generalità 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 
2Software libero e relative licenze d'uso. GPL.Dispense Docente 
3La storia di Unix. La genealogia dei sistemi operativi. Lo standard POSIX. Peculiarità di Unix e differenze tra Unix e Linux.Dispense Docente 
4Classificazione 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 
5Concetto 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 
6Cenni di system call per la gestione di processi in ambiente Windows.Silbershatz: Cap. 2. Tanenbaum: Cap.1. Dispense Docente 
7Segnali 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 
8Thread. 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 
9Attivazione dello Scheduler, upcall. Dati specifici dei thread. Gruppi di thread. Silbershatz: Cap.4 Tanenbaum: Cap. 2.2. Dispense Docente 
10La 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 
11Cenni di thread in ambiente Windows.Silbershatz: Cap.4. Dispense Docente 
12Linux: Esercitazione sui comandi di shell. Beginning Linux Programming: Cap. 2. 
13Programmazione della shell.Beginning Linux Programming: Cap. 2. 
14Esercitazioni sui contenuti precedenti Dispense Docente 
15Sezione 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 
16IPC 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. 
17Comunicazione nei sistemi client-server: socket.Beginning Linux Programming: Cap. 13, 15. Dispense Docente. 
18Deadlock. Definizione del problema e strategie di gestione. Silbershatz:Cap.7. Tanenbaum: Cap.6. Dispense Docente 
19Algoritmo del banchiere con risorsa singola.Silbershatz:Cap.7. Tanenbaum: Cap.6. Dispense Docente 
20Schedulazione 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 
21Cenni sullo scheduling nei sistemi real-time. • Cenni sullo scheduling di Linux: Completely Fair Scheduler.Dispense Docente 
22•Cenni di gestione della memoria centrale. • File System e System call sui file. •Cenni su I/O Software. Silbershatz, Cap.8, Cap 11, 13 Tanenbaum, Cap.3, Cap.4 (File system), Cap.5 (I/O) Dispense Docente 

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, della durata di 3 ore, è rappresentata da un elaborato al calcolatore e da una sezione teorica, composta da due quesiti a risposta aperta, del valore di 5 punti ciascuno, entrambe obbligatorie. La prova scritta si intende superata se il voto è maggiore o uguale a 18/30. La prova orale è facoltativa e può essere svolta in un qualunque appello dell’anno accademico in cui la prova scritta è stata superata, fissato o concordato dal/con i Docenti.

Sono previste due prove in itinere. Le prove in itinere si intendono superate se il voto ottenuto in ciascuna prova è superiore o uguale a 18/30. In tal caso, il voto finale uguale alla media della valutazione delle due prove. E’ prevista una Prova Orale facoltativa per chi supera le prove in itinere. Le prove in itinere sono facoltative e si svolgono circa a metà corso (UDE 1,2 e parte della UDE 3) e una a fine corso (UDE 3,4,5). La durata delle prove è di tre ore ciascuna, e consistono di una parte teorica (domande a risposta aperta) e una di programmazione.


Esempi di domande e/o esercizi frequenti

System call per la gestione dei processi e dei segnali.

Differenze tra thread e processi.

Implementazioni di thread.

La libreria dei thread.

Mutua esclusione e relative soluzioni.

Meccanismi di Inter Process Communication.