Docente: Lanfranco LOPRIORE
Numero totale di ore di lezione (L): 72
Numero totale di ore di esercitazioni (E): 48
Obbiettivi del corso:
L'insegnamento si propone di fornire le conoscenze di base per un inquadramento generale del processo di analisi di un problema dal punto di vista informatico, con esemplificazioni tramite un linguaggio di programmazione ad alto livello. I principi e le tecniche della programmazione sono illustrati con riferimento al linguaggio C++, scelto per la sua ampia diffusione in ambito produttivo e industriale. La materia viene illustrata mediante largo ricorso ad esempi. Vengono inoltre presentati alcuni aspetti fondamentali dell'architettura dei calcolatori e dei supporti architetturali per sistemi operativi e linguaggi. I concetti di base e la struttura dei sistemi operativi sono illustrati con particolare riferimento alle funzionalità di nucleo, di virtualizzazione della memoria e di gestione dei dispositivi
Programma:
RAPPRESENTAZIONE DELL'INFORMAZIONE
Numerazione posizionale. Numeri in basi diverse. Conversione di base. Aritmetica binaria. Rappresentazione in complemento dei numeri binari. Numeri in virgola fissa e in virgola mobile. Informazioni di carattere alfanumerico. Codifiche ASCII e BCD. (L: 5; E: 2)
PROGRAMMAZIONE IN UN LINGUAGGIO AD ALTO LIVELLO: IL C++
Sviluppo di un programma. Il linguaggio C++. Tipi fondamentali, operatori ed espressioni. Istruzioni di controllo. Array. Puntatori e riferimenti. Funzioni. Visibilità, collegamento e tempo di vita. Effetti collaterali. Aliasing. Strutture e unioni. Classi. Sovrapposizione degli operatori. Ingresso e uscita. Strutture dati. Ordinamento e ricerca. Un ambiente di sviluppo integrato per programmi in linguaggio C++: l'ambiente Code::Blocks. (L: 44; E: 42)
FONDAMENTI DI ARCHITETTURA DEI CALCOLATORI
Il processore. La memoria. Il set istruzioni. Codifica delle istruzioni. Il controllo del flusso. Lo stack. Sottoprogrammi. Meccanismi di interruzione. Memorie cache. Dispositivi di ingresso/uscita. Accesso diretto alla memoria. Meccanismi di protezione. Unità di gestione della memoria. (L: 8; E: 2)
SISTEMI OPERATIVI
Gestione dei processi. Nucleo di un sistema a processi. Sincronizzazione e mutua esclusione. Gestione della memoria. Gestione delle periferiche. Il file system. (L: 15; E: 2)
Testi di riferimento:
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari, Sistemi Operativi, Seconda Edizione. Milano: McGraw-Hill, 2008.
G. Bucci, Calcolatori Elettronici. Architettura e Organizzazione. Milano: McGraw-Hill, 2009.
L. Lopriore, C++: Programmazione Mediante Esempi, Raccolta di Diapositive. Pisa: Edizioni Il Campano, 2013.
H. Schildt, Guida al C++, Terza Edizione. Milano: McGraw-Hill, 2003.
Modalità di svolgimento dell'esame:
Prova scritta e prova orale.
L'ammissione alla prova orale è subordinata al conseguimento di una valutazione pari o superiore a 15/30 nella prova scritta. La prova scritta rimane valida nell'ambito degli appelli dei periodi di gennaio-febbraio e di giugno-settembre.
Esempi di esercizi svolti sono disponibili nella dispensa di L. Lopriore e N. Tonellotto, C++: Esercizi di Programmazione sulle Classi. Pisa: Edizioni Il Campano, 2013.