SISTEMI OPERATIVI M - Z
Anno accademico 2024/2025 - Docente: Salvatore CAVALIERIRisultati di apprendimento attesi
Conoscenza e capacità di comprensione: Al completamento del corso, il discente avrà acquisito 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.
Capacità di applicare conoscenza e comprensione: a fine corso gli allievi saranno in grado di scrivere applicazioni contenenti system call per: creazione e gestione di processi e threads, gestione file, invio/gestione segnali, interazione e comunicazione tra processi, gestire la concorrenza dell'utilizzo di risorse condivise e creare applicazioni multithread.
Autonomia di giudizio. Al termine del corso, lo studente sarà in grado di scegliere una adeguata soluzione software basata su API Linux per ciascuno degli argomenti trattati all'interno del corso.
Abilità comunicative. Al termine del corso, lo studente può comunicare le sue conclusioni e raccomandazioni sulla progettazione e utilizzo dei sistemi operativi con l'argomentazione della conoscenza e della logica alla base di questi, a un pubblico sia specialista che non specialista in modo chiaro e inequivocabile.
Capacità di apprendimento. Al termine del corso, lo studente sarà in grado di continuare a studiare in un modo che può essere ampiamente autodiretto o autonomo.
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. 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 di base dell’architettura del calcolatore, in particolare: CPU, interrupt, registri, memorie, 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 delle 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 non è obbligatoria, ma fortemente consigliata
Contenuti del corso
UNITÀ DIDATTICA 1: INTRODUZIONE AI SISTEMI OPERATIVI. IL SISTEMA GNU/LINUX. SYSTEM CALL. FILE SYSTEM. VIRTUALIZZAZIONE.
- Generalità sui sistemi operativi. Gestione delle risorse. Interfaccia utente. Concetto di Kernel.
- Struttura dei sistemi operativi: monolitici, stratificati, microkernel, moduli kernel, ibridi, client/server.
- Cenni su UNIX e sullo standard Posix.
- Il Sistema Operativo Linux. Gestione dei moduli kernel del sistema operativo Linux. File System in Linux
- Concetto di System Call e loro realizzazione. Panoramica delle system call di Unix/Linux.
- System call POSIX sui file. Esercitazioni su System call sui file in linguaggio C.
- Virtualizzazione. Macchine virtuali. Hypervisor di livello 1 e 2. Esempi: Virtual Box.
UNITÀ DIDATTICA 2: PROCESSI E THREAD
- Concetto di Processo. Stati di un processo.
- Interruzioni hardware e software e loro gestione nei sistemi operativi.Context Switching.
- System call POSIX per creazione e gestione di processi: fork(), wait(), waitpid(). Famiglia delle exec().
- Segnali e loro gestione. Gestione segnali in Linux e limiti dei segnali. System call POSIX kill(), sleep(), pause(), alarm(), wait(), 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).
- 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.
- Esercitazione sui contenuti della Unità Didattica in linguaggio C
UNITÀ DIDATTICA 3: SCHEDULAZIONE DELLA CPU
- Schedulazione della CPU. Obiettivi. Algoritmi classici: FIFO, Round-robin. Schedulazione basata su priorità. Schedulazione basata sulla prelazione. Il problema della Starvation. Code multiple.
- Scheduling di Linux: Completely Fair Scheduler.
- Esercitazione sui contenuti della Unità Didattica in linguaggio C
UNITÀ DIDATTICA 4: GESTIONE DELLA CONCORRENZA E SINCRONIZZAZIONE.
- Concorrenza e sincronizzazione. Sezione critica. Mutua esclusione con attesa attiva. Semafori e Mutex.
- Semafori in Linux libreria System V: semget(), semop(), semctl().
- Problema classici di sincronizzazione: Problema del produttore-consumatore che condividono un Blocco Dati, Problema del produttore-consumatore con buffer di dimensione limitata, Problema dei lettori-scrittori. Risoluzione di tali problemi tramite semafori e mutex.
- Esercitazione sui contenuti della Unità Didattica in linguaggio C
UNITÀ DIDATTICA 5: GESTIONE DELLA MEMORIA.
- Gestione della Memoria Principale
- Gestione della Memoria Virtuale
UNITÀ DIDATTICA 6: INTER PROCESS COMMUNICATION (IPC)
- Introduzione alla Inter Process Communication (IPC). Shared Memory e Socket.
- IPC in Linux. Shared memory basata sulle librerie Linux System V: shmget(), shmat(), shmdt(), shmctl(). Comunicazione nei sistemi client-server basata su socket e sulle librerie POSIX: socket(), bind(), listen(), accept(), connect()
- Esercitazione sui contenuti della Unità Didattica in linguaggio C
Testi di riferimento
Per la parte teorica: [1] Abraham Silberschatz, Peter Baer Galvin, Greg Gagne, “Sistemi Operativi, Concetti e esempi”, Pearson.
In alternativa: [2] Andrew S. Tanenbaum, “I moderni sistemi operativi", Pearson.
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
Argomenti | Riferimenti testi | |
---|---|---|
1 | Generalità sui sistemi operativi. Gestione delle risorse. Interfaccia utente. Concetto di Kernel. | [1] Capitolo 1,2 - [2] Capitolo 1 |
2 | Struttura dei sistemi operativi: monolitici, microkernel, ibridi, moduli kernel. | [1] Capitolo 2 - [2] Capitolo 1 |
3 | Cenni su UNIX e sullo standard POSIX | [1] Capitolo 1 - dispense docente |
4 | Concetto di System call e passi necessari a realizzarle. Panoramica delle system call di Unix/Linux. | [1] Capitolo 2 - [2] Capitolo 1 |
5 | Virtualizzazione. Macchine virtuali. Hypervisor di livello 1 e 2. Esempi: struttura di WMware e Virtual Box. | [1] Capitolo 16 - [2] Capitolo 1 |
6 | File System e System call in Unix/Linux sui file. | [1] Capitoli 11 e 13 - [2] Capitolo 4 |
7 | Concetto di Processo. Stati di un processo. | [1] Capitolo 3 - [2] Capitolo 2 |
8 | Interruzioni hardware e software e loro gestione nei sistemi operativi. Context Switching | [1] Capitolo 3 - [2] Capitolo 2 |
9 | System call per creazione e gestione di processi: fork(), wait(), waitpid(). Famiglia delle exec(). | [1] Capitolo 3 - [3] Capitolo 11 |
10 | Segnali e loro gestione. System call kill(), sleep(), pause(), alarm(), wait(), sigaction(). | [3] Capitolo 11 |
11 | 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 |
12 | La libreria POSIX Thread. Funzioni pthread_create(), pthread_join(), pthread_exit(), pthread_detach, pthread_cancel(). Esempi di programmi che usano la libreria Pthread. | [3] Capitolo 12 - [2] Capitolo 2 |
13 | Sincronizzazione dei processi. Sezione critica. Mutua esclusione con attesa attiva. Semafori e Mutex. | [1] Capitolo 5 - [3] Capitolo 14 - [2] Capitolo 2 |
14 | Problema Classici di sincronizzazione: Produttore/Consumatore, Lettori/Scrittori e loro soluzione tramite semafori e mutex. | [1] Capitolo 5 - [2] Capitolo 2 |
15 | Semafori in Linux System V: semget(), semop(), semctl(). Esempi di programmi. | [3] Capitolo 14 |
16 | La gestione della memoria. Memoria principale e memoria virtuale | [1] Capitoli 9-10 |
17 | Comunicazione tra processi nei sistemi client-server: socket. | [3] Capitolo 15 |
18 | Comunicazione tra processi: memoria condivisa. Librerie in Linux: shmget(), shmat(), shmdt(), shmctl() | [1] Capitolo 3 - [3] Capitolo 14 |
19 | Schedulazione della CPU. Obiettivi. Algoritmi classici: FIFO, Round-robin, Schedulazione basata su priorità. Il problema della Starvation. Code multiple. | [1] Capitolo 6 - [2] Capitolo 2 |
20 | Scheduling di Linux: Completely Fair Scheduler. | [1] Capitolo 6 |
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 all'esame è obbligatoria tramite il portale di Ateneo. La data di chiusura delle prenotazioni è fissata di norma alcuni giorni prima dell'esame, in modo da dare la possibilita' al docente di prenotare le aule informatiche di capacita' adeguata al numero degli iscritti.
L’esame si compone di una prova scritta, seguita da una prova orale, entrambe obbligatorie.
La prova scritta, della durata di 3 ore, è rappresentata da uno o più elaborati al calcolatore, del valore complessivo di 18/30 punti, e da una sezione teorica, composta da uno o più quesiti a risposta aperta, del valore complessivo di 12/30 punti. La prova scritta si intende superata se il voto complessivo ottenuto dalla somma dei voti riportati nelle due sezioni è maggiore o uguale a 18/30; inoltre è necessario che lo studente abbia acquisito almeno 6/30 punti di teoria e almeno 12/30 punti nella pratica (elaborati ala calcolatore).
La prova orale è obbligatoria e consiste nella discussione della prova scritta al fine di valutare ulteriormente la natura degli errori commessi dallo studente; a tal fine la prova orale può essere completata da ulteriori domande somministrate dal docente sugli argomenti della prova scritta. Per tale motivo il voto della prova scritta potrà subire modifiche in base all'esito di questa discussione. In aggiunta a tale discussione, lo studente potrà chiedere di essere esaminato anche sugli altri argomenti del programma (scelti dal docente) diversi da quelli presenti nella prova scritta. Il voto finale terrà conto della prova scritta, dell'esito della discussione e dell'esito dell'eventuale orale integrativo richiesto dallo studente.
Sul portale utilizzato durante il corso come repository didattico, è presente un fac simile della prova scritta che specifica sia le tipologie di problemi somministrati sia le relative votazioni.
A garanzia di pari opportunità e nel rispetto delle leggi vigenti, gli studenti interessati possono chiedere un colloquio personale in modo da programmare eventuali misure compensative e/o dispensative, in base agli obiettivi didattici ed alle specifiche esigenze. È possibile rivolgersi anche al docente referente CInAP (Centro per l’integrazione Attiva e Partecipata - Servizi per le Disabilità e/o i DSA) del proprio Dipartimento.
Esempi di domande e/o esercizi frequenti
Sul portale utilizzato per la gestione del materiale didattico relativo al corso, 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.