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.
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”.
La frequenza è fortemente consigliata sia per le prove in itinere sia per sostenere la prova d’esame
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
I testi si trovano in libreria e in rete in formato elettronico.
Dispense Docente, scaricabili dal sito www.studium.it o dal sito personale della Docente (http://lobello.dieei.unict.it/so1718 ). Possono riguardare sintesi e approfondimenti di teoria non disponibili nei libri di testo o codice C utilizzato per le esercitazioni.
* | Argomenti | Riferimenti 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, Windows | Silbershatz: 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 Box | Silbershatz: 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 |
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).
Sono previste due prove in itinere. Il voto finale risulta dalla media della valutazione delle due prove. Prova orale facoltativa se il voto finale è superiore a 18/30. Prova orale obbligatoria nel caso in cui una delle due prove sia superata pienamente (ossia, con voto maggiore di, o uguale a, 18/30) e l’altra con riserva (ossia, con voto superiore a 15/30, ma inferiore a 18/30). Le prove in itinere sono facoltative e si svolgono una dopo circa i 2/3 del corso (UDE 1, 2, 3) e una a fine corso (UDE 3,4,5).
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.
System call per la gestione dei processi e dei segnali.
Differenze tra thread e processi.
Implementazioni di thread.
La librearia dei thread.
Mutua esclusione e relative soluzioni.
Meccanismi di Inter Process Communication.