Al termine del corso si sarà in grado di:
Descrivere le caratteristiche dei principali tipi di calcolatori. Descrivere i principi ricorrenti nel progetto dei calcolatori: astrazioni; migliorare le prestazioni ottimizzando le situazioni più frequenti, sfruttando il parallelismo, eseguendo le operazioni in pipeline, anticipando le operazioni attraverso predizioni; impatto delle memorie nelle prestazioni di un calcolatore; come rendere più affidabili i sistemi attraverso la ridondanza. Comprendere le caratteristiche dei linguaggi di programmazione a diversi livelli e come avviene la traduzione da linguaggi di alto livello al linguaggio macchina (con interpreti e compilatori). Spiegare come l’evoluzione tecnologica ha influito su dimensione, costo e prestazioni dei calcolatori, determinando anche la diffusione capillare dei calcolatori. Definire come si possono misurare le prestazioni dei calcolatori. Elencare le principali tappe nella storia dei calcolatori, dalla metà del ‘900 ad oggi.
Comprendere le basi della rappresentazione digitale dei dati (in particolare dei numeri interi con e senza segno, frazionari con virgola fissa o mobile, del testo secondo i principali standard). Definizione di bit, byte, e dei multipli (Kilo, Mega, Giga, Tera). Descrivere le caratteristiche della notazione posizionale per la rappresentazione dei numeri interi (senza segno), saper applicare la definizione con diverse basi (in particolare per le basi 10, 2, 8 e 16). Ricordare gli algoritmi di conversione dei numeri tra basi e saperli applicare. Definire la rappresentazione in modulo e segno e in complemento a due dei numeri interi con segno. Definire la rappresentazione dei numeri frazionari in virgola mobile secondo lo standard IEEE 754. Eseguire operazioni aritmetiche su numeri binari. Comprendere ed esemplificare le conseguenze della rappresentazione dei dati su un numero finito di bit: overflow e underflow. Descrivere gli standard ASCII (base ed esteso) e Unicode di codifica del testo, e i metodi di rappresentazione dei codepoint Unicode (UCS-2, UTF-8, UTF-16). Applicare le diverse codifiche a brevi testi in varie lingue eseguendo esercizi di codifica e di decodifica. Spiegare i metodi Little Endiand e Big Endian di memorizzazione di dati codificati su più byte.
Definire l’Algebra di Boole: variabili, operatori, espressioni booleane, enunciare le principali leggi dell’algebra. Eseguire esercizi di semplificazione di espressioni booleane applicando tali leggi. Descrivere funzioni booleane di n variabili attraverso tavole di verità ed espressioni booleane; applicare i metodi di derivazione delle espressioni booleane in forma normale somma di prodotto o prodotto di somme dalla tavola di verità. Definire insiemi minimi di operatori necessari per descrivere una qualsiasi funzione booleana: dimostrare che ciascuno di tali insiemi minimi permettono di realizzare circuiti equivalenti a tutti gli altri operatori. Definizione delle porte logiche che realizzano gli operatori booleani. Saper ricavare da una espressione booleana il corrispondente circuito logico combinatorio e viceversa. Descrivere alcuni circuiti combinatori base per l’implementazione di CPU: multiplexer, decoder, sommatori, ALU. Descrivere i circuiti con memoria: latch, flip flop; spiegare il loro funzionamento (diretto da un clock) e descrivere come combinarli per ottenere registri o memorie.
Descrivere come collegando circuiti combinatori base e impostando opportuni segnali di controllo in modo coordinato, si possa ottenere un primo prototipi di “cammino dei dati” (data path) capace di eseguire alcune istruzioni fondamentali appartenenti al linguaggio macchina.
Descrivere i diversi livelli della “gerarchia delle memorie”, spiegando le caratteristiche dei diversi tipi di memorie (velocità, capacità, volatilità). Descrivere alcune tecnologie utilizzate per implementare memorie ai diversi livelli della gerarchia.
Taking part in this course will enable the participants to: Describe the characteristics of the main types of computers. Describe the underlying principles in computer design: abstractions; achieving better performance by optimizing frequent cases, exploiting parallelism, executing operations in a pipeline, anticipating operations through predictions; the impact of memories on computer performance; and how to make systems more reliable through redundancy. Understand the characteristics of programming languages at different levels and explain how to translate from high-level languages to machine language (through interpreters and compilers). Explain how technological evolution has influenced the size, cost, and performance of computers, also leading to their widespread diffusion. Define how computer performance can be measured. List the main stages in the history of computers, from the mid-20th century to today.
Understand the basics of digital data representation (in particular, signed and unsigned integers, fixed- and floating-point fractions, and text according to main standards). Define bit, byte, and their multiples (Kilo, Mega, Giga, Tera). Describe the characteristics of positional notation for the representation of integers (unsigned), and be able to apply the definition with different bases (especially for bases 10, 2, 8, and 16). Recall and apply the algorithms for number conversion between bases. Define the sign-magnitude and two's complement representations for signed integers. Define the representation of fractional numbers in floating-point according to the IEEE 754 standard. Perform arithmetic operations on binary numbers. Understand and exemplify the consequences of data representation on a finite number of bits: overflow and underflow. Describe the ASCII (base and extended) and Unicode standards for text encoding, and the methods for representing Unicode codepoints (UCS-2, UTF-8, UTF-16). Apply the different encodings to short texts in various languages by performing encoding and decoding exercises. Explain the two methods for storing multi-byte encoded data: Little Endian and Big Endian.
Define Boolean Algebra: variables, operators, Boolean expressions, and state the main the laws of algebra. Perform simplification exercises to Boolean expressions by applying these laws. Describe Boolean functions of n variables through truth tables and Boolean expressions; apply methods for deriving Boolean expressions in Sum-of-Products or Product-of-Sums canonical form from the truth table. Define minimal sets of operators necessary to describe any Boolean function; demonstrate that each of these minimal sets allows for the creation of circuits equivalent to all other operators. Define the logic gates that implement Boolean operators. Derive the combinational logic circuit implementing a Boolean expression and vice versa. Describe some basic combinational circuits for CPU implementation: multiplexer, decoder, adders, ALU (Arithmetic Logic Unit). Describe circuits with memory: latch, flip-flop; explain their operation (driven by a clock) and describe how to combine them to obtain registers or memories.
Describe how, by connecting basic combinational circuits and setting appropriate control signals in a coordinated manner, a first prototype of a "data path" capable of executing some fundamental instructions belonging to machine language can be obtained.
Describe the different levels of the "memory hierarchy," explaining the characteristics of the different types of memory (speed, capacity, volatility). Describe some technologies used to implement memories at different levels of the hierarchy.
Follow us :