Sistemi Operativi

Questa √® la pagina del corso di Sistemi Operativi per Informatica (primo livello) per l’a.a. 2017-2018. I contenuti sono sincronizzati con quelli riportati sulla piattaforma d’Ateneo Studium. Sono ancora disponibili le pagine dei corsi tenuti negli a.a. passati.


CFU: 9   ore: 72
requisiti: basi di programmazione, conoscenza dell'architettura di un calcolatore
propedeuticità: Architettura degli Elaboratori, Programmazione 1
anno:
semestre:
docente: Prof. Mario Di Raimondo
frequenza: non obbligatoria ma fortemente consigliata

aula: 2 (martedì) - 22 (giovedì)
orario: 10 - 13
giorni: martedì - giovedì
inizio lezioni: 13 Marzo 2018


Comunicazioni

Tutti gli avvisi relativi al corso saranno sempre pubblicati sulla piattaforma Studium e, per comodità, replicati automaticamente all'interno della pagina del corso sul sito del docente. E' possibile utilizzare le applicazioni Android/iOS/WP di Studium per ricevere tempestivamente le relative notifiche. Per qualunque altra questione (non coperta già dalle FAQ) è possibile contattare il docente per email.

Avvisi

Calendario e ricevimento

Nel calendario ufficiale del corso sono indicate le date delle lezioni, gli incontri per il ricevimento degli studenti e gli appelli d'esame.

L'eventuale spostamento di una lezione sarà sempre segnalato attraverso un apposito avviso. Ciò vale anche per il posticipo di una data d'appello: in questi casi sul portale CEA, a causa di limiti imposti dalla piattaforma, non sarà possibile aggiornare la data  e, pertanto, il dato a cui fare fede sarà sempre quello che compare nel calendario ufficiale del corso su questa pagina. Per quanto riguarda il ricevimento, questo potrebbe subire cambiamenti senza espliciti avvisi: gli studenti interessati sono pertanto invitati a controllare il calendario sistematicamente.


Obiettivi

Il corso propone una completa introduzione alle problematiche relative alla progettazione dei moderni sistemi operativi. La parte teorica è integrata con riferimenti concreti ai sistemi operativi contemporanei ed è prevista una parte di laboratorio in cui sono curati gli aspetti implementativi attinenti il corso.

Obiettivi formativi

  • Conoscenza e capacità  di comprensione (knowledge and understanding): lo studente sarà in grado di comprendere problematiche quali l’organizzazione di un sistema di calcolo moderno, la gestione delle risorse di un sistema di calcolo (memoria, CPU, dispositivi esterni), e la gestione e la sincronizzazione dei processi e dei thread in un sistema multiprogrammato e a condivisione del tempo. Tramite lo studio del kernel del sistema operativo Linux lo studente avrà una conoscenza pratica delle più moderne tecniche nel campo dei sistemi operativi.
  • Capacità  di applicare conoscenza e comprensione (applying knowledge and understanding): lo studente sarà in grado di utilizzare le metodologie apprese per analizzare le prestazioni di un sistema operativo in un particolare contesto applicativo; saprà formulare alternative o proporre soluzioni originali a problemi legati al funzionamento dei sistemi di calcolo complessi; saprà porre e sostenere argomentazioni nell’ambito dei sistemi operativi, evidenziando vantaggi e svantaggi di particolari soluzioni implementative; infine, grazie alle conoscenze acquisite nella parte di laboratorio, potrà operare attivamente su un sistema operativo UNIX-like attraverso la shell di comando e, dal punto di vista della programmazione, attraverso le chiamate di sistema POSIX.
  • Autonomia di giudizio (making judgements): lo studente sarà in grado di seguire i trend moderni nell’ambito della progettazione di sistemi operativi; sarà in grado di raccogliere i dati necessari alla valutazione delle prestazioni di un particolare sistema operativo, e di interpretare i risultati della valutazione; infine, sarà in grado di elaborare i requisiti necessari alla progettazione di un nuovo sistema operativo, e di valutare l’efficacia di diverse soluzioni alternative. 
  • Abilità comunicative (communication skills): lo studente acquisirà la capacità di comunicare ed esprimere problematiche inerenti l’oggetto del corso; sarà in grado di sostenere conversazioni su tematiche relative ai moderni sistemi operativi, di confrontare diversi sistemi operativi, e di offrire possibili soluzioni.
  • Capacità  di apprendimento (learning skills): lo studente avrà appreso le interazioni tra le tematiche dei sistemi operativi, della progettazione software, e dell’importanza di adeguati supporti hardware e questo gli consentirà di proseguire gli studi universitari con un elevato grado di autonomia.

Programma



    • Introduzione al concetto di sistema operativo
    • Richiami sull'architettura degli elaboratori
    • Struttura di un sistema operativo
    • I processi: definizione, multiprogrammazione, stati e transizioni
    • I thread: definizione, modelli utilizzabili; programmazione multicore
    • Sezioni critiche e mutua esclusione: variabili di lock, alternanza stretta, soluzione di Peterson, istruzioni TSL/XCHG, semafori, mutex lock in spazio utente, futex, monitor, messaggi tra processi
    • Problema dei 5 filosofi e dei lettori-scrittori (soluzioni basate su semafori e monitor)
    • Scheduling: scheduler e dispatcher
    • Algoritmi di scheduling: progettazione, FCFS, SJF, SRTN, RR, a priorità, con code multiple, SPN, garantito, a lotteria, fair-share
    • Scheduling dei thread e su sistemi multi-processore
    • Scheduling su Windows 8 e Linux (task, O(1) e CFS)
    • Gestione della memoria per la multi-programmazione: swapping, rilocazione, gestione dello spazio libero
    • Memoria virtuale: paginazione, tabella delle pagine, uso di memoria associativa, varianti multi-livello, tabella delle pagine invertita, conseguenze sulla cache
    • Algoritmi di sostituzione delle pagine: progettazione, ottimale, NRU, FIFO, seconda chance, clock, LRU, NFU, aging; anomalia di Belady
    • Altri aspetti legati alla gestione della memoria: allocazione dei frame, working set, controllo del carico, dimensione delle pagine, condivisione delle pagine, copy-on-write, zero-fill-on-demand, librerie condivise, mappatura di file, allocazione della memoria del kernel
    • Segmentazione
    • Gestione della memoria su Linux
    • File-system: astrazione, file, directory
    • Progettazione di un file-system: allocazione dei file (contigua, concatenata, tabellare e indicizzata), directory, hard/soft-link, gestione blocchi liberi (con bitmap e con lista concatenata)
    • Altri aspetti tecnici sui file-system: controlli di consistenza,  journaling;cache del disco, deframmentazione
    • Accenni sui file-system storici e contemporanei: FAT-[12,16,32,64], NTFS, ext-[2,3,4], BTRFS
    • Scheduling del disco e relativi algoritmi: FCFS, SSTF, SCAN, C-SCAN, LOOK, C-LOOK
    • Sistemi RAID: principi di base, RAID-[0,1,2,3,4,5]
    • Memorie flash, dischi a stato solido (SSD) e implicazioni sui file system


  • Programmazione in ambienti UNIX:
    • L'uso delle chiamate di sistema
    • Gestione dell'I/O su file e chiamate di servizio relative al file-system e alla mappatura dei file in memoria
    • Gestione dei processi: creazione, coordinamento, esecuzione di comandi esterni
    • Chiamate per la comunicazione tra processi tramite pipe e FIFO
    • Chiamate per la comunicazione tra processi tramite messaggi
    • Chiamate per la gestione della memoria condivisa tra i processi
    • Chiamate per la gestione dei semafori
    • Segnali sui sistemi UNIX



Il programma delinea in modo generico i contenuti trattati durante il corso: per ulteriori dettagli è possibile consultare le diapositive usate durante le lezioni. Tutto ciò che è stato esposto a lezione, ad eccezione dei contenuti del tutorial sulla shell UNIX, sarà oggetto di valutazione durante l'esame.

Tutti i contenuti NON sottolineati sono da intendersi come facenti parte delle conoscenze minime richieste per il superamento dell'esame.

Risorse

Il materiale didattico utilizzato nell'a.a. passato è riconoscibile dal link barrato: durante l'anno questo potrebbe subire modifiche e aggiornamenti. Il materiale aggiornato che verrà man mano pubblicato sarà riconoscibile dal link non barrato.



Esame

L'esame finale prevede:

  • una prova scritta di teoria: si tratta di un questionario, con risposte a scelta multipla e/o aperte, su argomenti relativi alla teoria;
  • una prova pratica di laboratorio: si tratta di una sessione di laboratorio in cui lo studente dovrà scrivere un programma in linguaggio C che risolva un problema proposto facendo uso dei costrutti e delle chiamate di sistema UNIX viste a lezione; si lavorerà in un ambiente ad-hoc in cui sarà possibile consultare solo la documentazione di sistema e le proiezioni viste a lezione;
  • un colloquio orale obbligatorio su tutto il programma (teoria e laboratorio).

Le prove devono essere superate secondo la sequenza indicata: è necessario ottenere una sufficienza sulla prova scritta di teoria per poter accedere alla prova pratica di laboratorio; per poter sostenere l'orale è necessario aver collezionato una sufficienza in entrambe le prove precedenti. Il voto finale sarà dato dalla media pesata delle prime due prove (65% teoria, 35% laboratorio) e da un aggiustamento relativo alla prova orale (indicativamente di +/- 4 punti a completa discrezione del docente). La valutazione delle prime due prove è espressa in trentesimi e si intende generalmente superata se si ottengono almeno 18/30.

Il superamento di una specifica prova non ha una scadenza e pertanto l'esame si può sviluppare su vari appelli. Fa eccezione la prova scritta di teoria che in casi limite, su giudizio insindacabile del docente, può essere considerata scaduta/non-valida in seguito ad un colloquio orale "particolarmente scarso" e non allineato alla valutazione dello scritto. Lo studente, non soddisfatto del voto di una prova, può decidere di ripeterla negli appelli successivi rinunciando contestualmente e a priori alla vecchia valutazione.

Per poter sostenere una qualunque prova in un dato appello è necessario prenotarsi sul portale CEA indicando tra le note le prove a cui si vuole partecipare ed eventuali prove già superate e non scadute (esempi: "da sostenere: scritto teoria, prova di laboratorio e orale"). Il portale CEA accetta prenotazioni anche in mancanza dei requisiti necessari (leggi propedeuticità): se in fase di verbalizzazione dovessero emergere dei requisiti non soddisfatti si procederà all'annullamento dell'esame e di tutte le prove già sostenute. Non è assolutamente possibile "conservare" il voto finale di un esame per future registrazioni (per quanto detto prima, ciò non è vero per le prove intermedie). Gli studenti sono pertanto invitati a presentarsi agli appelli solo dopo aver verificato il proprio status presso il portale CEA.

Nella data dell'appello riportata sul calendario esami si terrà la prova di teoria; la prova di laboratorio si terrà qualche giorno dopo (da 1 a 5 giorni, in base al numero di elaborati da correggere) e la data esatta, unitamente a quella dei colloqui orali, sarà comunicata successivamente con apposito avviso.

Domande frequenti (FAQ – Frequently Asked Questions)

  • Sono previste delle prove in itinere?
    Dall'anno accademico 2014-2015 non sono più previste prove in itinere.
  • Devo acquistare entrambi i libri di testo? Ho una vecchia edizione del testo: va bene?
    Il libro principale di riferimento del corso è il testo di Tanenbaum-Bos: se ne consiglia l'uso della quarta edizione ma, se lo studente ne è già in possesso, la terza edizione è da considearsi comunque idenea. Il secondo testo di Silberschatz et al. è utilizzato per approfondimenti e per alcuni argomenti del programma (comunque richiesti in sede d'esame). Tutti i libri di testo citati sono disponibili in biblioteca per eventuali consultazioni. Gli argomenti trattati a lezione fanno esplicito riferimento alle edizioni indicate dei testi: l'eventuale uso di edizioni ancora più vecchie deve tenere conto di possibili discrepanze o mancanze nei contenuti.
  • Che materiale posso usare durante le varie prove d'esame e cosa devo portare con me?
    Durante la prova scritta di teoria non è assolutamente possibile utilizzare alcuna documentazione (appunti, dispense, libri, ...). E' consigliabile portare con se una calcolatrice, ma non è assolutamente possibile utilizzare telefonini, smartwatch o smartphone di alcun genere (anche se solo per impiegarne l'applicazione calcolatrice). E' indispensabile portare con se un documento di riconoscimento. Per la prova di laboratorio si utilizzerà un sistema GNU/Linux con un account ad-hoc per l'esame: si potrà accedere unicamente alla documentazione di sistema (man page) e ad una copia digitale delle proiezioni di laboratorio che si troverà già sull'account. Non sarà possibile accedere alla rete esterna o a supporti rimovibili esterni in alcun modo. Prima dell'orale potrebbe essere richiesta l'esibizione di una idonea certificazione (stampata o digitale) relativa al proprio status e al superamento delle propedeuticità.
  • Come faccio a sapere qual'è la valutazione delle mie singole prove?
    Per quanto riguarda lo scritto di teoria, prima di consegnare il vostro compito dovete prendere nota con cura del codice che si trova in basso a sinistra sul foglio prestampato. Dovrebbe avere un aspetto simile a '20100520-05-1415-2'. Una volta pubblicato l'avviso che notifica la pubblicazione dei risultati, usando tale codice ed il vostro numero di matricola potrete utilizzare un apposito modulo web per verificare l'esito del vostro compito in modo del tutto privato. Per quanto riguarda invece la prova di laboratorio, allo studente saranno consegnate delle apposite credenziali (username/password) che, tra l'altro, permetterà allo stesso di ottenere una copia del proprio elaborato e di accedere alla propria valutazione, una volta disponibile, attraverso lo stesso modulo web. In caso di problemi sarà comunque possibile chiedere direttamente al docente.
  • Sono previsti appelli straordinari? Posso accedervi?
    In genere sono previsti due appelli straordinari durante l'anno accademico. Le date esatte sono riportate sul calendario del corso (indicativamente a Dicembre e ad Aprile). L'accesso a tali appelli presenta però delle limitazioni così come previsto dal Manifesto degli Studi: «Possono accedere ad almeno un appello straordinario per ciascuna delle discipline già frequentate, nei termini definiti dal regolamento del corso di laurea, gli iscritti in qualità di “fuori corso”. Tale possibilità è estesa anche agli iscritti in qualità di “ripetenti”, solo nel caso essi non abbiano obblighi di frequenza. L’accesso agli appelli straordinari è previsto anche agli studenti lavoratori, il cui “status” deve essere preliminarmente riconosciuto da apposita delibera del Consiglio del Corso di Laurea, dietro istanza degli interessati da presentare al Presidente.» Gli studenti che rientrano in tali condizioni sono pertanto invitati a presentarsi agli esami muniti di apposita documentazione che attesti il proprio status. Non è possibile "conservare il voto" per verbalizzazioni future. Importante:una recente circolare ha specificato chiaramente che "per accedere all'appello straordinario dell'anno accademico X, bisogna essere fuori-corso o ripetente per l'a.a. X e non basta esserlo per l'a.a. X+1". All'esame è necessario portare la copia completa del verbalone in cui risulta lo storico dei propri status per tutti gli a.a. passati (e non solo per quello corrente). Il portale CEA potrebbe attualmente non prevede tali controlli in fase di prenotazione. Per eventuali dubbi è possibile chiedere chiarimenti alla segreteria o al docente stesso.
    Visti alcuni problemi creatosi con i passaggi automatici agli anni successivi ho deciso che, in via del tutto eccezionale, l'accesso ai prossimi appelli straordinari sarà aperto a tutti gli studenti e non solo agli studenti fuori-corso e lavoratori. Tale deroga è da intendersi transitoria.
  • E' possibile avere una copia delle prove?
    Per quanto riguarda lo scritto di teoria, non è possibile avere copie di tali compiti: gli studenti devono riconsegnare i testi con le domanda alla fine dello scritto. Durante gli orari di ricevimento è sempre possibile visionare eventuali compiti passati per meglio comprendere i propri errori. E' possibile farsi un'idea del tipo di domande guardando il seguente stralcio di compito (si tratta di una versione vecchia che comprende anche domande di laboratorio: ignorare la domanda n.2). Sono previste domande a scelta multipla e domande a risposta aperta (comunque sintetica), mirate a valutare il grado di comprensione degli argomenti di teoria trattati a lezione. Le prove passate di laboratorio sono invece tutte presenti nella sezione Risorse della pagina del corso.
  • Posso ancora sostenere l'esame con il vecchio programma ed il vecchio sistema (senza prova pratica in laboratorio)?
    A partire da Giugno 2016 tutti gli studenti di tutte le coorti si dovranno adeguare al nuovo programma e al nuovo sistema di esami (scritto + laboratorio + orale).
  • Che programmi potrò utilizzare durante la prova in laboratorio?
    Si lavorerà dentro una distribuzione live GNU/Linux, appositamente creata per questo tipo di esami, denominata Exam-Box: si tratta di un ambiente ad-hoc in cui sarà possibile consultare solo la documentazione di sistema (man page) e le proiezioni viste a lezione (già disponibili sull'account). Non sarà possibile accedere ad Internet o utilizzare supporti esterni removibili. Oltre agli strumenti necessari a compilare (gcc e g++) e per il debugging (gdb, nemiver), saranno anche disponibili alcuni semplici editor/IDE (gedit/pluma, anjuta, code::blocks, geany, scite, sublime text 2).