Istituto Tecnico Industriale Statale "Othoca" A.S. 2012/13 CLASSE: 4 G PROGRAMMA DI: Sistemi per la trasmissione e l'elaborazione delle informazioni DOCENTI: Paolo Schirra e Fabiola Inconis a Architettura dei sistemi di elaborazione e i microprocessori: richiami di architetture dei sistemi di elaborazione: il processore; la memoria; i dispositivi di ingresso/uscita; il meccanismo di interruzione. L'architettura base dei processori; La sezione esecutiva e la sezione di controllo dei processori. Il microprocessore Intel 8088/86: caratteristiche generali; indirizzamento della memoria; i registri interni; Il linguaggio assembly 8088/86: la struttura di un programma assembly; la dichiarazione delle variabili; il formato delle istruzioni; l'inizializzazione dei segmenti; le istruzioni di trasferimento dei dati e degli indirizzi; istruzioni per l'inizializzazione dei registri di segmento; le istruzioni aritmetiche; le istruzioni di controllo: le istruzioni di salto; le istruzioni di confronto; la struttura di selezione; i cicli con il controllo in testa e in coda. La gestione dell'input / output: le funzioni di base per l'acquisizione di un carattere da tastiera e per la visualizzazione di un carattere. I metodi di indirizzamento dell'8086: indirizzamento di un registro; indirizzamento immediato; indirizzamento diretto; indirizzamento indiretto tramite registro; indirizzamento indiretto tramite registro con spiazzamento; indirizzamento indiretto indicizzato. I vettori di byte; le stringhe di caratteri; lo stack dell'8086. I sistemi operativi: caratteristiche generali dei sistemi operativi: le funzioni principali di un sistema operativo; esecuzione monoprogrammata dei programmi; sistemi operativi multiprogrammati e i loro vantaggi; i sistemi batch; i sistemi time­sharing; i sistemi operativi per personal computer. La gestione dei processi: definizione di processo; gli stati di un processo e le transizioni di stato; descrittore di un processo; code di processi; cambio di contesto; creazione e terminazione dei processi; interazione tra processi. Algoritmi di scheduling: algoritmo First­Come­First­Served (FCFS); Shortest­Job­First (SJF); Shortest­Time­Remaining­First (STRF); Round­Robin (RR); algoritmi di scheduling su base prioritaria e a “code multiple”. I processi leggeri (thread). Esecuzione concorrente dei processi: competizione e cooperazione tra processi; il problema della mutua esclusione e l'algoritmo di Peterson. La comunicazione tra processi; I semafori e la soluzione del problema della mutua esclusione e della comunicazione; I problemi caratteristici con processi concorrenti; il problema del produttore­consumatore. I monitor e lo scambio di messaggi; le regioni critiche e lo stallo. La gestione della memoria: la rilocazione dei processi e la catena di programmazione; la rilocazione statica e dinamica; Memory­Management­Unit (MMU); multiprogrammazione e gestione della memoria; Algoritmi di allocazione dei processi nei sistemi a partizioni variabili; la paginazione; la memoria virtuale; cenni alla segmentazione. Gestione della periferiche di Input/Output: gestione e organizzazione dei dischi; organizzazione fisica dei dischi magnetici; algoritmi di schedulazione delle richieste di trasferimento; Algoritmi FIFO (First­In­First­Out), SSTF (Shortest Service Time First), SCAN, C­SCAN e N­SCAN. I dischi RAID (Redundant Array of Inexpensive/Independent Disks); RAID livello 0; RAID livello 1; RAID livello 2; RAID livello 3; RAID livello4; RAID livello 5. Il file system: la struttura logica del file system; struttura e organizzazione dei file: metodi di allocazione dello spazio su disco: allocazione contigua; allocazione a blocchi collegati (Linked Allocation); allocazioni a blocchi indicizzati (Indexed Allocation); allocazione con mappa dei blocchi dei file. Laboratorio: Esercitazioni sulla programmazione in assembly 8086: programmi per eseguire le operazioni aritmetiche. Utilizzo delle istruzioni di salto e di confronto per realizzare le strutture di controllo. Programmi per gestire l'input output di caratteri, stringhe e numeri. Esercitazioni sui sistemi operativi e processi: La creazione di un processo in C/C++ con il sistema operativo GNU/Linux; la chiamata di sistema fork() per la generazione di un processo figlio; il PID e il PPID (Process ID e Parent Process ID); la System Call getpid() e getppid() per ottenere il PID e il PPID dei processi; Passaggio dei parametri da linea di comando ad un processo. La System Call fork() e la gestione degli errori. Attività multiple dei processi padre/figlio e gli effetti dello scheduling. Le chiamate di sistema per la terminazione e l'attesa dei processi. Esercitazioni sulla sostituzione del codice con le chiamate di sistema exec(). Esercitazione sulla comunicazione tra processi mediante le pipe del sistema operativo GNU/Linux. Il problema del produttore­consumatore risolto con le pipe. Le chiamate di sistema dup() (non atomica) e dup2() (atomica) per per la duplicazione e chiusura dei file descriptor di una pipe. Le pipe da linea di comando. Esercitazioni sul sistema operativo GNU/Linux e sull'utilizzo della shell a linea di comando: Organizzazione logica dei file; i permessi dei file; I comandi per la gestione dei file e delle directory; la ridirezione dell'input e dell'output; le pipe da linea di comando; i filtri sui file; il comando grep e le espressioni regolari; Esercitazioni sulla programmazione della shell bash: le variabili nella shell e le variabili di sistema; l'output di dati e di messaggi; espressioni condizionali e le strutture di selezione e di ripetizione; semplici esempi della shell script; Script della shell per generare una pagina HTML contente le informazioni su una directory e sui file in essa contenuti. Esercitazioni sui thread in Java: il modello dei thread di Java: la classe Thread e l'interfaccia Runnable; la comunicazione tra thread Java e il problema del produttore­consumatore; Lo stallo di due thread in Java; I monitor in Java; La concorrenza in Java: i semafori. Esercitazioni su HTML e JavaScript: le espressioni regolari in JavaScript; l'input in HTML5; i canvas dell'HTML5; il framework KineticJS JavaScript per la creazione di animazioni dentro un canvas HTML5; esercitazione sulla gestione delle collisioni tra oggetti animati.