SIStemi operativi
Modulo di informatica II
Docente:
Patrizia Scandurra - Università degli Studi di Bergamo
a.a. 2009-10
Orario delle lezioni |
Martedì: 14.00-16.00 aula 10 (Teoria ) Giovedì: 8.30-10.30 aula 10 (Teoria)
Da fine Aprile in poi: Martedì: 14.00-16.00 aula 10 (Teoria ) Giovedì: 10.30-13.30 aule 5-6 (Lab)
|
N.B.: Per comunicazioni relative alle lezioni, a date di appelli d'esame, ecc. consultare la sezione avvisi in fondo a questa pagina.
- Programma del corso
- Programma in dettaglio e materiale didattico:
- Libri di testo
- Esami
- Ricevimento
- Avvisi
Programma 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/materiale didattico
Introduzione
Per i contenuti trattati vedi lucidi: Presentazione del corso


- 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
- I thread di Windows XP e di Linux -- Sez 4.5
- Thread safeness e condizioni di Bernstein
- Multi-threading in C con le standard POSIX API Pthreads (creazione, terminazione, join e sleep)
- Per i lucidi, codice degli esempi ed il testo dell'esercizio assegnato, vedi archivio
- La libreria Pthreads per Windows (Pthreads-w32) è scaricabile dal sito:
http://sourceware.org/pthreads-win32/
Per maggiori dettagli su come compilare ed eseguire i programmi in ambiente Linux o Windows, leggi il file "readme.txt" della cartella "esempi"
- La libreria Pthreads per Windows (Pthreads-w32) è scaricabile dal sito:
http://sourceware.org/pthreads-win32/
- Soluzione esercizio: vedi codice
- Per i lucidi, codice degli esempi ed il testo dell'esercizio assegnato, vedi archivio
- Schedulazione della CPU Vedi lucidi: 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
- Sincronizzazione dei 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)
- Lo stallo (deadlock) Vedi lucidi: deadlock
-- Cap. 7 del libro adottato
- Risorse -- Sez 7.1
- Caratterizzazione del 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
- 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
- La memoria virtuale Vedi lucidi: memoria virtuale
-- Cap. 9 del libro adottato
- 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
- L'interfaccia del file system Vedi lucidi: interfaccia del file system
-- Cap. 10 del libro adottato
- I file: attributi, metodi di accesso, struttura
- Struttura della directory
- Montaggio del file system
- NFS (cenni)
- Condivisione e protezione
- 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
- Struttura delle memorie di massa Vedi lucidi: memorie di massa
-- Cap. 12 del libro adottato (escluse le Sez. 12.3,12.4,12.7 e 12.8)
Sottosistema di I/O
Vedi lucidi: sottosistema di I/O
-- Cap. 13 del libro adottato (escluse le Sez. da 13.3.1 a 13.3.4, 13.5, 13.6 e 13.7)
-
L'hardware di I/O (I/O programmato, interrupt, DMA), le interfacce di I/O per le applicazioni, servizi del sotto-sistema di I/O indipendente dai dispositivi
Laboratorio
Una panoramica su Linux
- Lezione 0: Una panoramica veloce su Gnu-Linux: un pò di storia, distribuzioni e configurazione, breve introduzione all'uso della console bash.
- Vedi lucidi: introduzione a Linux
- Archivio per la DEMO
Programmazione concorrente e distribuita in linguaggio Java
Multithreading e sincronizzazione
- Lezione 1: Vedi archivio
(N.B. L'archivio contiene anche diverse possibili soluzioni dell'esercizio 4 "Somma" dove si affronta il problema della condivisione dei dati tra thread)
- Creazione e avvio
- Terminazione e join
- Cancellazione (immediata, differita)
- Esercizi
- Lezione 2: Vedi archivio
(N.B. L'archivio contiene anche tre possibili soluzioni del terzo esercizio "MatrixSum")
- Dati specifici dei thread
- Schedulazione dei thread
- Gruppi di thread
- Esercizi
- Lezione 3: Vedi archivio
(N.B. L'archivio contiene due possibili soluzioni dell'esercizio "Conto1", ed una possibile soluzione dell'esercizio "Conto2")
- 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
- Lezione 4: Vedi archivio
(N.B. L'archivio contiene due possibili soluzioni all'esercizio BAR)
- Cooperazione e sincronizzazione: monitor, variabili condizione e lock del package java.util.concurrent di Java5, problemi classici di sincronizzazione (producer-consumer, lettori-scrittori), esercizi
-
Lezione 5: Per i lucidi, codice degli esempi e testi degli esercizi, vedi archivio
(N.B. L'archivio contiene le soluzioni dei primi due esercizi)
-
Cooperazione e sincronizzazione: semafori, barriere e variabili atomiche del package java.util.concurrent di Java5,
problemi classici di sincronizzazione (producer-consumer, il problema dei filosofi a cena), esercizi
-
Cooperazione e sincronizzazione: semafori, barriere e variabili atomiche del package java.util.concurrent di Java5,
Comunicazione tra thread in ambiente client/server
- Lezione 6: Per i lucidi e il codice degli esempi, vedi archivio
- Fondamenti di reti, comunicazione tramite socket in Java, server multi-thread
- Vedi lucidi: introduzione a Linux
Libri di testo
Per la teoria:
-
Adottato (Nuova
edizione)
- A. Silberschatz, P. B. Galvin, G. Gagne: Sistemi operativi: concetti ed esempi. 8a edizione. Pearson Education Italia, 2009, ISBN13: 9788871925691, ISBN10: 8871925696
- (Vecchia edizione) 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
Consigliato:
Per il laboratorio:
- Java Concurrency in Practice. Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, and Doug Lea. Addison-Wesley, 2006. (consigliato)
Esami
-
Modalità d'esame
L'esame consta di una prova scritta + una prova orale, 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 il superamento della sola parte scritta non implica il superamento dell'intero esame; occorre presentarsi anche alla prova orale nella DATA STABILITA DAL DOCENTE.
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) ed è a carico della segretria.
- Esempi di compiti in preparazione alla prova scritta:
- Esempi di compiti passati:
- Appello 1 Luglio 2009: testo e soluzione
- Appello 17 Luglio 2009: testo e soluzione
- Appello 7 Settembre 2009: testo e soluzione
- Appello 28 Gennaio 2010: testo e soluzione
- Appello 11 Febbraio 2010: testo
e soluzione
- Risultati Esami:
- Appello 6 Luglio 2010: risultati della prova scritta + soluzione
- Appello 20 Luglio 2010: risultati della prova scritta + soluzione
- Appello 1 Set 2010: risultati della prova scritta + soluzione
- Appello (straordinario) del 25 Ottobre 2010: risultati della prova scritta + soluzione
- Appello 24 Gen 2011: risultati della prova scritta + soluzione
- Appello 16 Feb 2011: soluzione
Avvisi
1/03/10 |
Prima lezione giorno 2 Marzo 2010, 14.00-16.00 aula 10 La seconda lezione di giorno 4 Marzo 2010 si terrà in via eccezionale in aula 26 (anzicchè in aula 10), dalle 8.30 alle 10.30 |
15/04/10 | Avviso seminarioDurante la lezione di laboratorio di giovedì 22 Aprile 2010, 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 12
(KDE) o antecedenti.
|
1/06/10 | Sono sospese le ultime 3 lezioni del 08/06/2010, 10/06/2010 (lab.) e 10/06/2010 |