Famiglie di Calcolatori • Personal Computer • Desktop • Protatile (Laptot) • Workstation • Server • Enterprise Server (Mainframe) • Network Server • Supercalcolatore • PC industriale •Calcolatori per usi specifici (sistemi embedded) Architetture con più processori • Multiprocessore • ci sono fisicamente più processori istallati su una stessa macchina, tutti condividono una stessa memoria ma possono anche avere parte di memoria dedicata • difficoltà nella programmazione • Cluster / Rete di Calcolatori • Rete a scambio di messaggi • le dimensioni possono variare da pochi PC connessi in rete fino ad arrivare alla rete internet • parallelismo non ottimizzato • overhead / bottleneck accentuato dalle comunicazioni Concetti Operativi di Base • Esempio di istruzione: ADD IND • Esempio di esecuzione (passi base): 1. l'istruzione viene prelevata dalla memoria e mandata al processore 2. l'addendo contenuto nella parola di memoria collocata nell'indirizzo IND viene letto, portato all'interno del processore, addizionato con il registro accumulatore A tramite la ALU 3. la somma viene scritta in A sostituendola al contenuto precedente Collegamenti tra processore e memoria MBR o MDR R0 (A) OPR o IR Esecuzione di un'istruzione • Il programma, solitamente acquisito tramite unità di I/O viene caricato in memoria • L'esecuzione inizia facendo puntare il PC alla prima istruzione • Il contenuto del PC viene copiato in MAR e viene attivato il segnale di controllo che determina la lettura da memoria • Il contenuto della parola indirizzata viene quindi copiato in MBR • Il contenuto del registro MBR viene interpretato e trattandosi di una istruzione, alcuni bit vengono copiati nel registro OPR Esecuzione di un'istruzione con ALU • Se un operando risiede in memoria (potrebbe anche risiedere già in un registro), si copia l'indirizzo in MAR • Una volta copiato il contenuto in MBR, lo si manda alla ALU • I precedenti passi vengono ripetuti per tutti gli operandi necessari all'istruzione in modo da permettere alla ALU di eseguire finalmente l'operazione richiesta • Se il risultato dev'esser scritto in memoria, allora si copia in MBR e si scrive nel MAR l'indirizzo dove il risuiltato va memorizzato • Prima che l'esecuzione termini, il PC è aggiornato Esecuzione di un'istruzione con I/O • Se un dispositivo di I/O necessita di un servizio urgente, allora è previsto il meccanismo delle interruzioni • Il dispositivo di I/O attiva e manda al processore il segnale di richiesta di interruzione (interrupt request) • Il processore sospende l'esecuzione corrente e passa ad eseguire la relativa routine di servizio di interruzione • Poiché le interruzioni possono avveniere in qualsiasi momento, il processore dovrà salvare lo stato corrente per poterlo ripristinare successivamente (system snapshot) • Terminata la routine di servizio si ripristina l'esecuzione precedente Collegamenti tra Unità, BUS • Le unità funzionali fondamentali del calcolatore si scambiano informazioni (istruzioni e dati) mediante un organo di collegamento: il bus • Il bus è un fascio di fili che trasportano bit, cioè informazioni (parole) codificate in forma binaria, come sequenze di bit • Il calcolatore contiene un bus, e spesso più di uno con funzioni più o meno specializzate buffer buffer Ruolo del Sistema Operativo • Normalmente il calcolatore è equipaggiato con un sistema operativo (SO). • Il SO è un complesso di programmi che danno al calcolatore funzionalità minimali: • caricare e attivare uno o più programmi • gestire le unità funzionali di memoria e I/O • permettere l’esecuzione simultanea di due o più programmi (processi): concorrenza • permettere la compresenza di più utenti • garantire affidabilità e sicurezza del calcolatore Stampa di un dato in Memoria Efficienza di un Calcolatore • Per valutare l'efficienza o prestazione di un calcolatore si considera principalmente la velocità con cui esso è in grado di eseguire un programma, fattori determinanti sono: • Struttura dei circuiti componenti • Articolazione del linguaggio macchina • Compilatore • Per aumentare le prestazioni di un calcolatore bisogna quindi progettare in modo coordinato la struttura del calcolatore, l'insieme delle istruzioni macchina e il relativo compilatore Efficienza di un Calcolatore • con riferimento alla figura precedente, si denota come tempo di esecuzione (elapsed time), ∆Tesec = t5 – t1 • il tempo di processore, ∆Tproc rappresenta invece il tempo in cui il processore è attivo, nell'esempio è la somma degli intervalli di tempo etichettati con "programma", "routine di SO" • in generale ∆Tproc ≤ ∆Tesec • la scelta dei dati memorizzati in memoria cache rappresenta uno dei punti focali nell'aumento prestazionale di un calcolatore Il Clock • i circuiti componenti il processore sono controllati dal segnale di scansione del tempo, il segnale di clock • il segnale di clock suddivide il tempo in intervalli regolari, cicli di clock • ogni istruzione è suddivisa in passi elementari, ognuno eseguibile in un ciclo di clock • il periodo di clock, ∆Tclock rappresenta il tempo che intercorre tra l'inizio di un ciclo di clock ed il successivo, è misurato in secondi (o meglio in nanosecondi) • l'inverso fclock = 1 / ∆Tclock e' la frequenza di clock e si misura in Hertz (Hz), numero di cicli al secondo, 1 Hz = 1 ciclo / s •kHz (kiloHertz) = 1000 cicli / s •MHz (MegaHertz) = 1000 kHz •GHz (GigaHertz) = 1000 MHz Critical Path • Come viene stabilita la massima frequenza di clock a cui può arrivare un processore? • Cammino critico (critical path): è il percorso più lungo che un segnale deve attraversare nel tempo di un ciclo di clock. • se il cammino più lungo richiede 1µs allora la massima frequenza del processore equivale ad 1MHz • E' necessario tenersi al di sotto della frequenza massima teorica poiche' altri fattori che la determinano riguardano concetti più tecnici quali: • invecchiamento dei componenti • deriva termica • tolleranza dei transistor Equazione di Prestazione • Sia Nistr il numero di istruzioni di un programma in esecuzione • Sia Npassi il numero medio di passi necessari ad eseguire una generica istruzione macchina, dove ogni passo è eseguito in un ciclo di clock esatto, allora ΔTproc = N istr x N passi f clock = = N istr x N passi x ΔTclock Pipelining • Metodologia per la ristrutturazione e riorganizzazione dei componenti fondamentali di un calcolatore ai fini di aumentarne le prestazioni • Un'esempio di metodologia Pipelining si ritrova nelle catene di montaggio: il processo di fabbricazione di un bene materiale è suddiviso in una serie di sottoprocessi ognuno dei quali è eseguito da uno stadio della catena • Se la catena è costantemente alimentata, ciascuno stadio opera su un singolo sottoprodotto e il tempo di permanenza è lo stesso per tutti gli stadi • Tempo per produrre una unità di prodotto è pari al tempo del singolo stadio Pipelining • Esempio di istruzione: ADD IND • si potrebbe caricare l'istruzione successiva prima che il risultato dell'addizione venga salvato nell'accumulatore A • in tal modo, durante uno stesso ciclo di clock, vengono effettuate più operazioni, ciò comporta una diminuzione del valore Npassi • in generale Npassi > 1 • si può estendere il discorso dotando il processore di più pipeline indipendenti •bisogna fare molta attenzione a preservare la correttezza logica dell'algoritmo, cioè il risultato finale deve essere sempre lo stesso che se si eseguisse il programma in modo puramente sequenziale Istruzioni CISC e RISC • RISC (Reduced instruction set computer) Nistr Npassi • CISC (Complex instruction set computer) Nistr Npassi • la migliore scelta dipende molto dalle possibili tecniche di pipelining attuabili •Nella realtà i processori attuali utilizzano aspetti di entrambe le tecnologie RISC e CISC • Nistr dipende molto anche dal compilatore e da aspetti di compatibilità CISC vs RISC Ruolo del Compilatore • In generale un compilatore è un traduttore, ovvero un compilatore è un programma che traduce una serie di istruzioni scritte in un determinato linguaggio di programmazione (codice sorgente) in istruzioni di un altro linguaggio (codice oggetto) • Rispetto ad un semplice traduttore il livello di espressività tra codice sorgente e codice oggetto solitamente diminuisce • Un compilatore e' solitamente in grado di evidenziare eventuali errori. Sicuramente di natura sintattica ma anche alcuni semantici • Un buon compilatore non si limita alla semplice traduzione ma effettua anche ottimizzazione del codice oggetto COMPILATORE oggetto sorgente errori Utilizzo della MemoriaCache e Paginazione • Caratteristiche desiderabili • Ampia capacità • Velocità • Economicità Stima dell'Efficienza • Non esistono grandezze assolute per Nistr e Npassi • Per valutare l'efficienza di un calcolatore si utilizza il metodo sperimentale, servendosi di programmi di valutazione, i cosiddetti benchmark • l'organizzazione Standard Performance Evaluation Corporation (SPEC) definisce la composizione della suite di programmi (http://www.spec.org/benchmarks.html): ú SPEC95: SUN SPARC station 10/40 ú SPEC2000: UltraSparc II a 296 MHz ú SPEC CPU 2006 (v 1.2, 2011): “The benchmark has several different ways to measure computer performance. One way is to measure how fast the computer completes a single task; this is a speed measurement. Another way is to measure how many tasks a computer can accomplish in a certain amount of time; this is called a throughput, capacity or rate measurement.” tempo di processore sul calcolatore di riferimento tempo di processore sul calcolatore da valutare • la misurazione va ripetuta per tutti i programmi della suite prestazioni in unità SPEC = prestazioni in unità SPEC = n n Õ SPEC i =1 i (media geometrica)