L'obiettivo principale del corso è l'acquisizione delle conoscenze di base sulla struttura dei moderni Sistema Operativi "general purpose” mettendo in evidenza i meccanismi di basso livello che rendono possibile il funzionamento multiprogrammato degli attuali sistemi e soffermandosi sulle strutture dati interne ad un kernel e sui principali algoritmi implementati in un sistema reale per la gestione di un sistema a microprocessore.
Prerequisiti
Conoscenze di programmazione C, e di algoritmi e strutture dati avanzate. Nozioni di architetture dei calcolatori.
Testi
Sistemi Operativi. Concetti ed Esempi Decima Edizione Avi Silberschatz Peter Baer Galvin Greg Gagne John Wiley & Sons, Inc. ISBN 8891904554
Contenuti
Capitolo 1: Introduzione: 1.1 Cosa fanno i sistemi operativi 1.2 Organizzazione del sistema informatico 1.3 Architettura del sistema informatico 1.4 Struttura del sistema operativo 1.5 Gestione delle risorse 1.6 Protezione e Sicurezza 1.7 Virtualizzazione 1.8 Sistemi distribuiti 1.9 Strutture dati del kernel 1.10 Ambienti informatici 1.11 Sistemi operativi liberi/liberi e open source
Capitolo 2: Strutture del sistema operativo 2.1 Servizi del sistema operativo 2.2 Interfaccia utente e sistema operativo 2.3 Chiamate di sistema 2.4 Servizi di sistema 2.5 Linker e caricatori 2.6 Perché le applicazioni sono specifiche del sistema operativo 2.7 Progettazione e implementazione del sistema operativo 2.8 Struttura del sistema operativo 2.9 Costruzione e avvio di un sistema operativo 2.10 Debug del sistema operativo
Capitolo 3: Processi 3.1 Concetto di processo 3.2 Pianificazione del processo 3.3 Operazioni sui Processi 3.4 Comunicazione tra processi 3.5 IPC nei sistemi a memoria condivisa 3.6 IPC nei sistemi di passaggio di messaggi 3.7 Esempi di sistemi IPC 3.8 Comunicazione in Client-Server
Capitolo 4: Thread e concorrenza 4.1 Panoramica 4.2 Programmazione multicore 4.3 Modelli multithread 4.4 Librerie di thread 4.5 Threading implicito 4.6 Problemi di threading
Capitolo 5: Pianificazione della CPU 5.1 Concetti di base 5.2 Criteri di pianificazione 5.3 Algoritmi di pianificazione 5.4 Pianificazione dei thread 5.5 Pianificazione multiprocessore 5.6 Pianificazione della CPU in tempo reale 5.8 Valutazione dell'algoritmo
Capitolo 6: Strumenti di sincronizzazione 6.1 Contesto 6.2 Il problema della sezione critica 6.3 Soluzione di Peterson 6.4 Supporto hardware per la sincronizzazione 6.5 Blocchi Mutex 6.6 Semafori 6.7 Monitor 6.8 Vivacità
Capitolo 7: Esempi di sincronizzazione 7.1 Problemi classici di sincronizzazione 7.2 Sincronizzazione all'interno del Kernel 7.3 Sincronizzazione POSIX
Capitolo 8: Deadlock 8.1 Modello di sistema 8.2 Deadlock nelle applicazioni multithread 8.3 Caratterizzazione dello stallo 8.4 Metodi per gestire i deadlock 8.5 Prevenzione dello stallo 8.6 Evitare lo stallo 8.7 Rilevamento dello stallo 8.8 Recupero dallo stallo
Capitolo 9: Memoria principale 9.1 Contesto 9.2 Allocazione di memoria contigua 9.3 Cercapersone 9.4 Struttura della tabella delle pagine 9.5 Scambio
Capitolo 10: Memoria virtuale 10.1 Contesto 10.2 Cercapersone su richiesta 10.3 Copia su scrittura 10.4 Sostituzione pagina 10.5 Assegnazione dei Frame 10.6 Percosse 10.7 Compressione della memoria 10.8 Allocazione della memoria del kernel
Capitolo 11: Struttura di archiviazione di massa 11.1 Panoramica della struttura di archiviazione di massa 11.2 Pianificazione dell'HDD 11.3 Pianificazione della MNV 11.4 Rilevamento e correzione degli errori 11.5 Gestione dei dispositivi di archiviazione 11.6 Gestione dello spazio di scambio 11.7 Allegato Deposito 11.8 Struttura RAID
Capitolo 12: Sistemi I/O 12.1 Panoramica 12.2 Hardware I/O 12.3 Interfaccia I/O dell'applicazione 12.4 Sottosistema I/O del kernel 12.5 Trasformazione delle richieste I/O in operazioni hardware 12.6 FLUSSI
Capitolo 13: Interfaccia del file system 13.1 Concetto di file 13.2 Metodi di accesso 13.3 Struttura delle directory 13.4 Protezione 13.5 File mappati in memoria
Capitolo 14: Implementazione del file system 14.1 Struttura del file system 14.2 Operazioni sul file system 14.3 Implementazione della directory 14.4 Metodi di assegnazione 14.5 Gestione dello spazio libero 14.6 Efficienza e prestazioni 14.7 Recupero