Sistemi Operativi
(modulo di Informatica II)
Docente: Patrizia Scandurra - Università degli Studi di Bergamo
a.a. 2011-12
Programma del corso (in sintesi)
Obiettivi formativi : il corso analizza i principi, il funzionamento, la struttura, politiche di gestione alla base dei sistemi operativi orientati alle principali aree applicative (sistemi transazionali, interattivi, gestionali, multimediali, robotici, embedded, ecc..). Argomenti del corso : architettura, funzionalita , gestione dei processi, comunicazione tra processi, scheduling della CPU, deadlock, gestione della memoria, gestione dell'I/O, memorie di massa, file system, programmazione concorrente e distribuita in linguaggio Java, esempi di sistemi operativi.
Programma in dettaglio e materiale didattico:
Teoria
Introduzione
- Definizione di sistema operativo -- Cap. 1, Sez. 1.1 del libro adottato (di A. Silberschatz et al.)
- Evoluzione dei sistemi operativi con cenni storici -- Cap. 1, Sez. 1.2 del libro di A.S.Tanenbaum
- Tipi e esempi di sistemi operativi -- Cap 1 Sez. 1.3, 1.10, 1.11, 1.12 del libro adottato
- Concetti di base sui sistemi operativi: funzioni, implementazione e avvio, funzionamento event-driven e dual-mode, servizi e chiamate di sistema, programmi di sistema -- Cap. 1, Sez 1.2, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9 - Cap. 2 Sez. 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.10 e 2.11 del libro adottato
- Architettura di un sistema operativo -- Cap. 2, Sez 2.7 e 2.8 del libro adottato
Gestione dei processi
- I processi Vedi lucidi: processi
- Il concetto di processo -- Cap. 3, Sez 3.1 del libro adottato
- Schedulazione dei processi -- Cap. 3, Sez 3.2 del libro adottato
- Operazioni sui processi -- Cap. 3, Sez 3.3 del libro adottato
- Codice di esempio per la creazione di un processo figlio con la chiamata di sistema fork() dei sistemi Unix-like
- La comunicazione tra processi Vedi lucidi: IPC
- Processi cooperanti e modelli di comunicazione: comunicazione tramite memoria condivisa e comunicazione tramite scambio di messaggi -- Cap. 3, Sez . 3.4 del libro adottato
- Esempio: comunicazione LPC (Local Procedure Call) di Windows XP -- Cap.3. Sez. 3.5.3
- La comunicazione in sistemi client/server (socket, pipe, RPC, RMI) -- Cap. 3, Sez 3.6 del libro adottato -- Cap. 3. Sez. 3.6
- Codice di esempio per la creazione di una unnamed pipe in sistemi Unix-like
- I thread Vedi lucidi:thread
-- Cap. 4 del libro adottato
- Generalità e modelli Sez 4.1 e 4.2
- Pthread -- Sez 4.3.1
- Problematiche relative ai thread -- Sez 4.4
- Ithread di Windows XP e di Linux -- Sez 4.5
- Thread safeness e condizioni di Bernstein
- Sincronizzazionedei processi Vedi lucidi:sincronizzazione
-- Cap. 6 del libro adottato
- Il problema della sezione critica -- Sez 6.1 e 6.2
- Soluzioni per due processi (Peterson) -- Sez 6.3
- Hardware per la sincronizzazione -- Sez 6.4
- Semafori -- Sez 6.5
- Problemi classici di sincronizzazione (Produttore-consumatore, lettori-scrittori, cinque filosofi a cena) -- Sez 6.6
- Monitor -- Sez 6.7 (esclusi 6.7.3 e 6.7.4)
- Sincronizzazione in Solaris, Windows XP, Linux e Pthreads -- Sez 6.8 (solo cenni)
- Transazioni atomiche -- Sez 6.9 (esclusi 6.9.4.2 e 6.9.4.3)
- Schedulazione della CPU Vedi ucidi:schedulazione
-- Cap. 5 e 19 del libro adottato
- Concetti base e criteri -- Sez 5.1 e 5.2
- Algoritmi di schedulazione -- Sez 6.3
- Schedulazione dei thread -- Sez 5.4 (escluso 5.4.2)
- Schedulazione per sistemi multiprocessore -- Sez 5.5 (escluso 5.5.4 e 5.5.5)
- Schedulazione per sistemi in tempo reale -- Sez 19.5 (escluso 19.5.3 e 19.5.4)
- Schedulazione in WindowsXP e in Linux -- Sez 5.6.2 e 5.6.3
- Lo stallo (deadlock) Vedi lucidi:deadlock
-- Cap. 7 del libro adottato
- Risorse -- Sez 7.1
- Caratterizzazionedel deadlock -- Sez 7.2
- Metodi di gestione del deadlock -- Sez 7.3
- Prevenire il deadlock -- Sez 7.4
- Evitare il deadlock -- Sez 7.5
- La risoluzione del deadlock (rilevazione e ripristino) -- Sez 7.6 e 7.7
Gestione della memoria
- Gestione della memoria centrale Vedi lucidi:memoria centrale
-- Cap. 8 del libro adottato
- Concetti generali -- Sez 8.1
- Swapping -- Sez. 8.2
- Allocazione contigua della memoria: partizione singola, partizioni multiple fisse e dinamiche -- Sez. 8.3
- Paginazione -- Sez. 8.4
- metodo di base -- Sez. 8.4.1
- progettazione della tabella delle pagine (supporto HW, protezione, condivisione, struttura) -- Sez. 8.4.2, 8.4.3, 8.4.4 e 8.5 (escluso Sez. 8.5.2)
- Segmentazione
- Segmentazione pura -- Sez. 8.6
- Segmentazione con paginazione: famiglia Intel 80x86 -- Sez. 8.7
- Concetti: gerarchia di memoria, ambiente virtuale, richiesta di paginazione, copia durante la scrittura, file mappati in memoria, mappatura in memoria dell'I/O -- Sez. 9.1, 9.2, 9.3, 9.7.1 e 9.7.3
- Algoritmi di sostituzione della pagina -- Sez. 9.4
- Allocazione dei frame -- Sez. 9.5
- Il fenomeno del thrashing ed il modello del working set -- Sez. 9.6 (cenni)
- Altre considerazioni -- Sez. 9.9 (cenni)
File System
- Implementazione del file system Vedi lucidi:implementazione del file system
-- Cap. 11 del libro adottato (escluse Sez. 11.2.3; 11.8 e 11.9)
- Realizzazione del file system
- Realizzazione della directory
- Metodi di allocazione
- Gestione dello spazio libero
- Efficienza e prestazioni
- Recupero del file system
Sottosistema di I/O
Laboratorio (Programmazione concorrente in linguaggio Java)
Una panoramica su Linux
- Lezione 6: Seminario di Flavio Castelli: Una panoramica veloce su Gnu-Linux: un pò di storia, distribuzioni e configurazione, breve introduzione all'uso della console bash.
- introduzione a Linux Vedi lucidi:
- Archivio per la DEMO
- introduzione a Linux Vedi lucidi:
Multithreading e sincronizzazione
- Lezione 1: Creazione e avvio di thread, condivisione di dati tra thread, terminazione e join di thread, cancellazione (immediata, differita), esercizi
Vedi archivio
contenente anche due possibili soluzioni dell'esercizio "Somma" dove si affronta il problema della condivisione dei dati tra thread.
- Lezione 2: Fondamenti di reti, comunicazione tramite socket in Java, server multi-thread. Vedi archivio
- Lezione 3:
Cooperazione e sincronizzazione: sincronizzazione
indiretta (o di mutua esclusione) e diretta, il modificatore synchronized
e il lock di oggetti, la
gestione dei segnali: wait(), notify(), notifyAll(),
problemi classici di sincronizzazione (producer-consumer), esercizi. Vedi archivio
- Lezione 4:
I monitor in Java tramite il modificatore synchronized, il
problema classico di sincronizzazione lettori-scrittori, esercizi. Vedi archivio
- Lezione 5:
I monitor in Java e le variabili condizione con il package java.util.concurrent, il
problema classico di sincronizzazione producer-consumer, esercizi. Vedi archivio
(l'archivio contiene anche alcune soluzioni degli esercizi della lezione precedente!)
- Lezione 7:
Esercitazione su i monitor in Java e le variabili condizione con il package java.util.concurrent. Vedi file
Soluzioni alternative al problema del BAR (dato come esercizio alla lezione 5): Vedi archivio
- Lezione 8 : Vedi
archivio
- Cooperazione e sincronizzazione:
semafori e barriere del package java.util.concurrent di Java5,
problemi classici di sincronizzazione (producer-consumer,
il problema dei filosofi a cena), esercizi
- Cooperazione e sincronizzazione:
semafori e barriere del package java.util.concurrent di Java5,
problemi classici di sincronizzazione (producer-consumer,
il problema dei filosofi a cena), esercizi
- Lezione 9:
Esercitazione finale. Vedi file
Libri di testo
- A. Silberschatz, P. B. Galvin, G. Gagne: Sistemi operativi: concetti ed esempi. 8a edizione. Pearson Education Italia, 2009, ISBN13: 9788871925691, ISBN10: 8871925696 Per approfondimenti:
- A. Silberschatz, P. B. Galvin, G. Gagne: Sistemi operativi con esempi per l'uso in Java, Apogeo, 2005, ISBN: 8850321007
- A. S. Tanenbaum.I Moderni Sistemi Operativi , 3a Edizione. JACKSON LIBRI,2009
- Java Concurrency in Practice. Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, and Doug Lea. Addison-Wesley, 2006.
Esami
L'esame consta di una prova scritta, e verte sia sulla parte di teoria che sulla parte di laboratorio.
La prova scritta avrà luogo nella data fissata per l'appello. Alla prova scritta, seguirà (in data che verrà comunicata dal docente il giorno stesso della prova scritta) una prova orale che verte prevalentemente sulla discussione del compito; a discrezione del docente, è prevista una ulteriore domandina orale (valutata da -2 a + 2 punti). L'esame si conclude
con la verbalizzazione dell'avvenuto superamento o meno relativamente al modulo di "sistemi operativi".
Si ricorda che l'effettiva registrazione dell'intero corso di INFORMATICA II avverrà solo dopo aver superato entrambi i moduli (modulo di programmazione ad oggetti + sistemi operativi) nell'arco di un ANNO SOLARE.
- Per esempi di compiti passati, vedi pagina web dell'a.a. 2009/2010 .
- Esito e soluzione della prova scritta del 23 Giugno 2011
- Esito e soluzione della prova scritta del 4 Luglio 2011
- Esito e soluzione della prova scritta del 5 Settembre 2011
- Esito&soluzione della prova scritta del 24 Gennaio 2012
- Esito&soluzione della prova scritta del 8 Febbraio 2012
- Esito&soluzione della prova scritta del 25 Giugno 2012
- Esito&soluzione della prova scritta del 13 Luglio 2012
- Esito&soluzione della prova scritta del 5 Settembre 2012
- Esito&soluzione della prova scritta del 14 Gennaio 2013
- Esito&soluzione della prova scritta del 29 Gennaio 2013
- Esito&soluzione della prova scritta dell' 11 Settembre 2013
- Risultati della prova scritta del 16 Gennaio 2014
- Esito&soluzione della prova scritta del 4 Febbraio 2014
Ricevimento
Dopo la lezione o su appuntamento presso l'ufficio del docente (Ed. B, terzo piano, stanza 2)
Avvisi
Date/aule ultime lezioni del corso:
29/5 | Aula 9 14.00-17.00 |
31/5 | Aula 5 10.30-13.30 |
5/6 | Aula 25 14.00-16.00 |
7/6 | Aula 5 10.30-13.30 |
12/6 | Aula 25 14.00-16.00 |
14/6 | Aula 5 10.30-13.30 |
Avviso seminario:
Durante la lezione di laboratorio di giovedì 24 Maggio 2011 dalle 10.30 alle 13.30 in aula 5, l'Ingegnere Flavio Castelli (ex-studente del nostro corso di laurea) terrà un seminario sui sistemi operativi "Linux-like".
Résumé di Flavio Castelli: si è laureato in Ingegneria Informatica presso l'Università
degli studi di Bergamo. Attualmente lavora come software engineer in un gruppo di ricerca e sviluppo all'interno di SUSE Linux. Contribuisce attivamente allo sviluppo di alcuni progetti open-source tra i quali spicca KDE. Promotore del sofware libero, ha tenuto numerose conferenze anche in occasione di eventi internazionali. E' inoltre segretario del Linux group di Bergamo e membro del KDE e.V. Per curiosare un pò nella sua vita, consultate la pagina web: http://flavio.castelli.name/about
NOTA:
Per l'evento è importante presentarsi muniti di un CD di installazione "live" di Linux Fedora (KDE).
Per creare questo CD basta seguire le seguenti istruzioni:
- Scaricare dal sito http://fedoraproject.org/it/get-fedora il file F12-i686-Live-KDE.iso (formato immagine ISO per PC compatibili Intel, cioè un file che contiene l'intero contenuto di un disco ottico che può essere direttamente inciso su un supporto fisico tramite il processo di masterizzazione).
- Masterizzare un CD o DVD dal file ISO scaricato. Ad es. con il SW di masterizzazione Nero Burning, il comando è: rom--> Masterizzare --> Scrivi immagine.
SOSPENSIONI lezioni:
27/3 | Aula 9 14.00-16.00 | SOSPESA: MISSIONE DOCENTE |
29/3 | Aula 5 10.30-13.30 | SOSPESA: MISSIONE DOCENTE |
3/4 | Aula 9 14.00-16.00 | SOSPESA: prove in itinere di altri corsi |
5/4 | Aula 5 10.30-13.30 | SOSPESA: vacanze pasquali |
10/4 | Aula 9 14.00-16.00 | SOSPESA: vacanze pasquali |
12/4 | Aula 5 10.30-13.30 | SOSPESA: prove in itinere di altri corsi |