Elementi di architettura e sistemi operativi (2009/2010)

Codice insegnamento
4S02717
Crediti
12
Coordinatore
Tiziano Villa
Altri corsi di studio in cui è offerto
Altri corsi di studio in cui è offerto
    Settore disciplinare
    ING-INF/05 - SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI
    Lingua di erogazione
    Italiano
    L'insegnamento è organizzato come segue:
    Attività Crediti Periodo Docenti
    Teoria 9 I semestre Tiziano Villa
    Laboratorio e Esercitazioni 3 II semestre Davide Quaglia

    Orario lezioni

    I semestre
    Attività Giorno Ora Tipo Luogo Note
    Teoria lunedì 14.30 - 16.30 lezione Aula D  
    Teoria mercoledì 13.30 - 15.30 lezione Aula F  
    Teoria venerdì 8.30 - 10.30 lezione Aula I  
    II semestre
    Attività Giorno Ora Tipo Luogo Note
    Laboratorio e Esercitazioni mercoledì 8.30 - 11.30 laboratorio Laboratorio didattico Alfa  
    Laboratorio e Esercitazioni venerdì 9.30 - 10.30 laboratorio Laboratorio didattico Alfa  

    Obiettivi formativi

    Architettura dei calcolatori.
    Il corso si propone di dare allo studente la conoscenza necessaria alla
    realizzazione in forma digitale di un algoritmo presentando le possibili
    alternative comprese tra l'utilizzo di un processore universale e
    la costruzione di un dispositivo digitale dedicato.
    Queste conoscenze costituiscono i prerequisiti necessari alla comprensione
    dei meccanismi di funzionamento di un sistema informativo e del processo
    di traduzione di un programma da una sua descrizione ad alto livello sino
    a codice che esegue su un processore o a una realizzazione cablata.

    Sistemi operativi.
    Lo scopo del corso e' di presentare l'organizzazione di un sistema operativo
    e le problematiche connesse di correttezza ed efficienza.
    Saranno trattati capitoli scelti dai seguenti argomenti:
    definizione e storia dei sistemi operativi e di programmazione;
    programmi di utilita', sottosistemi, sistemi a multiprogrammazione;
    processi, comunicazione tra processi e sincronizzazione;
    allocazione della memoria, segmentazione e impaginazione;
    caricamento e collegamento, librerie;
    allocazione delle risorse, schedulazione, valutazione delle prestazioni;
    sistemi d'ingresso e uscita, dispositivi di memorizzazione, organizzazione
    degli archivi;
    concetti elementari di reti, protocolli e archivi distribuiti,
    protezione, sicurezza e riservatezza.

    Programma

    Programma di architettura dei calcolatori.
    Fondamenti:
    + Codifica dell'informazione:
    - Dall'informazione analogica a quella digitale.
    - I sistemi numerici posizionali.
    - La codifica alfanumerica.
    - La codifica dei numeri relativi.
    + Funzioni Booleane:
    - Algebra di commutazione.
    - Forme canoniche (mintermini e maxtermini).
    - Operatori universali.
    + Aritmetica:
    - La codifica dei numeri in virgola mobile (IEEE 754).
    - La struttura di una ALU.
    Progettazione digitale:
    + Circuiti combinatori:
    - Le porte logiche elementari.
    - Componenti logici combinatori.
    - Minimizzazione di funzioni mediante Mappe di Karnaugh.
    - Algoritmo di Quine-McCluskey.
    + Circuiti sequenziali:
    - Definizione.
    - Elementi di memoria.
    - Macchine a stati finiti.
    - Modellazione di circuiti sequenziali mediante FSM.
    - Minimizzazione degli stati di una FSM.
    + Circuiti sequenziali con unità di elaborazione:
    - Limiti del modello FSM.
    - Il modello FSMD.
    - La progettazione di una unità di elaborazione.
    - Interazione unità di controllo/unità di elaborazione.
    L'architettura del calcolatore:
    + Principi di base:
    - Il modello di Von Neumann.
    - Il modello a macchine virtuali.
    - La CPU.
    - Le memorie.
    - I BUS.
    - I dispositivi di I/O.
    - Le prestazioni.
    + Il set di istruzioni:
    - Modalita` di indirizzamento.
    - Il linguaggio assemblatore.
    - Operazioni di I/O.
    - Procedure.
    - Il set di istruzioni Intel 80xx86.
    + L'unità di Elaborazione:
    - Fetch/Decodifica/Esecuzione.
    - Controllo cablato.
    - Prestazioni, organizzazione a BUS multipli.
    + La gerarchia di memoria:
    - Principi generali.
    - Classificazione delle Memorie.
    - Le memorie cache.
    - La memoria virtuale.
    + Organizzazione dell'input/output:
    - Interrupt.
    - Accesso diretto alla memoria, l'arbitraggio.
    - Interfacce standard di I/O.
    - Le periferiche.
    + Dal modello alla realtà:
    - Classificazione dei sistemi di elaborazione.
    - Gli approcci CISC e RISC.
    - Pipelining.

    Programma di sistemi operativi.
    - Nozione di sistema operativo e storia dei sistemi operativi.
    - Interfaccia utente-sistema operativo; chiamate di sistema.
    - Processi e fili esecutivi ("threads"); creazione, esecuzione e distruzione di fili esecutivi; modelli di fili esecutivi di utente e di sistema operativo.
    - Sincronizzazione; meta-esempio di protocolli di mutua esclusione; primitive atomiche di sincronizzazione; lucchetti ("locks") e loro acquisizione e rilascio; disabilitazione delle interruzioni durante la sezione critica o durante l'acquisizione e rilascio dei lucchetti; istruzioni macchina atomiche e loro utilizzo per realizzare lucchetti; problema dell'attesa occupata e sua limitazione all'acquisizione e rilascio dei lucchetti.
    - Primitive di programmazione per la sincronizzazione; semafori con esempio dei produttori-consumatori; osservatori, variabili di condizione ed esempio dei lettori-scrittori; supporto alla sincronizzazione nei linguaggi di programmazione.
    - Processi concorrenti e blocco critico ("deadlock").
    - Algoritmi di assegnamento ("scheduling") del processore.
    - Gestione e protezione della memoria (sistema operativo e spazi d'indirizzamento); gerarchia della memoria e memorie temporanee veloci ("caches"); memoria virtuale, traduzione degli indirizzi e tavole associative di traduzione; richiesta selettiva, allocazione e rimpiazzo delle pagine di memoria.
    - Sistemi d'ingresso/uscita; gestione della memoria su disco.
    - Organizzazione degli archivi di documenti ("file systems"); nomi e strutture dati di memorizzazione e ricerca.
    - Cenni su reti e sistemi operativi distribuiti.

    Programma del laboratorio e esercitazioni (provvisorio).
    - Introduzione alla programmazione C:
    compilatore, caricatore ("loader") e collegatore ("linker");
    librerie e programma make.
    - La struttura di un programma C:
    variabili;
    istruzioni;
    funzioni e passaggio dei parametri;
    puntatori e allocazione dinamica della memoria;
    stringhe;
    gestione dell'ingresso/uscita
    - Programmazione di sistema tramite procedura d'interfaccia. (per shell bash):
    struttura del programma d'interfaccia;
    selezione e iterazione;
    ingresso e uscita;
    variabili;
    comandi di sistema.
    - Programmazione di sistema in C:
    documenti ("files") e cartelle ("directories");
    processi (fork/exec);
    concatenazione di processi ("pipe" e "named pipe");
    semafori;
    memoria condivisa;
    code di messaggi.
    - Programmazione e sincronizzazione di fili esecutivi.

    Modalità d'esame

    Le competenze sono verificate con una prova scritta di teoria e una prova scritta e/o pratica di laboratorio; il voto della prima contribuisce per i 3/4 del voto finale e quello della seconda per 1/4.
    L'esame deve essere completato (teoria+laboratorio) entro l'inizio dell'anno
    accademico successivo a quello in cui e' stato erogato il corso ed e' stata sostenuta con successo la prova di teoria o la prova di laboratorio (a seconda di quale delle due e' stata superata per prima).

    Testi di riferimento
    Attività Autore Titolo Casa editrice Anno ISBN Note
    Teoria R.Katz, G.Borriello Contemporary logic design (Edizione 2) Pearson Education International 2005 0-13-127830-4
    Teoria Franco Fummi, Mariagiovanna Sami, Cristina Silvano Progettazione Digitale (Edizione 2) McGraw-Hill 2007 8838663521
    Teoria A. Silberschatz - P.B. Galvin - G. Gagne Sistemi Operativi. Concetti ed esempi. (Edizione 8) Pearson Paravia Bruno Mondadori 2009 978-88-7192-569-1
    Materiale didattico
    Titolo Formato (Lingua, Dimensione, Data pubblicazione)
    Cap. 1-10 Borriello-Katz  x-gzipx-gzip (en, 1791 KB, 12/10/09)
    Cap. 11 CLD R. Katz Organizzazione del calcolatore  zipzip (en, 110 KB, 16/11/09)
    Cap. 12 CLD R. Katz Realizzazione dell'unita' di controllo  zipzip (en, 174 KB, 16/11/09)
    Lezioni di Architettura  x-gzipx-gzip (en, 2521 KB, 02/12/09)
    Lezioni in allegato al testo di Silberschatz-Galvin-Gagne  x-gzipx-gzip (en, 10809 KB, 13/12/09)
    Lezioni UCB Sistemi Operativi  pdfpdf (en, 15001 KB, 13/12/09)
    01.Presentazione del Corso  pdfpdf (it, 83 KB, 08/03/10)
    02.Programmazione C  pdfpdf (it, 457 KB, 08/03/10)
    03.Esempi di programmi C  zipzip (it, 22 KB, 10/06/10)
    04.Shell di UNIX (Parte 1)  pdfpdf (it, 151 KB, 12/05/10)
    05.Shell di UNIX (Parte 2)  pdfpdf (it, 135 KB, 03/06/10)
    06.Esempi di script di Shell  zipzip (it, 10 KB, 10/06/10)
    07.Virtualizzazione e installazione Linux  pdfpdf (it, 1090 KB, 26/05/10)

    Statistiche per i requisiti di trasparenza (Attuazione Art. 2 del D.M. 31/10/2007, n. 544)

    Statistiche esiti
    Esiti Esami Esiti Percentuali Media voti Deviazione Standard
    Positivi 43.58% 23 2
    Respinti --
    Assenti 53.84%
    Ritirati --
    Annullati 2.56%
    Distribuzione degli esiti positivi
    18 19 20 21 22 23 24 25 26 27 28 29 30 30 e Lode
    0.0% 11.7% 11.7% 0.0% 23.5% 11.7% 17.6% 5.8% 5.8% 5.8% 0.0% 0.0% 0.0% 5.8%

    Valori relativi all'AA 2009/2010 calcolati su un totale di 39 iscritti. I valori in percentuale sono arrotondati al numero intero più vicino.