Sistemi Operativi 2017 /18

La deadline della consegna dei progetti per questo anno accademico e' il 29 Settembre 2018. Oltre tale data bisognera' ripetere lo scritto. Entro il 29 Settembre bisognera' aver comunicato che si e' concluso il progetto, la discussione puo' avvenire anche nei giorni successivi.

Abstract

Questo corso ha lo scopo di fornire agli studenti le conoscenze necessarie sull'architettura di moderni sistemi operativi. Il corso copre sia aspetti teorici su problematiche quali architetture, scheduling, gestione della memoria e dei processi e socket TCP/IP, sia aspetti pratici di programmazione e gestione del sistema operativo dal lato utente.

Ufficio

B115 - DIAG

B121 - DIAG

Ricevimento

Appuntamento via email - grisetti [at] diag [dot] uniroma1 [dot] it

Appuntamento via email - ialoise [at] diag [dot] uniroma1 [dot] it

IMPORTANTE: Per tutte le comunicazioni riguardanti il corso e l'esame usare sempre [SO] come primo elemento dell'oggetto. La mancata osservazione di questa regola riduce la priorita' di risposta alla mail inviata.

Prerequisiti

E' opportuna una buona conoscenza del linguaggio C e dei contenuti del corso di Sistemi Di Calcolo.

Esame (6 cfu)

Modalità di esame: progetto + esame scritto

PROGETTO

  • Sviluppare un progetto (individuale o a gruppi).

La consegna di progetto e relativa relazione abilita allo svolgimento della prova scritta.

La prova scritta puo' essere svolta prima della consegna del progetto. Il voto finale verra' deciso alla consegna del progetto.

Gli studenti che sostengono la prova scritta nella sessione di Gennaio-Febbraio possono sono tenuti a consegnare il progetto entro Giugno-Luglio.

Per chi non ha sostenuto l'esame scritto nella sessione di Gennaio-Febbraio-Marzo, il progetto puo' comunque essere consegnato fino alla fine di Luglio. E' possibile sostenere la prova scritta negli appelli di Giugno e Luglio. L'esame si concludera' comunque alla consegna del progetto.

Dalla sessione estiva in poi, il progetto va consegnato prima della prova scritta.


  • Modalita' di assegnazione del progetto:

Il progetto va concordato con il docente (Giorgio Grisetti) ed il tutor (Irvin Aloise). La scelta del progetto va comunicata al tutor (ialoise@diag.uniroma1.it) ed in cc al docente mediante email recante oggetto [SO][Assegnazione progetto]. Tutti gli esempi di progetti sono contenuti nel file project_examples.txt della repository di Sistemi Operativi.


  • Esposizione del progetto:

Una volta completato il progetto, va consegnato via mail un breve report di carattere generale (rigorosamente PDF) non contenente codice, in cui si risponde alle domande what, how, how-to-run. Infine, gli studenti dovranno concordare con il docente (Giorgio Grisetti) ed il tutor (Irvin Aloise) una data in cui esporre quanto fatto. La mail dovrà avere come oggetto "[SO] Discussione" e contenere anche la matricola dello studente.

ESAME SCRITTO

  • Svolgere un esame scritto

[Aggiornamento 26 Ott 2018] Sono disponibili i risultati dell'appello di Ottobre.

Nei risultati, gli studenti la cui matricola è in GIALLO dovranno sostenere un breve esame orale durante la presentazione del progetto per poter raggiungere la sufficienza. Nel caso in cui tali studenti non risultino idonei dopo tale verifica, dovranno risostenere anche la prova scritta.

Chiunque intenda rifiutare il voto dello scritto, dovrà comunicarlo via mail al tutor e al docente entro il prossimo appello.

Gli studenti che appartengono al vecchio ordinamento dell'esame (9CFU) dovranno sostenere un'orale. Nella repository di Sistemi Operativi sara' possibile trovare degli esercizi svolti dell'esame di TDP, i quali potranno essere usati come esercizi per tale prova orale. A titolo di riferimento gli studenti devono saper svolgere tutti gli esercizi che non comportano la ricorsione.

A seguito della valutazione del progetto, il voto dello scritto potrà essere aumentato fino a 4 punti.

Orario e Luogo delle Lezioni

  • Periodo: Primo Semestre
  • Lunedi' 14:00-16:00, Aula 8
  • Venerdi' 16:00-19:00, Aula 24
  • Luogo: Facolta' di Ingegneria, Via Eudossiana 18, Roma


Programma Preliminare

Introduzione al Corso

Cenni Storici (sistemi batch, multiprogrammati, in time sharing)

Tipi di architetture computazionali (singolo processore, multi-processore, multi-core, cluster, client-server e distribuiti)

Architettura a Strati (monolitica e microkernel)

Servizi di un OS

Linux/Unix comandi e processi

System Call

Interrupt ed Eccezioni

Vettore delle interruzioni

System Call Tipiche

Polling

Processi e Thread

Context Switch Scheduling

Creazione, Terminazione

IPC

Multithreading

Scheduling di Processi

Metriche

Politiche

Algoritmi

Sincronizzazione di Processi

Sezione Critica

Soluzione di Peterson

Sincornizzazione Hardware

Semafori

Deadlock e Starvation

Inversione delle Priorita'

Problemi tipici: Bounded Buffer, Lettori e Scrittori, Filosofi

Monitor

Deadlock

Caratterizzazione

Grafo di Allocazione delle Risorse

Prevenzione di Deadlock

Tecniche per evitare Deadlock

Rilevamento

Contromisure

Gestione della Memoria

Protezione della Memoria Registri base e Limite

Indirizzi Logici e Fisici

Caricamento e Linking Dinamici

Swapping

Allocazione Contigua, Frammentazione

Partizionamento Dinamico

Paginazione: indirizzamento, frammentazione interna, implementazione, TLB

Segmentazione

Memoria Virtuale

Gerarchie della memoria

Spazio viruale degli indirizzi

Paginazione su richiesta

Page Fault Rate

Sostituzione delle Pagine: algoritmi

Trashing

Localita'

File System

Attributi, file e directory

Operazioni: creazione, apertura, chiusura, cancellazione, riposizionamento, impostazione attributi

Accesso: sequenziale e diretto

Organizzazione di un File System: partizioni, dirtectory, files, struttura ad albero ed a grafo

Mounting

Frammentazione e Journaling

Eventi

Segnali

Stutture Kernel

Gestione sicura dei segnali

The image on this page is by Cushing Memorial Library and Archives, (Flickr: IBM Processing Machine) [CC BY 2.0 (http://creativecommons.org/licenses/by/2.0)], via Wikimedia Commons