Obiettivo principale del corso è di fornire le conoscenze di base di un moderno sistema operativo mettendo in luce le sue principali funzionalità.
Il linguaggio Java è usato nel corso per fornire esempi di programmazione multithread e per risolvere problemi di sincronizzazione tra processi mediante l'uso di semafori e metodi sincronizzati.
La maggior parte degli argomenti del corso sono trattati in:
- Sistemi Operativi: Concetti ed esempi, settima edizione, Pearson Addison-Wesley, A.Silberschatz, P. Galvin, G. Gagne.
Obiettivi Formativi
Il corso si pone un duplice obiettivo: da un lato, sono fornite le conoscenze relative alla struttura ed alle modalità di funzionamento dei moderni sistemi operativi; dall’altro, sono affrontate le problematiche di programmazione relative all’utilizzo delle funzionalità che il sistema operativo mette a disposizione di un utente programmatore.
Conoscenza dei diversi aspetti del funzionamento di un moderno sistema operativo.
Conoscenze di base del linguaggio Java e suo utilizzo per la soluzione di problemi di programmazione multithread e concorrente.
Prerequisiti
La conoscenza della programmazione e delle architetture dei calcolatori come acquisite nei corsi di Fondamenti di Informatica I e di Calcolatori Elettronici, costituiscono prerequisiti utili alla comprensione dei contenuti del corso.
Dal manifesto degli studi per il CDL in Ingegneria Informatica sono previste le precedenze con i corsi di Fondamenti di Informatica I e Calcolatori Elettronici
Commissione:
S. Berretti, C. Colombo, P. Pala, E. Vicario
Modalità di verifica apprendimento
prova scritta e prova orale
Programma del corso
1. Introduzione
Introduzione ai Sistemi Operativi (rif.[silberschatz-osc], Cap.1) -
Cos'e' un Sistema Operativo: vista dell'utente e del sistema. Sistemi mainframe: sistemi batch, sistemi multiprogrammati e sistemi time-sharing. Personal Computer. Sistemi multiprocessore. Sistemi distribuiti: client-server, peer-to-peer. Sistemi real time. Sistemi palmari.
Struttura di un sistema di calcolo (rif.[silberschatz-osc], Cap.2) -
Operazioni del sistema: bootstrap, interruzioni, system call. Struttura dell'I/O: gestione con interrupt sincroni e asincroni. Protezione hardware: modo utente e modo sistema, protezione dell'I/O, protezione della memoria, protezione della CPU.
Struttura del Sistema Operativo (rif.[silberschatz-osc], Cap.3) -
Struttura e funzioni di un sistema operativo: gestione dei processi, gestione della memoria principale, gestione dei file, gestione dei dispositivi di I/O, gestione della memoria secondaria. Struttura dei sistemi operativi: struttura semplice, struttura stratificata, microkernel. Macchine virtuali.
2. Le basi del linguaggio Java
Java (rif.[dispense-java]) -
La tecnologia Java e la Java Virtual Machine. Classi e oggetti. Passaggio di parametri. Array. Gestione delle eccezioni. Classi derivate. Interfacce. Polimorfismo.
3. Gestione dei processi
I processi (rif.[silberschatz-osc], Cap.4; [gapil], Cap.2) -
Modello della multiprogrammazione. Concetto di processo. Scheduling dei processi. Operazioni sui processi. I processi in Linux. Le system call fork(), exec(), wait() e exit(). Esempi in linguaggio C.
I threads (rif.[silberschatz-osc], Cap.5; [java-threads], Cap.1,2) -
Concetto di thread. Modelli multithreading: molti-a-uno, uno-a-uno, molti-a-molti. Le system call fork() e exec() per i thread. Cancellazione, gestione dei segnali e pool di thread. Threads in Java: la classe Thread e l'interfaccia Runnable. Scheduling dei threads in Java.
Scheduling della CPU (rif.[silberschatz-osc], Cap.6; [dispense-scheduling_rt]; [dispense-scheduling_linux]; [gapil], Cap.3) -
Cicli di I/O e CPU burst. Scheduler della CPU: scheduling di tipo preemptive e non. Il dispatcher. Criteri di scheduling. Algoritmi di scheduling: first-come first-serverd (FCFS), shortest-job-first (SJF), shortest remaining time first (SRTF), scheduling con priorita' e aging, round-robin (RR), scheduling a code multiple e code multiple con feedback. Scheduling di piu' processori. Lo scheduling di Linux. Algoritmi di scheduling real time: rate monotonic scheduling e earliest deadline first. Inversione di priorita'.
Sincronizzazione tra processi (rif.[silberschatz-osc], Cap.7; [dispense-software]; [java-threads], Cap.3,4) -
Introduzione. Il problema della sezione critica: soluzioni per due processi, soluzione per n processi, sincronizzazione hardware. Problema dell'attesa attiva. Semafori: utilizzo e implementazione. Deadlock e starvation. Problemi di sincronizzazione: produttore-consumatore, lettori-scrittori, filosofi a cena. I monitor: variabili di condizione. Soluzione al problema dei filosofi a cena con l'uso di monitor. Sincronizzazione in Java: metodi synchronized, wait(), notify(), notifyAll(). I semafori e i monitor in Java: esempi applicativi. Nested lock. Variabili di condizione.
Comunicazione tra processi (rif.[silberschatz-osc], Cap.3; [dispense-socket]; [dispense-software]) -
Comunicazione tra processi: memoria condivisa e scambio di messaggi. Comunicazione in sistemi client-server: i socket. Comunicazione e sincronizzazione tra processi. Esempio: server TCP a singolo thread, a piu' thread e thread pooling.
Stallo (rif.[silberschatz-osc], Cap.8) -
Caratterizzazione della condizione di stallo: condizioni necessarie. Grafo di allocazione delle risorse. Metodi per la gestione dello stallo. Prvenzione dello stallo. Evitare lo stallo: stato sicuro, algoritmo del grafo di allocazione delle risorse, algoritmo del banchiere. Rilevazione e recupero dello stallo: singola istanza di una risorsa, risorse con istanze multiple, terminazione dei processi, preemption delle risorse.
4. Gestione della memoria
Gestione della memoria centrale (rif.[silberschatz-osc], Cap.9) -
Binding degli indirizzi. Spazio di indirizzamento logico e fisico. Caricamento dinamico. Linking dinamico e librerie condivise. Swapping. Allocazione contigua in memoria. Paginazione: approccio base, supporto hardware, protezione. Struttura della tabella delle pagine: gerarchica, hash, invertita. Segmentazione: approccio base, hardware, protezione e condivisione, frammentazione. Segmentazione con paginazione: architettura Intel 386.
Memoria virtuale (rif.[silberschatz-osc], Cap.10) -
Introduzione. Paginazione su domanda. Prestazioni della paginazione su domanda. Creazione di processi. Sostituzione delle pagine: schema base, FIFO, ottimo, LRU, LRU approssimato. Allocazione di frame: minimo numero di frame, algoritmi di allocazione, allocazione locale e globale. Thrashing: modello del working set, frequenza dei page fault. Altre considerazioni: prepaging, dimensione della pagina, TLB, struttura del programma, blocco di I/O.