Programma di Sistemi Operativi:

OBBIETTIVI

Il corso intende fornire allo studente una preparazione di base sui moderni sistemi operativi: finalità, problematiche, algoritmi e tecniche di base.Inoltre il corso introduce lo studente alla programmazione dei sistemi POSIX con il linguaggio C.

PROGRAMMA * Richiami di calcolatori elettronici (I componenti di un sistema di calcolo. Architettura generale del software) * Introduzione ai sistemi operativi (Definizione di sistema operativo. Il concetto di multiprogrammazione.) * Struttura di un sistema operativo (Servizi del sistema operativo Interfacce utente. Chiamate di sistema. Controllo dei processi. Gestione dei file. Gestione dei dispositivi di I/O. Gestione delle informazioni. Comunicazioni. Progettazione di un sistema operativo. Struttura di un sistema operativo) * Gestione dei processi (Il blocco di controllo. Struttura di un file eseguibile. La schedulazione dei processi. Il job scheduler. Lo scheduler a breve termine. Lo scheduler a medio termine. Contesto e cambio di contesto) * Processi e thread (Gestione dei processi. I thread. La libreria di thread POSIX. Implementazione dei thread in Linux) * Schedulazione dei processi (Schedulazione e caratteristiche dei processi. Algoritmi di schedulazione. Schedulazione nei sistemi multiprocessore. La schedulazione dei processi in Linux) * Sincronizzazione dei flussi di esecuzione (Flussi di esecuzione e race condition. Le regioni critiche. Operazioni atomiche. Primitive di sincronizzazione. Il problema dello stallo. La sincronizzazione in Linux) * Gestione della memoria centrale (Schemi di indirizzamento della memoria centrale. La segmentazione. La paginazione. La gestione della memoria centrale in Linux su IA-32) * Gestione delle pagine fisiche di memoria (Frammentazione esterna della memoria. Frammentazione interna della memoria. L'allocatore di tipo Buddy system. L'allocatore "slab allocator". Pagine fisiche e pagine virtuali. Paginazione su richiesta. Condivisione delle pagine fisiche tra i processi. Copiatura su scrittura delle pagine fisiche. Gestione delle pagine fisiche di memoria in Linux) * Gestione della memoria virtuale (Regioni di memoria virtuale. Algoritmi di sostituzione delle pagine. Politiche di assegnazione della memoria fisica) * Interfaccia del file system (Il sistema di archiviazione in memoria secondaria. I file e la loro gestione. Tipo e contenuto dei file. Operazioni sui file. Le directory) *  Realizzazione del file system (Protezione dei file. Montaggio di un file system. Componenti del sistema operativo per il file system. Il file system virtuale (VFS). Il file system su disco) * Gestione della memoria secondaria (I file system annotati. Tecnologia e prestazioni del disco magnetico. Algoritmi di schedulazione del disco. I sistemi RAID) * La memoria tampone per i dischi (Efficienza e prestazioni della memoria secondaria. Memorie tampone per la memoria secondaria. Ottimizzazione degli accessi ai file. Recupero della memoria fisica) * Gestione delle periferiche di I/O (Le periferiche di I/O. Le interfaccie di I/O. Driver delle periferiche) * Ciclo di esercitazioni: Installazione ed uso di una distribuzione basata su Linux. Richiami di programmazione in linguaggio C. Gestione dei file. Gestione dei processi. Segnali. Interprocess Communication. Applicazioni multithread.