Insegnamento SISTEMI OPERATIVI CON LABORATORIO

Nome del corso di laurea Informatica
Codice insegnamento 55012409
Curriculum Comune a tutti i curricula
Docente responsabile Arturo Carpi
Docenti
  • Arturo Carpi
  • Fabio Rossi
Ore
  • 42 Ore - Arturo Carpi
  • 36 Ore - Fabio Rossi
CFU 9
Regolamento Coorte 2019
Erogato Erogato nel 2020/21
Erogato altro regolamento
Attività Caratterizzante
Ambito Discipline informatiche
Settore INF/01
Anno 2
Periodo Secondo Semestre
Tipo insegnamento Obbligatorio (Required)
Tipo attività Attività formativa monodisciplinare
Lingua insegnamento ITALIANO
Contenuti Generalità sui sistemi operativi. Processi e thread. Scheduling della CPU. Sincronizzazione dei processi. Blocco critico. Gestione della memoria centrale. Memoria virtuale. File system. Nozioni base sul sistema di I/O. La bash di Unix. Programmazione di sistema in C/UNIX: le system call e il loro impiego.
Testi di riferimento Sistemi Operativi. A.Silberschatz, P.Galvin, G.Gagne. Nona edizione, Wiley
(Also in English: Operating system concepts, A.Silberschatz, P.Galvin, G.Gagne. 9th edition. Wiley.)
Operating Systems. Internals and design Principles. W.Stallings. Quinta edizione (anche in italiano). 2005.

Manuale on-line del sistema operativo unix/linux (man).
Unix for Programmers and Users. Graham Glass e King Ables, terza edizione, Pearson-PrenticeHall, 2003.
Unix systems programming. K.A.Robbins e S.Robbins, PrenticeHall, 2003.
System programming with C and UNIX. A. Hoover, Pearson, 2010.
J.G.Brookshear e S.G.Kochan. Fondamenti di informatica e programmazione in C. Pearson, 2014.
Obiettivi formativi Il corso si propone di fornire competenze relative ai concetti di base comuni ai sistemi operativi, alla loro architettura e loro principali funzionalità. Parimenti si vuole fornire nozioni e competenze relative alle tecnologie e tecniche HW e SW sviluppate per la soluzione delle principali problematiche insite nel processo di progetto, realizzazione ed utilizzo di un sistema operativo.
Attraverso la attività pratiche in laboratorio lo studente acquisirà capacità nell'analizzare e risolvere i problemi tipici relativi alla gestione, sincronizzazione e comunicazione tra processi.
Prerequisiti Al fine di comprendere a pieno i contenuti del corso, lo studente deve aver acquisito conoscenza delle seguenti nozioni:

Matematica discreta: nozioni di relazione, albero, grafo.
Architettura degli elaboratori: funzioni logiche e loro rappresentazione; la rappresentazione dei numeri e aritmetica di macchina; architettura a livello del processore; indirizzamento ed esecuzione delle istruzioni; dispositivi di memoria.
Programmazione: basi della programmazione in C; costrutti di controllo; headers e compilazione separata; strutture dati (array, struct, union) e allocazione dinamica della memoria; operazioni di I/O; funzioni e argomenti funzione.
Metodi didattici Lezioni frontali in aula su tutti gli argomenti del corso.

Lezioni teorico-pratiche in laboratorio sulla parte di programma indicata come "Laboratorio".
Altre informazioni See http://www.informatica.unipg.it
Modalità di verifica dell'apprendimento La prova d'esame prevede una parte scritta e una orale.

La prova scritta, della durata indicativa di 90 minuti, comprende domande a risposta multipla, domande con risposta aperta, e svolgimento di esercizi. Scopo della prova è verificare l'acquisizione di competenze ed evidenziare le capacità risolutive di problemi pratico-teorici inerenti argomenti compresi nel programma svolto.

La prova orale consiste in un colloquio, della durata massima indicativa di 1 ora, e mira a verificare le competenze e le capacità acquisite dal candidato ed al contempo la sua abiliità nell'applicare in modo adeguato le tecniche risolutive nel affrontare e risolvere problemi pratici.

Per informazioni sui servizi di supporto agli studenti con disabilità e/o DSA visita la pagina http://www.unipg.it/disabilita-e-dsa
Programma esteso Lezioni teoriche:
---------------------
Generalità sui sistemi operativi:
Cosa è un Sistema Operativo. Organizzazione di un sistema di calcolo. Architettura degli elaboratori.
Struttura del sistema operativo. Attività del sistema operativo. Gestione dei processi. Gestione della memoria.
Gestione della memoria di massa. Protezione e sicurezza..

Struttura e Servizi dei Sistemi Operativi: Servizi di un sistema operativo. Interfaccia con l'utente del sistema operativo.
Le system call. Categorie di system call. Programmi di sistema. Progettazione e realizzazione di un sistema operativo.
Struttura del sistema operativo. Macchine virtuali. Generazione di sistemi operativi. Avvio del sistema.

Processi: Concetto di processo. Stato di un processo. Il PCB. Code di processi. Scheduling dei processi.
Short/mid/long term scheduler. Il caso di UNIX. Operazioni sui processi. Il meccanismo exit/wait in UNIX.

Cooperazione tra processi. Comunicazione tra processi. Memoria condivisa. Scambio messaggi.
Comunicazione diretta/indiretta e sincrona/asincrona. Comunicazione nei sistemi client-server.

I thread: motivazioni, vantaggi e svantaggi. Modelli di programmazione multithread.

Scheduling della CPU: Concetti fontamentali sullo scheduling.
Ciclicità delle fasi di elaborazione: CPU-burst e I/O-burst. Scheduler e dispatcher.
Criteri e obiettivi di scheduling. Scheduling con o senza prelazione.
Algoritmi di scheduling. Algoritmo FCFS. Algoritmo SJF. Algoritmo SRTF. Stima delle durate dei CPU-burst.
Algoritmo HRRF. Uso di priorità. Tecnica di aging. Round robin (RR).
Scheduling con code multiple e con retroazione.
Comparazione vantaggi e svantaggi dei vari algoritmi.
Cenni allo scheduling in UNIX e Linux. Scheduling di thread.

Sincronizzazione: Introduzione. Concorrenza e problematiche connesse.
Nozioni di sezione critica, race condition, mutua esclusione, deadlock, starvation.
Esempio: produttore/consumatore con buffer limitato. Problema della sezione critica e sua soluzione.
Semplici tentativi di soluzione e soluzione di Peterson. Hardware per la sincronizzazione.
I semafori (Semafori Mutex e gestione della sezione critica. Semafori di sincronizzazione. Spin-lock. Semafori senza busy-waiting.)
Problemi: deadlock e starvation.

Problemi tipici di sincronizzazione: Produttori e consumatori con buffer limitato;
Lettori e scrittori (con priorità a lettori o a scrittori); I cinque filosofi.
Soluzioni di questi problemi tramite l'uso dei semafori. Soluzioni che evitano deadlock e starvation.
Motivazioni per l'introduzione dei monitor. Il costrutto di monitor.
Soluzione di problemi tipici di sincronizzazione con l'uso di monitor.

Deadlock: Introduzione: Il problema del deadlock. Modello del sistema. Caratterizzazione delle situazioni di stallo.
Metodi per la gestione del deadlock. Algoritmo "dello struzzo". Deadlock prevention. Deadlock avoidance.
Deadlock detection&recovery. Approccio combinato. Esercizi ed esempi.

Gestione della Memoria Principale: Nozioni generali. Spazio degli indirizzi. Binding.
Collegamento statico e dinamico. Caricamento statico e dinamico. Swapping. Rilocazione.
Tecniche di allocazione contigua della memoria. Problema della frammentazione.
Il "buddy system". Paginazione. Tecniche di implementazione per la tabella delle pagine.
Condivisione di pagine. Segmentazione. Confronto tra paginazione e segmentazione.
Segmentazione paginata. Cenni al caso di Linux/Pentium.

Memoria Virtuale: Concetti generali e motivazioni. Paginazione su richiesta. Sostituzione delle pagine.
Anomalia di Belady. Allocazione dei frame. Paginazione degenere. Working-set e page-fault frequency.

Cenni al File System: Concetto di file e sue caratteristiche. Directory.
Strutturazione e realizzazione del file system, Metodi di allocazione. Spazio libero.

Laboratorio:
-------------------
La bash di Unix:
Concetti fondamentali: la shell, struttura del file system unix, i principali comandi.
La shell e le modalità di esecuzione dei comandi (job control, redirezione,
variabili di shell, espansioni dei comandi, ...). Scripting di shell.
File di configurazione/inizializzazione.

Programmazione di sistema in linguaggio C:
Il comando make. Le system call di Unix, concetti introduttivi.
I processi e la loro creazione. L'ambiente di un processo. Accesso a file e directory. Pipe. Memory-mapped I/O e gestione della memoria allocata ad un processo. Comunicazione e sincronizzazione tra processi (segnali; semafori; shared memory; code di messaggi; socket). I pthread.
Condividi su