Patrizia Scandurra


SIStemi operativi
Modulo di informatica II
Docente: Patrizia Scandurra - Università degli Studi di Bergamo
a.a. 2008-09


Orario delle lezioni


Lunedì: 14.00-16.00 aula 26 (Teoria)
aule 5-6 (Lab) (da fine Marzo in poi)

 

Venerdì: 11.00-13.00 aula 26 (Teoria)



 

N.B.: Per comunicazioni relative alle lezioni, a date di appelli d'esame, ecc. consultare la sezione avvisi in fondo a questa pagina.

 



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, file system, programmazione concorrente e distribuita, esempi di sistemi operativi.


 

Programma/materiale didattico

Introduzione
Introduzione
Per i contenuti trattati vedi lucidi:  Presentazione del corso pdf, lezione introduttiva pdf e  architettura pdf
  • 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 da Sez. 1.2 a Sez.1.8 del libro adottato
  • Concetti di base sui sistemi operativi: funzioni, servizi e chiamate di sistema, programmi di sistema  -- Cap. 3, da Sez 3.1 a 3.4 del libro adottato
  • Architettura di un sistema operativo -- Cap. 3, da Sez 3.5 a Sez. 3.7 del libro adottato
  • Implementazione e avvio -- Cap. 3, da Sez 3.8 a Sez. 3.10 del libro adottato
Gestione dei processi
  • I processi   Vedi lucidi:   processi pdf
    • Il concetto di processo -- Cap. 4, Sez 4.1 del libro adottato
    • Schedulazione dei processi -- Cap. 4, Sez 4.2 del libro adottato
    • Operazioni sui processi -- Cap. 4, Sez 4.3 del libro adottato
  • La comunicazione tra processi Vedi lucidi:  IPC pdf
    • Processi cooperanti -- Cap. 4, Sez 4.5 del libro adottato (escluso 4.5.6)
    • Modelli di comunicazione
    • La comunicazione tramite scambio di messaggi 
    • La comunicazione in sistemi client/server -- Cap. 4, Sez 4.6 del libro adottato
  • I thread   Vedi lucidi:  thread pdf -- Cap. 5 del libro adottato
    • Generalità e modelli Sez 5.1 e 5.2
    • Problematiche relative ai thread -- Sez 5.3
    • Pthread -- Sez 5.4
    • I thread di Windows XP -- Sez 5.5
    • I thread di Linux -- Sez 5.6
    • I thread di Java -- Sez 5.7
    • Thread safeness e condizioni di Bernstein
  • Sincronizzazione dei processi Vedi lucidi:  sincronizzazione pdf -- Cap. 7 del libro adottato
    • Il problema della sezione critica -- Sez 7.1 e 7.2
    • Soluzioni per due processi -- Sez 7.3
    • Hardware per la sincronizzazione -- Sez 7.4
    • Semafori -- Sez 7.5
    • Problemi classici di sincronizzazione -- Sez 7.6
    • Monitor -- Sez 7.7
    • Sincronizzazione in Solaris, Windows XP e Linux -- Sez 7.9
    • Transazioni atomiche -- Sez 7.10
  • Schedulazione della CPU Vedi lucidi: schedulazione pdf -- Cap. 6 del libro adottato
    • Concetti di base e criteri -- Sez 6.1 e 6.2
    • Algoritmi di schedulazione -- Sez 6.3
    • Schedulazione per sistemi multiprocessore -- Sez 6.4
    • Schedulazione per sistemi in tempo reale -- Sez 6.5
    • Schedulazione dei thread
    • -- Sez 6.6 (escluso 6.6.2)
    • Esempi: schedulazione in WindowsXP e in Linux -- Sez 6.7.2 e 6.7.3
  • Lo stallo (deadlock) Vedi lucidi:  deadlock pdf -- Cap. 8 del libro adottato
    • Risorse -- Sez 8.1
    • Caratterizzazione del deadlock -- Sez 8.2
    • Metodi di gestione del deadlock -- Sez 8.3
    • Prevenire il deadlock -- Sez 8.4
    • Evitare il deadlock -- Sez 8.5
    • La risoluzione del deadlock (rilevazione e ripristino) -- Sez 8.6 e 8.7
Gestione della memoria
  • Gestione della memoria centrale Vedi lucidi:  memoria centrale pdf  -- Cap. 9 del libro adottato (*), Cap. 4 del libro di A.S.Tanenbaum (**)
    • Concetti generali -- Sez 9.1 di (*)
    • Overlay -- Sez. 9.1.5 di (*)
    • Swapping -- Sez. 9.2 di (*) e Sez. 4.2 di (**)
    • Allocazione contigua della memoria: partizione singola, partizioni multiple fisse e dinamiche -- Sez. 9.3 di (*) + Sez. 4.1.1, 4.1.2 e 4.2 di (**)
    • Paginazione -- Sez. 9.4 di (*)
      • metodo di base -- Sez. 9.4.1 di (*)
      • progettazione della tabella delle pagine (supporto HW, protezione, condivisione, struttura) -- Sez. 9.4.2, 9.4.3, 9.4.4 e 9.4.5 di (*) (escluso Sez. 9.4.4.2)
    • Segmentazione 
      • Implementazione della segmentazione pura -- Sez. 9.5 di (*)
      • Segmentazione con paginazione: famiglia Intel 80x86 -- Sez. 9.6 di (*)
  • La memoria virtuale Vedi lucidi: memoria virtuale pdf   -- Cap. 10 del libro adottato
    • Concetti: gerarchia di emoria, spazio virtuale, richiesta di paginazione, copia durante la scrittura, file mappati in memoria -- Sez. 10.1, 10.2, 10.3, 10.7
    • Algoritmi di sostituzione della pagina -- Sez. 10.4 (escluso 10.4.5.1, 10.4.7 e 10.4.8)
    • Allocazione dei frame -- Sez. 10.5
    • Il fenomeno del thrashing ed il modello del working set -- Sez. 10.6 (escluso 10.4.5.1, 10.4.7 e 10.4.8)
    • Altre considerazioni -- Sez. 10.8.1, 10.8.6 e 10.8.7
File System
  • L'interfaccia del file system Vedi lucidi: interfaccia del file system pdf -- Cap. 11 del libro adottato
    • I file: attributi, metodi di accesso, struttura
    • Struttura della directory
    • Montaggio del file system
    • Condivisione e protezione 
  • Implementazione del file system Vedi lucidi:  implementazione del file system pdf -- Cap. 12 del libro adottato (esclusa Sez. 12.6.2; Sez. 12.9 è da "leggere")
    • Realizzazione del file system
    • Realizzazione della directory
    • Metodi di allocazione
    • Gestione dello spazio libero
    • Efficienza e prestazioni
    • Recupero del file system
    • NFS (cenni)
  • Struttura delle memorie di massa Vedi lucidi: memorie di massa pdf -- Cap. 14 del libro adottato (escluse le Sez. 14.2,14.5,14.6.3 e 14.7)
Sottosistema di I/O
Vedi lucidi: sottosistema di I/O pdf -- Cap. 13 del libro adottato
  • L'hardware di I/O (attesa attiva, interrupt, DMA), le interfacce di I/O per le applicazioni, servizi del sotto-sistema di I/O indipendente dai dispositivi, prestazioni
Conclusioni e frontiere future
Vedi lucidi: conclusioni pdf
  • Sistemi operativi distribuiti, grid computing, cloud computing, sistemi operativi embedded

Laboratorio

Programmazione concorrente e distribuita in linguaggio Java
  • Multithreading in Java:
    • Lezione 1: Vedi archivio zip
      • Creazione e avvio, esercizi
    • Lezione 2: Vedi archivio  zip (N.B. L'archivio contiene anche due possibili soluzioni del primo esercizio "Somma")
      • Terminazione e join
      • Cancellazione (immediata, differita)
      • Dati specifici dei thread
      • Esercizi
    • Lezione 3: Vedi archivio  zip (N.B. L'archivio contiene anche tre possibili soluzioni del terzo esercizio "MatrixSum")
      • Schedulazione dei thread
      • Gruppi di thread
      • Esercizi
    • Lezione 4: Vedi archivio  zip (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, lettori-scrittori)
    • Lezione 5: Per i lucidi, codice degli esempi e testi degli esercizi, vedi archivio  zip Le soluzioni degli esercizi sono in zip
      • 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 6: Per i lucidi, codice degli esempi e testi degli esercizi, vedi archivio  zip Le soluzioni degli esercizi sono in zip
      • Cooperazione e sincronizzazione: semafori e variabili atomiche del package java.util.concurrent di Java5,
        problemi classici di sincronizzazione (producer-consumer, il problema dei filosofi a cena), esercizi

  • Comunicazione tra processi in ambiente client/server: socket Java, Java RMI (Remote Method Invocation)
    • Lezione 7: Per i lucidi e il codice degli esempi, vedi archivio  zip
      • Fondamenti di reti, comunicazione tramite socket in Java
    • Lezione 8: Per i lucidi e il codice degli esempi, vedi archivio  zip
      • Comunicazione tramite Java RMI

 

Panoramica di sistemi Unix-like (come Linux)
  • Lezione 9: 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 pdf

  • Lezione 10: Multi-threading in C con le standard POSIX API Pthreads (cenni)
    • Per i lucidi e il codice degli esempi, vedi archivio  zip
      • 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 soluzione dell' esercizio "Somma" è in zip



Libri di testo

 

Per il laboratorio:

  • Paolo Ancilotti, Maurelio Boari. Programmazione concorrente e distribuita. MC-Graw-Hill, 2007, ISBN: 9788838663581 (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:
    • Esempio di compito #1 pdf
    • Esempio di compito #2pdf
    • Esempio di compito #3pdf

  • Risultati Esami:


Ricevimento

Lunedì 16:00 ~ 18:00 (durante il periodo delle lezioni) o per appuntamento (via email)

Avvisi

29/05/09

Avviso seminario

Durante la lezione di laboratorio di lunedì 8 Giugno 2009, dalle 14.00 alle 16.00 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.
Per creare questo CD basta seguire le seguenti istruzioni:

  • Scaricare dal sito http://fedoraproject.org/it/get-fedora-kde il file F12-i686-Live-KDE.iso (formato ISO, 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.