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
A.Silberschatz, P.B.Galvin, G.Gagne, "Sistemi operativi. Concetti ed esempi", Pearson/Addison Wesley
Mark Mitchell, Jeffrey Oldham, Alex Samul, "Advanced Linux Programming" (https://richard.esplins.org/static/downloads/linux_book.pdf)
Contenuti
GENERALITA’ SUI SISTEMI OPERATIVI: sistemi monolitici, sistemi a livelli, macchine virtuali, sistemi distribuiti client-server. Definizione di Processo, Memoria Virtuale, File System, System Call, Kernel, Shell. EVOLUZIONE DEI SISTEMI OPERATIVI: dalla mono alla multiprogrammazione; il concetto di multitasking. MODELLO DI INTERAZIONE TRA CPU E DISPOSITIVI: Sistema di interruzione. Interruzioni e multiprogrammazione. Processo di interruzione. Modi di funzionamento della CPU. GESTIONE DEI PROCESSI: modello di un processo, vita di un processo, meccanismi di controllo. La Schedulazione a breve termine (di CPU), la Schedulazione a medio termine (swapping), La Schedulazione a lungo termine (dei processi): algoritmi di schedulazione (senza prelazione, con prelazione, Round Robin, con priorità, code multiple, SJF). SINCRONIZZAZIONE TRA PROCESSI: corse critiche, mutua esclusione, sospensione e risveglio, stallo, meccanismi di condivisione della memoria e scambio messaggi. Meccanismi di sincronizzazione tra processi: semafori. La Comunicazione Inter-Processo (IPC) e i suoi problemi: esempio del produttore-consumatore. La Gestione dei Processi e IPC in ambiente distribuito (accenni). I Threads: definizione, sistemi operativi multi-threaded, rapporto tra threads e processi. GESTIONE DELLA MEMORIA: partizionamento fisso, rilocazione e protezione; gestore con swapping: multiprogrammazione a partizioni variabili, squeeze (compattamento). MEMORIA VIRTUALE: definizione di spazio di indirizzamento virtuale, MMU, overlay e paginazione, Virtual Page Table a uno o più livelli. Segmentazione. GESTIONE DEI FILE: il file system (struttura gerarchica in file e directory, tipi di file system). Implementazione del file system: struttura del file system, implmentazione delle directory,metodi di allocazione, gestione dello spazio libero. LABORATORIO: La gestione dei processi. La libreria pthread. Gestione dei thread, mutex, semafori. Programmazione concorrente.