Principi di Sistemi Operativi - LM
Fino all'appello di Settembre 2017, si garantisce agli studenti che l'esame sia svolto nella modalità sotto indicata. Poichè nell'A.A. 2017-18 l'insegnamento di Principi di Sistemi Operativi non sarà più attivo e al suo posto ci sarà l'insegnamento di Progettazione dei Sistemi Operativi, la modalità di esame sarà quella del nuovo insegnamento.
Questa pagina fornisce il materiale didattico e le informazioni relative all'insegnamento di Principi di Sistemi Operativi (9 CFU) per il Corso di Laurea Magistrale in Ingegneria Informatica, secondo il D.M. 270/04, attivo dall'A.A. 2009-10.
Questo materiale didattico per la maggior parte deriva da quello dell'omonimo insegnamento (però di 6 CFU) che fino all'A.A. 2008-09 era attivo al I anno della Laurea Specialistica, secondo il D.M. 509/99. In particolare, l'aumento di CFU da 6 a 9 deriva da aver voluto dare piena dignità alle esercitazioni di laboratorio che in passato erano facoltative, che ora diventano obbligatorie e parte integrante dell'insegnamento, e in particolare sono necessarie per la preparazione alla prova scritta, che sarà appunto svolta in laboratorio. Si può consultare anche la pagina dell'omonimo insegnamento non più attivo della LS, in particolare per i testi degli esami passati e per alcune loro soluzioni.
Informazioni sul docente
Dipartimento di Ingegneria "Enzo Ferrari" (Università di Modena e Reggio Emilia)
Via P. Vivarelli 10, 41125 MODENA
Telefono 0592056135 - Fax 0592056129
Orario di ricevimento: Lunedì dalle 15 alle 17 (di norma, per eventuali modifiche consultare la pagina)
Orario delle Lezioni
Le lezioni di questo insegnamento sono collocate nel I semestre e per l'A.A. 2016-17 avranno inizio Lunedì 19 Settembre 2016.
L'orario delle lezioni è disponibile sul sito di Ingegneria e in particolare quelle di Principi di Sistemi Operativi si trovano qui. Qui di seguito si riporta per comodità l'orario:
Lunedì |
ore 11-13 (lezione) |
aula P2.7 (ex FA-2-G) (Ingegneria) |
Mercoledì |
ore 11-13 (lezione) |
aula P2.7 (ex FA-2-G) (Ingegneria) |
Venerdì |
ore 10-13 (esercitazione) |
Lab. P2.6-LINFA (ex FA-2-F) (Ingegneria) |
Obiettivi dell'Insegnamento
L'obiettivo del corso è di raggiungere una buona conoscenza e capacità di comprensione di ogni livello/gestore di cui si compone un Sistema Operativo, analizzandone sia i meccanismi di funzionamento che le relative politiche. L’applicazione di queste conoscenze riguarda gli aspetti di programmazione di sistema per svolgere progetti concorrenti in ambiente globale di complessità crescente, utilizzando il linguaggio di programmazione Java. Questo corso quindi rappresenta il completamento rispetto al corso di Sistemi Operativi della Laurea triennale. Per tale ragione agli studenti non laureati in Ingegneria Informatica presso la nostra sede, si consiglia di accertarsi di avere come conoscenze pregresse quella derivanti dagli esami di Sistemi Operativi e Laboratorio di Sistemi Operativi (della Laurea D.M. 509) o di Sistemi Operativi e Lab. (della Laurea D.M. 270).
Programma dell'Insegnamento
Gli argomenti teorici che verranno affrontati saranno:
1) Generalità sui Sistemi Operativi
Evoluzione storica: dai primi sistemi ai moderni sistemi operativi.
Classificazione dei Sistemi Operativi: sistemi mono- e multi-utente, sistemi batch e interattivi, sistemi in time-sharing e real-time.
Elementi di base di un Sistema Operativo: punto di vista esterno (utente o programmatore di sistema) e punto di vista interno.
2) Sistema Operativo come insieme di gestori delle risorse. In particolare:
a) Gestione della CPU
Punto di vista esterno - tecniche di programmazione concorrente: modelli dei processi ad ambiente globale e ad ambiente locale; strumenti per la sincronizzazione di processi in ambiente globale (semafori, monitor, etc.) e locale (scambio di messaggi, RPC, etc.).
Punto di vista interno - implementazione del nucleo: strutture dati e primitive; algoritmi di scheduling; il problema del blocco dei processi (deadlock).
b) Gestione della memoria
Punto di vista esterno - programmi: assoluti, rilocabili staticamente, rilocabili dinamicamente.
Punto di vista interno - metodi di allocazione: contigua (partizionamento statico e dinamico); swapping; segmentazione; non contigua (paginazione); gestione della memoria virtuale.
c) Gestione del File System
Punto di vista esterno - organizzazione logica dei direttori e proprietà dei file; livello di programmazione.
Punto di vista interno - allocazione fisica in memoria secondaria: metodo contiguo; metodi non contigui (concatenamento e indicizzazione).
Quando necessario, questi argomenti saranno esemplificati rivedendone l’implementazione in UNIX/Linux.
Gli argomenti pratici che verranno affrontati relativamente a progetti concorrenti in ambiente globale faranno riferimento al linguaggio di programmazione Java e saranno in particolare:
- programmazione concorrente tramite thread;
- sincronizzazione mediante l'uso di monitor.
L’applicazione di queste conoscenze riguarda lo svolgimento di progetti concorrenti in ambiente globale di complessità crescente: quindi, parte integrante saranno le attività di laboratorio svolte in modo guidato.
Registro
Dopo ogni lezione/esercitazione verrà compilato il registro con l'indicazione degli argomenti trattati.
I registri dei cinque A.A. precedenti si trovano:
- Registro A.A. 2016-17
- Registro A.A. 2015-16
- Registro A.A. 2014-15
- Registro A.A. 2013-14
- Registro A.A. 2012-13
I registri ai precedenti anni accademici sono accessibili sul vecchio sito della Facoltà e in particolare:
Modalità d'esame
L'esame si compone di una prova scritta, che viene svolta in laboratorio, e di una seguente prova orale. Per maggiori dettagli, vedere il seguito di questa pagina.
Fino all'appello di Settembre 2017, si garantisce agli studenti che l'esame sia svolto nella modalità sotto indicata. Poichè nell'A.A. 2017-18 l'insegnamento di Principi di Sistemi Operativi non sarà più attivo e al suo posto ci sarà l'insegnamento di Progettazione dei Sistemi Operativi, la modalità di esame sarà quella del nuovo insegnamento.
Prova scritta
Per l'iscrizione ad una prova scritta si deve usare l'applicazione specifica il cui link è presente in questa pagina nella sezione Appelli: si ricorda che in caso di valutazione insufficiente lo studente che non avrà preso visione dei suoi errori fissando uno specifico appuntamento con l'Ing. Galassi NON potrà iscriversi ad una prova successiva! Di norma le iscrizioni/cancellazioni ad un appello si chiudono due giorni prima: ad esempio se l'appello è pianificato di venerdì, le iscrizioni/cancellazioni sono possibili fino alla mezzanotte del martedì precedente! Le indicazioni comunque della data di chiusura dell'appello sono riportate per ogni appello.
La prova scritta (in laboratorio) serve a verificare che lo studente abbia acquisito le seguenti capacità:
- Capacità di scrivere soluzioni per la sincronizzazione di processi in ambiente globale.
- Capacità di scrivere e verificare software in linguaggio di programmazione Java per la sincronizzazione di processi.
Nell'A.A. 2016-17, la prova di laboratorio prevede un test scritto e una serie di esercizi che dovranno essere svolti usando il linguaggio di programmazione Java sui temi trattati nelle esercitazioni di laboratorio. La nuova prova di laboratorio è divisa in 2 parti: una parte di quiz su carta, a risposta multipla (con solo una risposta esatta), ed una parte di programmazione. Risolvere correttamente la parte di programmazione è necessario per poter passare l'esame. Il tempo totale della prova è di 2 ore. Il tempo massimo per lo svolgimento dei quiz a risposta multipla è di 40 minuti: durante lo svolgimento del quiz non sarà possibile consultare alcun tipo di materiale. Allo scadere dei 40 minuti tutti gli studenti devono consegnare la parte a quiz. Se si termina il quiz prima dello scadere dei 40 minuti, si può procedere con la parte di programmazione, ma solo dopo aver consegnato il quiz. Durante lo svolgimento della parte di programmazione sarà possibile consultare materiale portato da casa, ma non sarà disponibile un collegamento internet. Il risultato della prova sarà calcolato a partire dai quiz.
Se ci sono 10 domande: +3 per le risposte corrette, 0 per quelle sbagliate e per quelle non risposte. Se ci sono 15 domande: +2 per le risposte corrette, 0 per quelle sbagliate e per quelle non risposte.
Per le prove di laboratorio viene usato di norma il Laboratorio LINFA nel campus di Ingegneria.
Fino all'appello di Settembre 2017, si garantisce agli studenti che l'esame sia svolto nella modalità sopra indicata. Poichè nell'A.A. 2017-18 l'insegnamento di Principi di Sistemi Operativi non sarà pià attivo e al suo posto ci sarà l'insegnamento di Progettazione dei Sistemi Operativi non si garantisce che l'esame venga mantenuto uguale.
È possibile consultare i testi di tutti gli esami svolti fino all'A.A. 2015-16: per gli esami di questo insegnamento questi si trovano nella sezione Testi Prove Scritte, mentre per quelli dell'omonimo insegnamento non più attivo, si può consultare la pagina relativa.
Si riportano, in particolare, le note che sono normalmente riportate in tutti i testi di esame relativamente alla procedura di salvataggio della parte di programmazione:
- Fare il login in Linux con il proprio account.
- Aprire una pagina del browser e digitare ftp://lica02.lab.unimo.it/README e copiare il comando presente in un terminale ed eseguirlo rispondendo alle domande proposte (viene creata sul Desktop una cartella avente nome studente_<account-posta-elettronica> al cui interno viene creato un file denominato student_data.csv che non va eliminato)
- Aprire Eclipse (comando “eclipse” da shell) e scegliere come workspace la cartella avente nome studente_<numero Turno>_<Numero compito>_<account-posta-elettronica> creata sul Desktop.
Il voto della prova scritta è espresso in trentesimi e può partire da un massimo di 32/30 (a seconda della difficoltà del testo della prova): tale voto ha, di norma, una validità di sei mesi.
Prova orale
Gli studenti possono accedere alla prova orale solo dopo aver acquisito un voto maggiore o uguale a 18/32 nella prova scritta.
Per l'iscrizione alla prova orale di norma viene inserito un appello su ESSE3, altrimenti inviare una email al docente per avere informazioni.
La prova orale serve a verificare che lo studente abbia acquisito le seguenti conoscenze e capacità di comprensione:
- Conoscenza e capacità di comprensione della classificazione dei Sistemi Operativi.
- Conoscenza e capacità di comprensione dell'organizzazione interna di un Sistema Operativo come insieme di livelli o gestori delle risorse.
- Conoscenza e capacità di comprensione del concetto di processo, degli algoritmi di scheduling e del problema del deadlock.
- Conoscenza e capacità di comprensione degli strumenti di sincronizzazione nel caso di modello di processi ad ambiente globale, come semafori e monitor.
- Conoscenza e capacità di comprensione degli strumenti di sincronizzazione nel caso di modello di processi ad ambiente locale.
- Conoscenza e capacità di comprensione della gestione della memoria sia con politiche contigue e non contigue e sia con memoria virtuale.
- Conoscenza e capacità di comprensione dell'organizzazione logica dei File System e delle politiche di allocazione fisica.
Quindi, la prova orale spazia su tutto il programma che verrà svolto: si consideri, in particolare, che come case-study verrà normalmente fatto riferimento al Sistema Operativo UNIX/Linux.
In particolare, l'orale prevede -in una prima fase- la somministrazione di un test a domande chiuse e aperte preparato per ogni studente, che tende a coprire tutti gli argomenti del programma; quindi -nella seconda fase- di solito prendendo spunto dalle risposte del test, si passa ad approfondire alcuni argomenti per arrivare al voto dell'orale. Il voto della prova orale è espresso in trentesimi e può partire da un massimo di 33/30 (a seconda della difficoltà delle domande proposte).
Note sugli esami
- Si ricorda che in caso di valutazione insufficiente lo studente dovrà prendere visione dei suoi errori PRIMA di poter partecipare ad una nuova prova.
- La consegna di una prova scritta cancella il voto precedente; la partecipazione ad uno scritto senza consegnare non cancella il voto precedente.
- Dall'A.A. 2013-14, il voto finale dell'esame deriverà per il 30% dal voto della prova scritta e per il 70% dal voto della prova orale (eventuali arrotondamenti saranno effettuati per difetto). Per gli studenti degli anni accademici precedenti invece il voto finale dell'esame deriverà dalla media aritmetica (arrotondata per difetto) dei voti della prova scritta e della prova orale.
- Le prove scritte e le prove orali (a meno di richieste da parte di studenti Fuori Corso) si svolgono solo durante i periodi di esami.
- Il voto della prova scritta ha, di norma, una validità di sei mesi.
Appelli
Fino all'appello di Settembre 2017, si garantisce agli studenti che l'esame sia svolto nella modalità sotto indicata. Poichè nell'A.A. 2017-18 l'insegnamento di Principi di Sistemi Operativi non sarà più attivo e al suo posto ci sarà l'insegnamento di Progettazione dei Sistemi Operativi, non si garantisce che l'esame venga mantenuto uguale.
NOTA DEL 24/09/2016 (aggiornata il 26/09/2016) Per la sessione di esami di Gennaio-Febbraio 2017, si comunica che le date della prova in laboratorio (per le prove tutte al Laboratorio LINFA e se necessario anche ad InfoMec) sono:
1) Mer. 18/01/2017 (ore 09:00), con iscrizioni fino a Dom. 15/01/2017;
2) Mer. 15/02/2017 (ore 09:00), con iscrizioni fino a Dom. 12/02/2017.
Gli appelli sono stati inseriti nell'applicazione in data 5 Dicembre 2016. Per le date degli orali, si concorderanno con gli studenti in modo flessibile.
Per la sessione di esami di Giugno-Settembre 2016, si comunica che le date della prova in laboratorio (per le prove tutte al Laboratorio LINFA e se necessario anche ad InfoMec) sono:
3) Mer. 14/06/2017 (ore 9:00), con iscrizioni fino a Dom. 11/06/2017;
4) Mer. 12/07/2017 (ore 9:00), con iscrizioni fino a Dom. 9/07/2017;
5) Mer. 13/09/2017 (ore 9:00), con iscrizioni fino a Dom. 10/09/2017.
Gli appelli sono stati inseriti nell'applicazione il 28 Febbraio 2017. Per le date degli orali, si concorderanno con gli studenti in modo flessibile.
Si ricorda che il sesto appello corrisponde alla prova "in itinere" che verrà svolta il penultimo venerdì di esercitazione (riservato ai soli studenti che si sono iscritti o hanno modificato quest'anno la loro iscrizione all'applicazione.
NOTA DEL 20/10/2016 Si comunica che tutte le date sopra indicate sono state inserite anche in ESSE3 per rendere visibile a chi deve fare il controllo sull'inserimento degli appelli che questi sono stati pianificati: il periodo di iscrizione però a queste prove è volutamente chiuso dato lo studente deve usare l'applicazione specifica per iscriversi agli appelli in laboratorio.
ATTENZIONE: Dalla sessione estiva dell'A.A. 2010/11, le prove di Principi Sistemi Operativi si svolgono presso il Laboratorio LINFA (II piano Facoltà di Ingegneria) e NON al laboratorio BASE.
Per l'iscrizione alle prove scritte si deve usare l'applicazione inserendo come Username nome.cognome e come Password quella inserita all'atto della registrazione all'insegnamento (che normalmente avviene durante la prima esercitazione in laboratorio. NOTA BENE: la convalida della registrazione avviene solo alla consegna del foglio di riepilogo firmato).
Di norma le iscrizioni/cancellazioni ad un appello si chiudono due giorni prima (ad esempio se l'appello è pianificato di venerdì, le iscrizioni/cancellazioni sono possibili fino alla mezzanotte del martedì precedente!) e comunque le indicazioni della data di chiusura dell'appello sono riportate per ogni appello. Si rende noto che l'applicazione in uso dall'A.A. 2010-11 impedisce ad uno studente in caso di valutazione insufficiente di iscriversi ad una prova successiva fino a che non avrà preso visione dei suoi errori fissando uno specifico appuntamento con l'Ing. Galassi!
Per l'iscrizione alla prova orale se non è presente uno specifico appello su ESSE3, è necessario invece inviare una email al docente per fissare un appuntamento. In questo caso, ESSE3 verrà usato per la sola verbalizzazione del voto finale senza bisogno che lo studente si iscriva ad un appello, dato che tale inserimento verrà effettuato dal docente.
Dall'A.A. 2013-14, il voto finale dell'esame di Principi di Sistemi Operativi non deriva più dalla media aritmetica, arrotondata per difetto, dei voti della prova scritta svolta in laboratorio e della prova orale, ma viene calcolato (sempre con arrotondamento per difetto) come il 30% del voto della prova prova scritta svolta in laboratorio e il 70% del voto della prova orale.
Si ricorda che la verbalizzazione relativa al primo appello dopo la conclusione delle lezioni sarà possibile solo per gli studenti in corso che hanno compilato il questionario di valutazione (come specificato nella sezione Valutazione della Didattica della pagina del Corso di Laurea Magistrale).
Testi Prove Scritte
I testi delle prove scritte si trovano nella pagina Esami di Principi di Sistemi Operativi: di alcuni di essi viene fornita anche una possibile soluzione.
Risultati Prove Scritte
Dall'A.A. 2010-11, gli studenti che hanno partecipato ad una prova scritta di Principi di Sistemi Operativi possono prendere visione del voto della prova scritta svolta in laboratorio collegandosi all'applicazione utilizzata per l'iscrizione alla prova e selezionando la voce Dati iscrizione corso (in lato a sinistra).
Consigli Utili
Per superare agevolmente la prova scritta, che si svolgerà in laboratorio, si consiglia agli studenti di seguire con continuità le lezioni ed, in particolare, le esercitazioni in laboratorio. Inoltre, si consiglia di preparare la prova scritta sperimentando direttamente i concetti presentati a lezione sul calcolatore. Può risultare estremamente difficile superare con successo l'esame senza una conoscenza di tipo sperimentale, ottenuta con esercitazioni in laboratorio.
Ambienti di Programmazione Utilizzati: Java 1.5 di pubblico dominio, disponibile comunque in laboratorio (per scaricarlo si veda sezione Strumenti Software).
Testi Consigliati
Materiale come lucidi, esercizi e testi di esame (e alcune soluzioni) sono disponibili in questa pagina e nella pagina del vecchio insegnamento.
Comunque, testi di riferimento possono essere:
J. Peterson, A. Silberschatz: "Operating System Concepts", Addison Wesley, 1990 (anche versione italiana: SILBERSCHATZ A., GALVIN P., G. GAGNE: "Sistemi Operativi: concetti ed esempi - sesta edizione", Casa Editrice Addison-Wesley, 2002).
M. Milenkovic: "Sistemi Operativi", McGraw-Hill, 1990.
P. Ancilotti, M. Boari: "Principi e Tecniche di Programmazione Concorrente", UTET, 1988.
Inoltre, per la parte relativa a Java (ripasso e approfondimento) si segnala:
G. Cabri, F. Zambonelli, "Programmazione a oggetti in Java: dai fondamenti a Internet", Pitagora editrice, 2003.
Lucidi dell'Insegnamento
Sono disponibili i lucidi in formato PDF usati durante le lezioni di teoria sui seguenti argomenti che necessitano tutti, a parte il primo file, di password di lettura (tale password sarà comunicata durante la prima lezione):
- Programma del corso e modalità di esame
- Lucidi introduttivi sui Sistemi Operativi: evoluzione e categorizzazione dei Sistemi Operativi
- Lucidi sui processi: generalità
- Lucidi sui processi: interazione fra processi
- Lucidi sui processi: esempi di uso dei semafori
- Lucidi sui processi: processi comunicanti in ambiente globale
- Lucidi sui processi: costrutti di sincronizzazione in ambiente globale
- Lucidi su processi in ambiente Locale: processi comunicanti in ambiente locale (aggiornamento del 14/05/2012)
- Lucidi sul Nucleo
- Lucidi di SO su fork ed exec di Unix
- Lucidi sul deadlock
- Lucidi sulla Gestione della Memoria: metodi di allocazione contigua
- Lucidi sulla Gestione della Memoria: metodi di allocazione non contigua
- Lucidi sulla Gestione della Memoria Virtuale
- Lucidi sulla Gestione della Memoria in Unix
- Lucidi sulla Gestione dei file: livello logico
- Lucidi sulla Gestione dei file: livello fisico
Sono disponibili i lucidi usati durante i seminari sui seguenti argomenti:
Seminario sulla concorrenza nel linguaggio Java
( Ing. Mariachiara Puviani, versione A.A. 2014/15)
Si avvisano inoltre gli studenti che per ripassare le primitive di Unix è disponibile un'applicazione (scaricabile qui (file JAR)) sviluppata nel suo elaborato da Sentimenti Marco (prova finale del 29/10/2012). Tale applicazione è descritta nell'elaborato dal titolo UNIX FUNCTION HELPER: SUPPORTO ALL'APPRENDIMENTO DELLE PRIMITIVE UNIX (scaricabile qui (PDF).
Esercizi presentati in laboratorio
Gli esercizi sono forniti alcuni in formato pdf, visualizzabili e stampabili con il programma Adobe Acrobat, altri (.java) in semplice formato testo.
Potete trovarli a questa pagina: Esercizi di Principi di Sistemi Operativi.
Esercizi vari
Gli esercizi sono forniti alcuni in formato pdf, visualizzabili e stampabili con il programma Adobe Acrobat, altri (.java) in semplice formato testo.
Potete trovarli alla pagina del vecchio insegnamento.
Strumenti Software
Si indicano di seguito gli strumenti software che si utilizzano durante il corso e si indica dove è possibile reperirli.
- Per sviluppare programmi in Java si utilizza il JDK (Java Development Kit). È di pubblico domino e si puo' scaricare dal sito The Java Sun Site.
- NOTA: Si consiglia di usare la versione 1.5 o la 1.6. È comunque necessario utilizzare Java2, che corrisponde alle versioni del jdk dalla 1.2 alla 1.6.
- Molte riviste di informatica e libri su Java allegano il CD con Java in omaggio.
- Come ambiente integrato (IDE) è possibile utilizzare quello che si preferisce. Quello consigliato è Eclipse.
Tesi
Accedendo all'applicazione specifica si potranno trovare degli argomenti di tesi di Laurea Magistrale collegati a questo insegnamento.