FormularioArchitettura degli Elaboratori: definizioni, teoremi e formule delle note, in ordine di capitolo
In questa pagina 10
I. Struttura del calcolatore
Architettura e organizzazione di un calcolatore
Definizione (architettura e organizzazione)
Architettura Organizzazione Che cos'è gli attributi visibili al programmatore, che influenzano l'esecuzione logica di un programma le unità operative e le loro connessioni che realizzano l'architettura Esempi insieme delle istruzioni, numero di bit per i dati, modalità di indirizzamento, meccanismi di I/O segnali di controllo, tecnologia della memoria, interfacce con le periferiche, circuiti usati Domanda tipo c'è un'istruzione di moltiplicazione? la moltiplicazione è fatta da un circuito dedicato o da somme ripetute?
Esempio. L'esistenza di una istruzione di moltiplicazione appartiene all'architettura; realizzarla con un circuito dedicato o con somme ripetute è una scelta di organizzazione.
Definizione (macchina di von Neumann). I primi calcolatori (ENIAC, 1946) si programmavano cambiando i collegamenti: programma cablato. L'idea di von Neumann è un hardware generico che esegue operazioni diverse a seconda dei segnali di controllo ricevuti, e di scrivere questi comandi come istruzioni memorizzate in memoria insieme ai dati (programma memorizzato).
Caratteristiche:
- dati e istruzioni nella stessa memoria, scrivibile e leggibile;
- la memoria è indirizzata per posizione, indipendentemente dal contenuto;
- le istruzioni si eseguono in sequenza, salvo salti espliciti.
Esempio. Nell'IAS una parola da bit contiene due istruzioni da bit (8 bit di codice operativo + 12 di indirizzo): con si indirizzano tutte le parole.
Legge di Moore: il numero di transistor integrabili su un chip raddoppia a intervalli regolari (circa ogni 18–24 mesi). Componenti più piccoli e vicini significano segnali che percorrono distanze minori (sono limitati dalla velocità della luce), quindi clock più alti, consumi minori per operazione e costo minore.
Esempio. Con un raddoppio ogni mesi, in anni i transistor per chip aumentano di volte.
Ciclo fetch-execute
Definizione (ciclo fetch-execute)
- Fetch (prelievo): ; la memoria legge; ; ; lunghezza dell'istruzione (in ARM e MIPS: byte).
- Execute (esecuzione): l'unità di controllo decodifica l'IR e svolge l'azione.
Esempio. Con la fase di fetch porta e ; l'execute carica in AC il contenuto della cella .
Bus e interconnessione
Proprietà (ampiezza delle linee del bus)
Linee Cosa trasportano Effetto della loro ampiezza dati i dati e le istruzioni trasferiti con 32 linee si trasferiscono 4 byte per ciclo; con un bus da 8 bit una parola da 32 bit richiede 4 trasferimenti indirizzi la sorgente o la destinazione del dato (cella di memoria o porta di I/O) con linee si indirizzano locazioni: 24 linee → 16 M locazioni, 32 linee → 4 G controllo comandi e temporizzazione —
Esempio. Con linee di indirizzo si indirizzano locazioni; con linee di dati si trasferiscono byte per ciclo.
Definizione (temporizzazione sincrona e asincrona del bus)
- Sincrona: un clock comune scandisce gli eventi; ogni operazione dura un numero intero di cicli. Semplice, ma tutti si adeguano al dispositivo più lento.
- Asincrona: un evento segue il precedente tramite segnali di handshake (es. il master alza "lettura", lo slave risponde "dato pronto"). Dispositivi lenti e veloci convivono.
Esempio. Con un bus sincrono a MHz (ciclo di ns) una operazione di cicli dura ns.
II. Rappresentazione dell'informazione
Sistemi di numerazione posizionali
Definizione (notazione posizionale in base ). In base si usano le cifre e ogni cifra pesa una potenza di che dipende dalla posizione:
Esempio. e .
Proprietà (conversione della parte intera per divisioni successive). Divisioni successive per : i resti, letti dall'ultimo al primo, sono le cifre da sinistra a destra. Funziona perché : il primo resto è la cifra meno significativa.
Esempio. in base : r , r , r , r , r , r ; letti dal basso .
Proprietà (conversione della parte frazionaria per moltiplicazioni successive). Moltiplicazioni successive per : a ogni passo la parte intera del prodotto è la cifra successiva dopo la virgola, e si prosegue con la sola parte frazionaria.
Esempio. (cifra ), (cifra ), (cifra ): .
Proprietà (conversione tra basi potenze di 2). Poiché e , ogni cifra ottale corrisponde a 3 bit e ogni cifra esadecimale a 4 bit. Si raggruppano i bit a partire dalla virgola (a sinistra per la parte intera, a destra per la frazionaria), completando con zeri.
Esempio. e .
Rappresentazione dei numeri interi con segno
Definizione (modulo e segno). Il bit più significativo è il segno (0 = positivo, 1 = negativo), gli altri bit sono il modulo.
Esempio. A bit e in modulo e segno.
Definizione (complemento a 1). Il negativo si ottiene invertendo tutti i bit di .
Esempio. A bit e in complemento a 1.
Definizione (complemento a 2). È la rappresentazione usata da tutti i processori. Il bit più significativo ha peso negativo:
Equivalentemente: un negativo è rappresentato dal numero senza segno .
Esempio. a bit vale , ed è anche .
Proprietà (opposto in complemento a 2). Opposto (vale in entrambi i versi): si invertono tutti i bit e si somma 1.
Esempio. A bit l'opposto di () è ().
Proprietà (estensione del segno). Per passare da a bit si replica il bit di segno a sinistra: su 8 bit diventa su 16 bit ; diventa . Serve per esempio quando il processore carica un byte con segno in un registro a 32 bit.
Esempio. ( su bit) diventa su bit, ancora .
Definizione (rappresentazione in eccesso K). Si memorizza come intero senza segno; di solito o .
Esempio. A bit con il valore si memorizza come .
Aritmetica binaria
Definizione (somma binaria). In colonna come in base 10, con le regole , , con riporto 1, con riporto 1.
Esempio. con riporto : ().
Formula (sottrazione in complemento a 2). : si calcola l'opposto di (inverti i bit, +1; vedi Rappresentazione dei numeri interi con segnoInteri con segno su n bit: modulo e segno, complemento a 1, complemento a 2 ed eccesso K; intervalli rappresentabili, calcolo dell'opposto, estensione del segno.Rappresentazione dei numeri interi con segno →) e si somma. In hardware: si invertono i bit di e si porta a 1 il riporto in ingresso del sommatore, così non serve un sottrattore.
Esempio. A bit : , con il riporto scartato.
Proprietà (overflow con e senza segno). Il risultato non sta negli bit. La regola dipende da come si interpretano i bit:
Interpretazione Overflow quando Bit che lo segnala senza segno esce un riporto dal MSB nella somma (nella sottrazione: manca il prestito) C (carry) complemento a 2 due operandi dello stesso segno danno un risultato di segno opposto V (overflow) Sommando due numeri di segno diverso non c'è mai overflow in complemento a 2. Equivalente: riporto entrante nel MSB riporto uscente dal MSB.
Esempio. A bit (): (senza segno vale , corretto) e (in complemento a 2 sarebbe ).
Proprietà (algoritmo di Booth). Si esaminano le coppie con inizialmente 0:
Azione 1 0 0 1 0 0, 1 1 niente poi scorrimento aritmetico a destra di A, Q, . Una sequenza di 1 consecutivi nel moltiplicatore costa una sottrazione all'inizio e una somma alla fine invece di una somma per bit.
Esempio. Con e (4 bit) l'algoritmo di Booth dà .
Definizione (divisione senza segno). Senza segno, come in colonna: a ogni passo si prova a sottrarre il divisore dal resto parziale; se il risultato è il bit del quoziente è 1, altrimenti è 0 e si ripristina il resto. Esempio : → quoziente , resto .
Esempio. ha quoziente e resto , perché .
Definizione (scorrimenti logici, aritmetici e rotazioni)
Operazione Effetto Esempio su 8 bit shift logico a sinistra di moltiplica per (se non c'è overflow) (5 → 20) shift logico a destra di divide per un senza segno (entra 0) (240 → 120) shift aritmetico a destra di divide per un numero in complemento a 2 (entra il bit di segno), arrotondando verso (−16 → −8) rotazione i bit che escono rientrano dall'altro lato (a sinistra)
Esempio. Su bit, dà (logico, ) oppure (aritmetico, ).
Numeri in virgola mobile IEEE 754
Definizione (normalizzazione). Un numero si normalizza spostando la virgola finché resta una sola cifra 1 a sinistra: ; .
Esempio. .
Formula (valore di un numero IEEE 754)
Formato Bit Segno Esponente Mantissa Bias Cifre decimali singola precisione 32 1 8 23 127 ≈ 7 doppia precisione 64 1 11 52 1023 ≈ 16
Esempio. : , , , quindi .
Proprietà (valori speciali IEEE 754)
Esponente Mantissa Significato denormalizzato: qualsiasi normalizzato (tutti 1) (es. , overflow) NaN (es. , )
Esempio. In singola precisione (, ) è e è .
Formula (massimo e minimo normalizzato in singola precisione)
- Massimo normalizzato: .
- Minimo normalizzato positivo: .
Esempio. Il pattern (, ) vale .
Formula (distanza tra float consecutivi)
- Distanza tra due float consecutivi con esponente : . Vicino a 1 è (epsilon di macchinadistanza tra 1 e il float successivo); vicino a è 2: da lì in poi non tutti gli interi sono rappresentabili.
Esempio. Vicino a la distanza è ; a vale , quindi in singola .
Codifiche binarie e informazione non numerica
Formula (bit per codificare oggetti)
- Con bit si codificano oggetti distinti; per oggetti servono bit (26 lettere → 5 bit).
Esempio. Per lettere servono bit, perché .
Formula (bit di indirizzo di una memoria). Per memorie e indirizzi si usano le potenze di 2 (spesso scritte K, M, G). Conti tipici: byte, quindi servono 24 bit di indirizzo se ogni byte ha il suo indirizzo; byte → 32 bit.
Esempio. byte: servono bit di indirizzo.
Definizione (codice BCD). BCD (Binary Coded Decimal): ogni cifra decimale su 4 bit. (in binario puro sarebbe ). Spreca 6 configurazioni su 16 ma evita le conversioni: si usa in display e calcolatrici.
Esempio. , mentre in binario puro è .
Formula (codice Gray). Codice Gray: due numeri consecutivi differiscono per un solo bit. Si ottiene da binario come .
Esempio. (): .
Definizione (ASCII, Unicode e UTF-8)
- ASCII: 7 bit, 128 simboli.
'0'–'9'= 48–57 (0x30–0x39),'A'= 65 (0x41),'a'= 97 (0x61). Maiuscola e minuscola differiscono solo per il bit 5 (valore 32); la cifra ha codice .- Unicode: assegna un numero (code point) a ogni carattere di tutte le scritture, da U+0000 a U+10FFFF.
- UTF-8: codifica i code point in 1–4 byte; i caratteri ASCII restano su 1 byte identico.
'è'= U+00E8 → 2 byteC3 A8.
Esempio. La cifra ha codice ASCII ; è (U+00E8) in UTF-8 è C3 A8.
Definizione (little e big endian). Una parola di 4 byte occupa 4 indirizzi consecutivi. Per
0x12345678all'indirizzo 100:
Indirizzo 100 101 102 103 Big endian (byte più significativo all'indirizzo minore) 12 34 56 78 Little endian (byte meno significativo all'indirizzo minore) 78 56 34 12
Esempio. 0x12345678 in little endian occupa, a partire dall'indirizzo più basso, i byte 78 56 34 12.
Definizione (bit di parità). Bit di parità (): si sceglie il bit in modo che il numero totale di 1 sia pari. Rileva un numero dispari di errori, non li corregge. Dati (quattro 1) → parità 0.
Esempio. 1011 0010 ha quattro 1 (parità ); 1011 0011 ne ha cinque (parità ).
Formula (bit di controllo del codice di Hamming). Codice di Hamming (correzione di un errore singolo, SEC). Servono bit di controllo con
perché la sindrome di bit deve distinguere "nessun errore" e ciascuna delle posizioni.
Esempio. Per bit di dati , perché mentre darebbe .
Definizione (sindrome di Hamming)
- In lettura si ricalcolano i bit di controllo dai dati letti e si fa lo XOR con quelli memorizzati: la sindrome. Se è non ci sono errori; altrimenti il suo valore è la posizione del bit sbagliato, che si inverte.
Esempio. Con sindrome è sbagliato il bit in posizione , che va invertito.
III. Reti logiche
Algebra di Boole e porte logiche
Definizione (porte AND, OR, NAND, NOR, XOR e XNOR)
AND OR NAND NOR XOR XNOR 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 1 1 1 0 0 0 1
Esempio. Con e : AND , OR , NAND , NOR , XOR , XNOR .
Proprietà (algebra di Boole e De Morgan)
Proprietà Forma AND Forma OR identità elemento nullo idempotenza complemento commutativa associativa distributiva assorbimento De Morgan
Esempio. : per e entrambi i membri valgono .
Proprietà (completezza della NAND). {AND, OR, NOT} basta per scrivere qualsiasi funzione (vedi le forme canoniche in Reti combinatorie e mappe di KarnaughRete combinatoria (uscite funzione dei soli ingressi attuali); mintermini e maxtermini, forme canoniche SOP e POS; mappe di Karnaugh a 3 e 4 variabili con esempi svolti; condizioni di indifferenza; costo e ritardo di una rete a due livelli.Reti combinatorie e mappe di Karnaugh →). Anche la sola NAND basta, e così la sola NOR:
- NOT: (NAND con gli ingressi uniti);
- AND: (NAND seguita da un NOT fatto con NAND);
- OR: (De Morgan: NAND degli ingressi negati).
Esempio. : per e si ha .
Reti combinatorie e mappe di Karnaugh
Definizione (mintermine, SOP, maxtermine e POS)
- Mintermine: prodotto (AND) di tutte le variabili, dirette o negate, che vale 1 su una sola riga. Per la riga è (, dal numero binario 011).
- Somma di prodotti (SOP): OR dei mintermini delle righe in cui .
- Maxtermine: somma (OR) che vale 0 su una sola riga: per è .
- Prodotto di somme (POS): AND dei maxtermini delle righe in cui .
Esempio. Per la riga (): mintermine e maxtermine .
Definizione (mappa di Karnaugh e regole di raggruppamento). La tabella di verità disposta in una griglia in cui righe e colonne seguono il codice Gray (00, 01, 11, 10): due celle adiacenti differiscono per una sola variabile, e sono adiacenti anche i bordi opposti (la mappa "si chiude" a cilindro e a toro).
Regole:
- si raggruppano gli 1 in rettangoli di 1, 2, 4, 8, … celle adiacenti (potenze di 2);
- gruppi più grandi possibile e meno gruppi possibile; un 1 può stare in più gruppi;
- ogni gruppo dà un prodotto con le sole variabili che non cambiano nel gruppo; un gruppo di celle elimina variabili.
Esempio. A variabili le celle () hanno costanti e : il gruppo dà .
Proprietà (condizioni di indifferenza e POS). Se alcune combinazioni di ingresso non possono presentarsi (es. i codici 1010–1111 in BCD), in quelle celle si mette una X (don't care) e si usa come 1 o 0, a seconda di cosa allarga i gruppi.
Per la forma POS si raggruppano gli 0 nello stesso modo e si scrive il prodotto di somme (variabile negata se nel gruppo vale 1).
Esempio. Con una cifra BCD le celle – sono X e si possono usare come per allargare i gruppi.
Proprietà (ritardo di una SOP). Una SOP si realizza con due livelli di porte (AND poi OR): il ritardo è di circa due porte, qualsiasi sia la funzione. Semplificare riduce il numero di porte e di ingressi, cioè area e consumo. Con molte variabili (più di 5–6) le mappe diventano scomode e si usano algoritmi (Quine-McCluskey, strumenti di sintesi).
Esempio. Con porte da ps una SOP a due livelli ritarda circa ps, qualunque sia la funzione.
Circuiti combinatori notevoli
Formula (multiplexer 2:1). Sceglie uno tra ingressi dati in base a ingressi di selezione. MUX 2:1:
Esempio. Con , e : .
Formula (multiplexer 4:1). MUX 4:1 con selezione : . Con un MUX a ingressi si realizza qualsiasi funzione di variabili, mettendo sugli ingressi dati i valori della tabella di verità. Un MUX a 32 bit sono 32 MUX in parallelo con la stessa selezione: nel datapath sceglie per esempio se il secondo operando dell'ALU è un registro o una costante.
Esempio. Con resta solo il termine , quindi .
Definizione (decoder ed encoder)
- Decoder : attiva una sola delle uscite, quella il cui numero è l'ingresso. Decoder 2→4: , , , . Usi: selezionare la cella di memoria o il chip dall'indirizzo, il registro di destinazione dal campo dell'istruzione.
- Encoder : l'inverso, dà il numero dell'unico ingresso attivo. L'encoder con priorità dà il numero dell'ingresso attivo più importante (usato per scegliere tra più richieste di interrupt).
Esempio. Decoder con : e .
Formula (semisommatore). Semisommatore (half adder): somma due bit.
Esempio. Con : e , cioè .
Formula (sommatore completo)
Esempio. Con : e , cioè .
Formula (ritardo del sommatore a propagazione del riporto). Sommatore a propagazione del riporto (ripple carry) a bit: full adder in cascata, il di ognuno è il del successivo. Il bit è corretto solo quando è arrivato il riporto dal bit : il ritardo cresce linearmente con (circa porte). Se una porta ritarda 20 ps, a 32 bit servono circa ps, cioè più di un ciclo di un clock a 1 GHz.
Esempio. A bit con porte da ps il ritardo è circa ps.
Definizione (anticipo del riporto). Anticipo del riporto (carry lookahead): si definiscono per ogni bit (il bit genera un riporto) e (lo propaga), e si calcolano i riporti direttamente dagli ingressi:
Esempio. Se (cioè ) allora qualunque sia .
Proprietà (sommatore-sottrattore). Un solo sommatore fa anche la sottrazione in complemento a 2 (vedi Aritmetica binariaSomma e sottrazione in binario, overflow per senza segno (riporto) e per complemento a 2 (segni), flag del processore, moltiplicazione per somme e scorrimenti, algoritmo di Booth, divisione, shift logici e aritmetici.Aritmetica binaria →): ogni bit di passa per una XOR con il segnale , che è anche il riporto iniziale.
- : , → .
- : , → .
Esempio. A bit con : .
Formula (overflow in complemento a 2). Overflow (complemento a 2): , XOR tra il riporto che entra e quello che esce dal bit di segno.
Esempio. A bit : il riporto entrante nel segno è , quello uscente , quindi .
Formula (comparatore di uguaglianza). Uguaglianza di due numeri di bit: , cioè NOR delle XOR bit a bit. Il confronto di ordine si fa di solito con una sottrazione guardando i flag N, Z, C, V.
Esempio. Con tutte le XOR valgono , quindi .
Latch e flip-flop
Definizione (latch SR). Due porte NOR incrociate: , .
Effetto 0 0 mantiene lo stato (memoria) 1 0 1 set 0 1 0 reset 1 1 — proibito: entrambe le uscite a 0, e al ritorno a 00 lo stato è imprevedibile
Esempio. Con , si ha (set); con il latch conserva ; con la combinazione è proibita.
Definizione (latch D). Latch D (data): un solo ingresso, e , così lo stato proibito non può presentarsi.
Esempio. Con e si ha , e quindi ; con lo stato non cambia.
Definizione (flip-flop D master-slave). Cambia stato solo sul fronte del clock (di salita o di discesa). Realizzazione master-slave: due latch D in cascata con clock opposti.
- : il master è trasparente e segue ; lo slave è bloccato.
- Quando scende: il master si blocca e lo slave copia il suo valore.
Risultato: prende il valore che aveva all'istante del fronte, e resta fermo per tutto il ciclo.
Esempio. Se al fronte attivo, dopo il fronte e resta tale per tutto il ciclo anche se torna a .
Formula (flip-flop JK). Il JK è un SR in cui la combinazione 11 fa commutare lo stato invece di essere proibita: .
Esempio. Con e : (commuta).
Formula (flip-flop T). Il flip-flop T (toggle) è un JK con : se commuta a ogni fronte, se mantiene. . È la base dei contatoriRegistro parallelo a n bit con caricamento abilitato; banco dei registri con due porte di lettura e una di scrittura; registri a scorrimento; contatori sincroni e asincroni (ripple), contatore modulo N con esempio svolto.Registri e contatori →.
Esempio. Con e : .
Formula (periodo minimo di clock). In un sistema sincrono tutti i flip-flop ricevono lo stesso clock. Tra due flip-flop c'è una rete combinatoria: il segnale deve attraversarla prima del fronte successivo.
Esempio. Con ps, percorso combinatorio ps e setup ps: ps, cioè GHz.
Reti sequenziali e automi a stati finiti
Definizione (rete sequenziale sincrona). Una rete sequenziale sincrona è fatta di:
- un registro di stato di flip-flop D (vedi Latch e flip-flopReti sequenziali e retroazione; latch SR con porte NOR e stato proibito; latch SR e D abilitati dal clock; flip-flop D master-slave sensibile al fronte; flip-flop JK e T; tempi di setup e hold; clock e periodo minimo.Latch e flip-flop →), che può ricordare fino a stati;
- una rete combinatoria di stato prossimo: dagli ingressi e dallo stato attuale calcola ;
- una rete combinatoria di uscita .
A ogni fronte del clock lo stato diventa . Il comportamento si descrive con un automa a stati finiti (diagramma degli stati: un nodo per stato, un arco per ogni transizione etichettato con l'ingresso).
Esempio. Con flip-flop D il registro di stato può ricordare fino a stati.
Definizione (automi di Moore e di Mealy)
Tipo Uscita Conseguenza Moore dipende solo dallo stato: uscita stabile per tutto il ciclo, cambia solo dopo il fronte Mealy dipende da stato e ingressi: di solito servono meno stati, ma l'uscita risente subito degli ingressi
Esempio. Per riconoscere due consecutivi un automa di Moore usa stati () con solo in .
Proprietà (procedimento di sintesi)
- Diagramma degli stati dalla specifica.
- Tabella degli stati (stato attuale, ingresso → stato prossimo, uscita).
- Codifica degli stati in binario ( flip-flop per stati).
- Tabella di verità delle funzioni di stato prossimo e di uscita, semplificazione con le mappe di KarnaughRete combinatoria (uscite funzione dei soli ingressi attuali); mintermini e maxtermini, forme canoniche SOP e POS; mappe di Karnaugh a 3 e 4 variabili con esempi svolti; condizioni di indifferenza; costo e ritardo di una rete a due livelli.Reti combinatorie e mappe di Karnaugh →.
- Disegno: flip-flop + reti combinatorie.
Esempio. Per stati servono flip-flop.
Formula (riconoscitore di due 1 consecutivi)
Esempio. Con () e : e , nuovo stato () con .
Registri e contatori
Definizione (registro parallelo con Load). flip-flop D (vedi Latch e flip-flopReti sequenziali e retroazione; latch SR con porte NOR e stato proibito; latch SR e D abilitati dal clock; flip-flop D master-slave sensibile al fronte; flip-flop JK e T; tempi di setup e hold; clock e periodo minimo.Latch e flip-flop →) con lo stesso clock memorizzano una parola di bit. Per caricare solo quando serve si aggiunge un segnale Load: davanti a ogni flip-flop un multiplexerMultiplexer, decodificatore e codificatore; semisommatore e sommatore completo; sommatore a propagazione del riporto e suo ritardo, idea dell'anticipo del riporto; sommatore-sottrattore in complemento a 2 con rilevazione dell'overflow; comparatore.Circuiti combinatori notevoli → sceglie tra il nuovo dato (Load = 1) e il valore attuale (Load = 0). PC, IR, MAR, MBR sono registri di questo tipo.
Esempio. Con e dato il registro a bit contiene dopo il fronte; con conserva il valore.
Definizione (registro a scorrimento). L'uscita di ogni flip-flop è l'ingresso del successivo: a ogni fronte il contenuto scorre di una posizione.
Esempio. Da con ingresso seriale : .
Definizione (contatore asincrono ripple). Contatore asincrono (ripple): flip-flop T con ; il clock del primo è il clock del sistema, quello di ognuno dei successivi è l'uscita del precedente. Semplice, ma i bit cambiano uno dopo l'altro: per un attimo compaiono valori intermedi sbagliati, e il ritardo cresce con il numero di bit.
Esempio. In un ripple a bit il passaggio attraversa per un attimo e .
Formula (contatore sincrono). Contatore sincrono: tutti i flip-flop hanno lo stesso clock. Il bit commuta quando tutti i bit meno significativi valgono 1:
Esempio. Da : , commutano tutti i bit e si passa a .
Proprietà (contatore modulo N). Per contare da 0 a si riporta a zero il contatore quando arriva a (sincrono) o si progetta come automa (vedi Reti sequenziali e automi a stati finitiModello di una rete sequenziale sincrona (stato in flip-flop, logica di stato prossimo e di uscita); automi di Moore e di Mealy; procedimento di sintesi con esempio svolto di un riconoscitore della sequenza 11.Reti sequenziali e automi a stati finiti →).
Esempio. Per contare da a () servono bit e dopo si torna a .
Formula (frequenza del bit di un contatore). Usi: contatore di programma (il PC è un registro con incremento), divisori di frequenza (il bit di un contatore binario ha frequenza ), temporizzatori.
Esempio. Con clock a MHz il bit di un contatore binario ha frequenza kHz.
IV. Architettura del processore
Struttura interna della CPU e registri
Proprietà (numero di registri e bit nell'istruzione). Più registri significa meno accessi alla memoria, ma più bit nell'istruzione per indicarli (con 16 registri servono 4 bit per operando, con 32 ne servono 5) e più stato da salvare a ogni chiamata o interruzione. Le architetture RISC ne hanno tipicamente 16–32 (vedi Architetture RISC e CISCMotivazioni del CISC (divario semantico) e dati sull'esecuzione dei programmi; caratteristiche delle architetture RISC; finestre di registri; allocazione dei registri con colorazione di un grafo; confronto e situazione attuale (MIPS, ARM, x86).Architetture RISC e CISC →); ARM a 32 bit ne ha 16, MIPS 32.
Esempio. Con registri servono bit per operando, con registri bit.
Formula (ampiezza dei registri e spazio di indirizzamento). Ampiezza: i registri per gli indirizzi devono contenere un indirizzo intero: con registri a 32 bit si indirizzano byte = 4 GB, a 64 bit .
Esempio. Registri a bit indirizzano byte GB.
Definizione (parola di stato PSW). Contenuto tipico della PSW:
- flag: N (segno, bit più significativo del risultato), Z (zero), C (riporto), V (overflow) — vedi Aritmetica binariaSomma e sottrazione in binario, overflow per senza segno (riporto) e per complemento a 2 (segni), flag del processore, moltiplicazione per somme e scorrimenti, algoritmo di Booth, divisione, shift logici e aritmetici.Aritmetica binaria →;
- abilitazione delle interruzioni;
- bit di supervisore (modo privilegiato): indica se la CPU sta eseguendo codice del sistema operativo. Solo in questo modo sono permesse le istruzioni privilegiate (gestione della memoria, I/O, modifica della PSW stessa); un programma utente che le tenta provoca un'eccezione.
Esempio. A bit in complemento a 2, dà , , , .
Instruction Set Architecture
Definizione (ISA). L'insieme delle istruzioni (ISA, Instruction Set Architecture) è il confine tra hardware e software: è tutto ciò che un programma in linguaggio macchina può usare. Due processori con la stessa ISA eseguono lo stesso codice, anche se sono organizzati in modo diverso (vedi Architettura e organizzazione di un calcolatoreDifferenza tra architettura (ciò che vede il programmatore) e organizzazione (come è realizzata); struttura e funzione; le quattro funzioni e i quattro componenti; macchina di von Neumann e IAS; generazioni tecnologiche e legge di Moore.Architettura e organizzazione di un calcolatore →).
Esempio. ADD r1, r2, r3 con r2=5 e r3=7 lascia r1=12: è un'istruzione dell'ISA ARM, qualunque sia la sua organizzazione interna.
Definizione (istruzioni a 0, 1, 2 e 3 indirizzi). Quanti operandi espliciti ha un'istruzione aritmetica. Esempio: , variabili in memoria.
Esempio. SUB Y, A, B ha 3 indirizzi (destinazione e due sorgenti); SUB A, B ne ha 2, perché la destinazione coincide con il primo operando.
Definizione (architettura load/store). In ARM e MIPS solo le istruzioni di load e store accedono alla memoria; tutte le operazioni aritmetiche e logiche lavorano tra registri. Lo stesso calcolo in ARM (variabili già caricate in
r1–r5):SUB r0, r1, r2 @ r0 = A - B MUL r6, r4, r5 @ r6 = D * E ADD r6, r6, r3 @ r6 = C + D*E SDIV r0, r0, r6 @ r0 = Y (SDIV esiste solo nelle versioni più recenti dell'ISA)
Esempio. Se r2 punta a una cella che contiene , LDR r1, [r2] carica in r1 e ADD r0, r1, r1 lascia r0=14.
Formato delle istruzioni e modalità di indirizzamento
Definizione (modalità di indirizzamento). L'indirizzo effettivo (EA) è l'indirizzo in memoria dell'operando. Notazione: = campo indirizzo dell'istruzione, = registro indicato, = contenuto di .
Modalità Operando Pro Contro immediato stesso nessun accesso alla memoria valore limitato dai bit del campo diretto , EA = semplice spazio di indirizzamento limitato dal campo indiretto , EA = spazio ampio due accessi alla memoria a registro veloce, pochi bit pochi registri indiretto a registro , EA = spazio ampio, un solo accesso serve caricare prima il registro con spiazzamento (base + offset) EA = flessibile somma in più relativo al PC EA = codice rilocabile, salti corti portata limitata indicizzato e scalato EA = accesso ad array con elementi di byte più complesso a pila operando in cima allo stack, implicito istruzioni corte accesso solo alla cima
Esempio. Con , e : immediato , diretto , indiretto .
Formula (indice scalato). Indice scalato (es. Pentium): il fattore permette di scorrere in modo uniforme array di byte, mezze parole, parole, doppie parole. In ARM:
LDR r0, [r1, r2, LSL #2]legge l'elementor2di un array di parole che inizia ar1.
Esempio. Con r1=0x2000 e r2=3, LDR r0, [r1, r2, LSL #2] legge la parola all'indirizzo .
Definizione (formato fisso e variabile)
- Formato fisso (RISC: tutte le istruzioni di 32 bit): decodifica semplice e veloce, adatto alla PipelineIdea della catena di montaggio; pipeline a 5 stadi IF, ID, EX, MEM, WB; tempo di ciclo, tempo per n istruzioni in una pipeline a k stadi e speedup con esempi svolti; registri di pipeline; scrittura e lettura dei registri nello stesso ciclo; limiti (stadi sbilanciati, hazard).Pipeline →.
- Formato variabile (x86: da 1 a 15 byte): codice compatto, decodifica complessa.
Esempio. ARM e MIPS usano istruzioni fisse di bit (una ogni byte), x86 istruzioni da a byte.
Definizione (formati MIPS R, I e J)
Formato Campi (bit) Uso R op (6) · rs (5) · rt (5) · rd (5) · shamt (5) · funct (6) operazioni tra registri: add $1, $2, $3I op (6) · rs (5) · rt (5) · immediato (16) immediati, load/store, salti condizionati: lw $8, 0x1200($9)J op (6) · indirizzo (26) salto incondizionato
Esempio. Nel formato R bit; ogni registro usa bit perché i registri sono .
Definizione (formato ARM delle istruzioni di elaborazione dati)
cond (4) 00 I (1) opcode (4) S (1) Rn (4) Rd (4) operando 2 (12)
- cond: condizione di esecuzione (tutte le istruzioni ARM a 32 bit possono essere condizionate, vedi Strutture di controllo in assembly ARMSalti B e condizionati, codici di condizione con e senza segno; traduzione di if, if-else, while, for e do-while da C ad ARM; esecuzione condizionata per eliminare salti brevi; switch con tabella di salto.Strutture di controllo in assembly ARM →).
- S: se 1 l'istruzione aggiorna i flag.
- Rn, Rd: 4 bit perché i registri sono 16.
- operando 2: un registro eventualmente scalato, oppure (I = 1) una costante di 8 bit ruotata a destra di un numero pari di posizioni (4 bit di rotazione × 2). Per questo
MOV r0, #0xFF000000è codificabile (0xFF ruotato) maMOV r0, #0x101no.
Esempio. MOV r0, #0xFF000000 è codificabile: 0xFF ruotato a destra di posizioni (campo di rotazione , ) e dà r0=0xFF000000.
Architetture RISC e CISC
Definizione (CISC). Negli anni '70 i linguaggi ad alto livello si allontanavano dal linguaggio macchina (divario semantico). La risposta CISC (Complex Instruction Set Computer, es. VAX, x86): molte istruzioni, molte modalità di indirizzamento, istruzioni che fanno direttamente operazioni da linguaggio ad alto livello (copie di stringhe, chiamate di procedura con salvataggio del contesto). Obiettivi: compilatori più semplici, programmi più corti, più funzioni in microcodice (vedi Unità di controlloCompiti dell'unità di controllo e micro-operazioni; segnali di controllo del datapath con tabella per le classi di istruzioni; controllo cablato (combinatorio o a stati finiti) e controllo microprogrammato (memoria di controllo, microistruzioni orizzontali e verticali); confronto.Unità di controllo →).
Esempio. In x86 una sola istruzione somma un operando in memoria a un registro; in ARM servono LDR r2, [r1] e ADD r0, r0, r2 (con r0=3 e [r1]=5 si ottiene r0=8).
Definizione (architettura RISC). Reduced Instruction Set Computer (es. MIPS, ARM, RISC-V):
- un'istruzione per ciclo (a regime, in PipelineIdea della catena di montaggio; pipeline a 5 stadi IF, ID, EX, MEM, WB; tempo di ciclo, tempo per n istruzioni in una pipeline a k stadi e speedup con esempi svolti; registri di pipeline; scrittura e lettura dei registri nello stesso ciclo; limiti (stadi sbilanciati, hazard).Pipeline →);
- operazioni registro-registro, solo load e store accedono alla memoria (architettura load/store);
- poche modalità di indirizzamento semplici;
- formato fisso (32 bit) e pochi formati, decodifica semplice;
- molti registri (16–32 o più);
- unità di controllo cablata;
- il lavoro di ottimizzazione passa al compilatore (allocazione dei registri, riordino delle istruzioni).
Esempio. In un RISC a formato fisso di bit con registri ogni campo registro occupa bit.
Definizione (allocazione dei registri con colorazione di un grafo). Soluzione software: il compilatore assegna le variabili ai registri fisici. Costruisce un grafo in cui ogni nodo è una variabile (o valore temporaneo) e un arco collega due variabili vive contemporaneamente. Assegnare registri = colorare il grafo con colori in modo che nodi adiacenti abbiano colori diversi. Le variabili che non si riescono a colorare vengono tenute in memoria (spill).
Esempio. Se - e - sono in conflitto ma - no, bastano colori: e .
L'architettura ARM
Definizione (registri ARM a 32 bit). 16 registri da 32 bit visibili,
r0–r15:
Registro Nome Uso r0–r3argomenti e valore di ritorno delle funzioni, temporanei r4–r11variabili; vanno preservati dalle funzioni chiamate r12IP temporaneo r13SP stack pointer r14LR link register: indirizzo di ritorno dopo BLr15PC program counter
Esempio. Chiamando f(5, 7) gli argomenti arrivano in r0=5 e r1=7; r13 è lo stack pointer, r14 il link register e r15 il program counter.
Definizione (registro di stato CPSR). CPSR (Current Program Status Register): flag N, Z, C, V nei bit 31–28 (vedi Aritmetica binariaSomma e sottrazione in binario, overflow per senza segno (riporto) e per complemento a 2 (segni), flag del processore, moltiplicazione per somme e scorrimenti, algoritmo di Booth, divisione, shift logici e aritmetici.Aritmetica binaria →), bit di disabilitazione delle interruzioni, bit del modo corrente.
Esempio. Dopo CMP r0, r0 il flag (bit del CPSR) vale .
Definizione (modello di memoria ARM)
- Indirizzi di 32 bit al byte: byte = 4 GB indirizzabili.
- Parole di 4 byte, di norma allineate a indirizzi multipli di 4.
- Di solito little endian (vedi Codifiche binarie e informazione non numericaBit, byte e multipli (potenze di 2 e di 10); codici BCD e Gray; caratteri ASCII, Unicode e UTF-8; ordine dei byte (little e big endian); bit di parità e codice di Hamming per rilevare e correggere errori.Codifiche binarie e informazione non numerica →).
- Architettura load/store: solo
LDR/STRe varianti accedono alla memoria (vedi Istruzioni ARM di accesso alla memoriaLDR e STR per parole, byte e mezze parole con e senza segno; modalità di indirizzamento con offset immediato o registro scalato, pre-indicizzata con write-back e post-indicizzata, con esempi di indirizzo effettivo; caricamento di indirizzi e costanti; LDM e STM.Istruzioni ARM di accesso alla memoria →).
Esempio. Con indirizzi di bit al byte si indirizzano byte GB; una parola allineata sta a un indirizzo multiplo di (per esempio ).
Definizione (esecuzione condizionata)
- Esecuzione condizionata: quasi ogni istruzione può avere un suffisso di condizione e viene eseguita solo se i flag la soddisfano:
ADDEQ r0, r0, #1somma solo se Z = 1. Evita molti salti brevi.
Esempio. Dopo CMP r1, r1 il flag vale e ADDEQ r0, r0, #1 porta r0 da a ; con non farebbe nulla.
Definizione (secondo operando flessibile)
- Secondo operando flessibile: costante immediata o registro eventualmente scalato da uno shift, nella stessa istruzione:
ADD r0, r1, r2, LSL #2calcola (vedi Istruzioni ARM di elaborazione datiIstruzioni aritmetiche (ADD, SUB, RSB, ADC), logiche (AND, ORR, EOR, BIC, MVN), di spostamento (MOV), moltiplicazione (MUL, MLA); secondo operando immediato o registro scalato con LSL, LSR, ASR, ROR; aggiornamento dei flag con S, CMP e TST; esempi di traduzione di espressioni C.Istruzioni ARM di elaborazione dati →).
Esempio. Con r1=100 e r2=3, ADD r0, r1, r2, LSL #2 calcola .
V. Programmazione assembly ARM
Istruzioni ARM di elaborazione dati
Definizione (istruzioni aritmetiche e logiche ARM)
Istruzione Effetto ADD Rd, Rn, Op2ADC Rd, Rn, Op2(somma con riporto) SUB Rd, Rn, Op2SBC Rd, Rn, Op2RSB Rd, Rn, Op2(sottrazione inversa) AND Rd, Rn, Op2AND bit a bit ORR Rd, Rn, Op2OR bit a bit EOR Rd, Rn, Op2XOR bit a bit BIC Rd, Rn, Op2(azzera i bit indicati) MOV Rd, Op2MVN Rd, Op2MUL Rd, Rm, Rs(32 bit bassi del prodotto) MLA Rd, Rm, Rs, Rn
Esempio. Con r1=10 e r2=3: SUB r0, r1, r2 dà , RSB r0, r1, r2 dà (0xFFFFFFF9) e BIC r0, r1, #2 dà .
Definizione (secondo operando delle istruzioni ARM)
- Immediato
#n: 8 bit ruotati di un numero pari di posizioni (vedi Formato delle istruzioni e modalità di indirizzamentoModalità di indirizzamento (immediato, diretto, indiretto, a registro, indiretto a registro, con spiazzamento, relativo al PC, indicizzato e scalato, a pila) con indirizzo effettivo ed esempi; formati fissi e variabili; i formati R, I e J di MIPS e il formato a 32 bit di ARM con il calcolo dei campi.Formato delle istruzioni e modalità di indirizzamento →). Per costanti qualsiasi si usa la pseudo-istruzioneLDR r0, =0x12345678, che l'assemblatore traduce in un caricamento da una tabella di costanti, oppure la coppiaMOVW/MOVT(16 bit bassi e alti).- Registro scalato:
Rm, LSL #n(shift logico a sinistra),LSR #n(logico a destra),ASR #n(aritmetico a destra),ROR #n(rotazione); lo scorrimento può essere anche di un numero di posizioni contenuto in un registro (Rm, LSL Rs). Lo scorrimento è gratuito: avviene nello stesso ciclo, nel barrel shifter prima dell'ALU.
Esempio. Con r1=6, ADD r0, r1, r1, LSL #2 calcola in una sola istruzione.
Definizione (aggiornamento dei flag: S, CMP e TST)
- Con il suffisso S l'istruzione aggiorna N, Z, C, V:
SUBS r0, r0, #1decrementa e imposta Z quando arriva a 0.CMP Rn, Op2calcola e aggiorna i flag senza salvare il risultato;CMNfa lo stesso con .TST Rn, Op2fa l'AND e aggiorna N e Z (verifica di bit);TEQfa lo XOR (uguaglianza).
Esempio. Con r0=0x7FFFFFFF, ADDS r1, r0, #1 dà r1=0x80000000 con , , , .
Proprietà (operazioni sui bit con ORR, BIC e EOR). Operazioni sui bit: impostare il bit 3 di
r0→ORR r0, r0, #8; azzerarlo →BIC r0, r0, #8; invertirlo →EOR r0, r0, #8; estrarre il byte 1 →AND r1, r0, #0xFF00poiMOV r1, r1, LSR #8.
Esempio. Con r0=5 (0101) ORR r0, r0, #8 dà ; con r0=13 (1101) BIC r0, r0, #8 dà ed EOR r0, r0, #8 dà .
Istruzioni ARM di accesso alla memoria
Definizione (istruzioni LDR e STR)
Istruzione Effetto LDR Rd, [ind]carica una parola (4 byte) STR Rd, [ind]salva una parola LDRB/STRBbyte; LDRBestende con zeri a 32 bitLDRSBbyte con segno, esteso con il segno LDRH/STRHmezza parola (16 bit), estesa con zeri LDRSHmezza parola con segno
Esempio. Se il byte in memoria è 0xF0: LDRB r0, [r1] dà r0=0x000000F0 e LDRSB r0, [r1] dà r0=0xFFFFFFF0.
Definizione (modalità di indirizzamento di LDR e STR)
Sintassi Indirizzo effettivo r1dopo[r1]0x1000 invariato [r1, #8]0x1008 invariato [r1, #-4]0x0FFC invariato [r1, r2]0x1003 invariato [r1, r2, LSL #2]0x1000 + 12 = 0x100C invariato [r1, #4]!(pre-indicizzato con write-back)0x1004 0x1004 [r1], #4(post-indicizzato)0x1000 0x1004
- L'offset immediato per
LDR/STRdi parola o byte è di 12 bit (±4095).- Pre-indicizzato
!: calcola l'indirizzo, accede, poi aggiorna la base.- Post-indicizzato: accede all'indirizzo della base, poi la aggiorna. Comodo per scorrere un array:
LDR r0, [r1], #4legge l'elemento e fa avanzare il puntatore.LSL #2sull'indice moltiplica per 4: indice di elemento → offset in byte per un array di parole.
Esempio. Con r1=0x1000: LDR r0, [r1, #4]! legge a 0x1004 e lascia r1=0x1004; LDR r0, [r1], #4 legge a 0x1000 e lascia r1=0x1004.
Definizione (trasferimenti multipli LDM e STM).
LDM/STMcaricano o salvano una lista di registri in posizioni consecutive. Suffissi: IA (increment after), IB, DA, DB (decrement before).
Esempio. STMDB sp!, {r4-r6, lr} salva registri e sottrae da sp.
Strutture di controllo in assembly ARM
Definizione (salti B e B{cond})
B etichetta: salto incondizionato (relativo al PC, ±32 MB).B{cond} etichetta: salta solo se la condizione sui flag è vera. I flag si impostano conCMPo con un'istruzione con suffissoS(vedi Istruzioni ARM di elaborazione datiIstruzioni aritmetiche (ADD, SUB, RSB, ADC), logiche (AND, ORR, EOR, BIC, MVN), di spostamento (MOV), moltiplicazione (MUL, MLA); secondo operando immediato o registro scalato con LSL, LSR, ASR, ROR; aggiornamento dei flag con S, CMP e TST; esempi di traduzione di espressioni C.Istruzioni ARM di elaborazione dati →).
Esempio. Dopo CMP r0, r1, BEQ fine salta solo se r0=r1; con r0=3 e r1=4 l'istruzione successiva viene eseguita.
Definizione (codici di condizione con e senza segno)
Suffisso Significato Flag Tipo EQ/NEuguale / diverso Z = 1 / Z = 0 entrambi GT/GEmaggiore / maggiore o uguale Z = 0 e N = V / N = V con segno LT/LEminore / minore o uguale N ≠ V / Z = 1 o N ≠ V con segno HI/HS(=CS)maggiore / maggiore o uguale C = 1 e Z = 0 / C = 1 senza segno LO(=CC) /LSminore / minore o uguale C = 0 / C = 0 o Z = 1 senza segno MI/PLnegativo / positivo o zero N = 1 / N = 0 VS/VCoverflow / niente overflow V = 1 / V = 0
Esempio. Con r0=0xFFFFFFFF e r1=1, CMP r0, r1 rende vere LT ( con segno) e HI ( senza segno).
Stack e chiamata di funzioni in ARM
Definizione (BL e BX LR)
BL funzione(branch with link): salva inLR(r14) l'indirizzo dell'istruzione successiva e salta.BX LR(oMOV pc, lr): torna al chiamante.
Esempio. Se BL f sta all'indirizzo 0x1000, LR riceve 0x1004 (l'istruzione successiva) e BX lr in f riporta il controllo lì.
Definizione (convenzione di chiamata AAPCS)
Registri Regola r0–r3primi 4 argomenti; r0(er1per valori a 64 bit) contiene il risultato. La funzione chiamata può modificarli liberamente (caller-saved: se il chiamante ne ha bisogno dopo la chiamata, li salva lui)r4–r11callee-saved: se la funzione li usa, deve salvarli all'inizio e ripristinarli prima di tornare r12temporaneo spdeve avere lo stesso valore all'ingresso e all'uscita; allineato a 8 byte alle chiamate lrindirizzo di ritorno Dal quinto argomento in poi si passano sullo stack.
Esempio. Per somma3(1, 2, 3): r0=1, r1=2, r2=3, e il risultato torna in r0=6.
Definizione (stack discendente pieno: PUSH e POP). Area di memoria gestita come pila. In ARM è discendente pieno (full descending): cresce verso indirizzi minori e
sppunta all'ultimo elemento inserito.
PUSH {r4, lr}=STMDB sp!, {r4, lr}: , poi salvar4in elrin .POP {r4, pc}=LDMIA sp!, {r4, pc}: ricaricar4e mette inpcil vecchiolr(quindi ritorna), .
Esempio. Con sp=0x8000, PUSH {r4, lr} porta sp a 0x7FF8, salva r4 in [0x7FF8] e lr in [0x7FFC].
Array e strutture dati in assembly ARM
Formula (indirizzo dell'elemento di un array). Un array di elementi di byte occupa byte consecutivi. L'elemento sta all'indirizzo
Esempio. Con a = {3, -1, 7, 2, 5} all'indirizzo 0x2000, LDR r0, [r1, r2, LSL #2] con r2=3 legge l'indirizzo e porta r0=2.
Definizione (stringa C e lunghezza). Una stringa C è un array di byte terminato da 0. Lunghezza (
strlen):strlen: MOV r1, r0 @ r1 scorre la stringa, r0 = inizio ciclo: LDRB r2, [r1], #1 CMP r2, #0 BNE ciclo SUB r0, r1, r0 SUB r0, r0, #1 @ r1 ha superato anche il terminatore BX lr
Esempio. Con la stringa "ciao" il ciclo di strlen legge byte (terminatore compreso) e restituisce .
Formula (indirizzo di un elemento di una matrice per righe). Una matrice
int m[R][C]è memorizzata per righe: l'elemento sta a
Esempio. Con C = 3, m[2][1] sta a base + base + 28.
Definizione (campi di una struct). Dimensione totale 12 byte. Con
r0= indirizzo della struct:LDRB r1, [r0]leggetipo,LDR r2, [r0, #4]leggex,STR r3, [r0, #8]scrivey. Un array di struct si scorre con passo 12.
Esempio. Con r0=0x2000, LDR r2, [r0, #4] legge il campo x all'indirizzo 0x2004 e STR r3, [r0, #8] scrive y a 0x2008.
Dal programma C all'eseguibile ARM
Definizione (compiti del linker)
- Mette uno dopo l'altro i segmenti testo e dati di tutti i file.
- Risolve i simboli esterni: una
BL printfinmain.oviene collegata alla definizione diprintfnella libreria.- Corregge gli indirizzi segnati come rilocabili.
Esempio. Se main.o ha byte di testo e max.o ne ha , nell'eseguibile max.o parte byte dopo l'inizio del testo e gli indirizzi rilocabili di max.o si correggono di .
Proprietà (funzione assembly chiamabile da C). Una funzione assembly è chiamabile da C se rispetta la convenzione di chiamata (argomenti in
r0–r3, risultato inr0,r4–r11preservati).
Esempio. Con massimo(3, 8) il C pone r0=3 e r1=8 e la funzione di max.s restituisce r0=8.
VI. Organizzazione del processore
Unità aritmetico-logica (ALU)
Definizione (ALU a 1 bit). Per il bit : una porta AND, una porta OR, un sommatore completo (vedi Circuiti combinatori notevoliMultiplexer, decodificatore e codificatore; semisommatore e sommatore completo; sommatore a propagazione del riporto e suo ritardo, idea dell'anticipo del riporto; sommatore-sottrattore in complemento a 2 con rilevazione dell'overflow; comparatore.Circuiti combinatori notevoli →) e un multiplexer che sceglie quale risultato mandare in uscita.
- ingressi: , , riporto , selezione dell'operazione;
- uscite: risultato , riporto .
Esempio. Con , , il sommatore completo dà e ; il multiplexer sceglie se mandare in uscita AND, OR o somma.
Definizione (ALU a bit: sottrazione, NOR, slt, zero e overflow). ALU a 1 bit con i riporti in cascata (o con anticipo del riporto). Aggiunte:
- Sottrazione: un segnale Binvert fa passare invece di e mette (complemento a 2, vedi Aritmetica binariaSomma e sottrazione in binario, overflow per senza segno (riporto) e per complemento a 2 (segni), flag del processore, moltiplicazione per somme e scorrimenti, algoritmo di Booth, divisione, shift logici e aritmetici.Aritmetica binaria →).
- NOR: con Ainvert e Binvert, l'AND diventa (De Morgan).
- Set less than (
sltdi MIPS): si calcola e il bit di segno del risultato (corretto per l'overflow) diventa il bit 0 dell'uscita, gli altri bit sono 0.- Zero: (NOR di tutti i bit del risultato). Usato per i salti condizionati su uguaglianza.
- Overflow: .
Esempio. A bit, con e : , cioè , con .
Datapath e microarchitettura
Definizione (percorso delle istruzioni nel datapath). Aritmetica (
add rd, rs, rt): PC → memoria istruzioni → lettura dirsert→ ALU → scrittura inrd. Il PC diventa PC + 4.Load (
lw rt, off(rs)): lettura dirs→ ALU calcolars + estensione(off)→ memoria dati in lettura → scrittura inrt. È l'istruzione più lunga: usa tutti gli elementi.Store (
sw rt, off(rs)): come la load fino all'indirizzo; il dato letto dartva alla memoria dati in scrittura; nessuna scrittura nei registri.Salto condizionato (
beq rs, rt, off): l'ALU sottraers - rt; se l'uscita Zero vale 1 il PC diventa PC + 4 + (off · 4), altrimenti PC + 4. Serve un secondo sommatore per il bersaglio.
Esempio. Per beq rs, rt, off con off=3 e Zero , il PC diventa .
Formula (periodo di clock del ciclo singolo). Ogni istruzione si esegue in un ciclo di clock. Il periodo deve bastare per l'istruzione più lenta. Con ritardi: memoria 200 ps, banco registri 100 ps, ALU 200 ps:
Istruzione Mem. istr. Lettura reg. ALU Mem. dati Scrittura reg. Totale aritmetica 200 100 200 — 100 600 ps load 200 100 200 200 100 800 ps store 200 100 200 200 — 700 ps salto cond. 200 100 200 — — 500 ps Periodo = 800 ps (1,25 GHz) per tutte le istruzioni: un'aritmetica spreca 200 ps. Inoltre servono memorie istruzioni e dati separate e più sommatori, perché ogni unità si può usare una sola volta per ciclo.
Esempio. La load impiega ps, quindi GHz per tutte le istruzioni.
Definizione (esecuzione multiciclo). L'esecuzione si divide in passi di un ciclo ciascuno (prelievo, decodifica e lettura registri, esecuzione, accesso alla memoria, scrittura); ogni istruzione usa solo i passi che le servono. Il clock è dettato dal passo più lento (qui 200 ps) e:
- aritmetica 4 cicli = 800 ps, load 5 cicli = 1000 ps, store 4, salto 3;
- un'unica memoria e un'unica ALU possono servire più passi (con registri intermedi tra i passi);
- l'unità di controllo diventa un automa a stati finiti.
Esempio. Con clock di ps, una aritmetica da cicli dura ps e una load da cicli ps.
Unità di controllo
Definizione (micro-operazioni). Ogni fase del Ciclo fetch-executeRegistri PC, IR, MAR e MBR; ciclo dell'istruzione diviso in fetch ed execute; i quattro tipi di operazioni; diagramma degli stati del ciclo con calcolo degli indirizzi degli operandi e controllo delle interruzioni; esempio su una macchina ad accumulatore.Ciclo fetch-execute → è una sequenza di micro-operazioni, trasferimenti elementari tra registri che avvengono in un ciclo di clock. Prelievo:
- :
- : ,
- :
Micro-operazioni senza conflitti (che non usano la stessa risorsa) possono stare nello stesso ciclo.
Esempio. In la lettura e l'incremento non usano la stessa risorsa e stanno nello stesso ciclo: il prelievo dura cicli.
Definizione (segnali di controllo del datapath a ciclo singolo)
Istruzione RegDst ALUSrc MemtoReg RegWrite MemRead MemWrite Branch ALUOp aritmetica (R) 1 0 0 1 0 0 0 dal campo funct load 0 1 1 1 1 0 0 somma store X 1 X 0 0 1 0 somma salto cond. X 0 X 0 0 0 1 sottrazione X = indifferente (il valore non conta perché il risultato non viene usato: per la store non si scrive nessun registro). Ogni colonna è una funzione booleana dei bit del codice operativo: è una rete combinatoria (vedi Reti combinatorie e mappe di KarnaughRete combinatoria (uscite funzione dei soli ingressi attuali); mintermini e maxtermini, forme canoniche SOP e POS; mappe di Karnaugh a 3 e 4 variabili con esempi svolti; condizioni di indifferenza; costo e ritardo di una rete a due livelli.Reti combinatorie e mappe di Karnaugh →).
Esempio. Per la store si ha RegWrite e MemWrite : nessun registro viene scritto, la memoria dati sì; RegDst e MemtoReg sono X.
Proprietà (controllo cablato). I segnali sono prodotti da circuiti logici:
- combinatorio, nel datapath a ciclo singolo (tabella sopra);
- a stati finiti, nel datapath multiciclo: lo stato indica il passo corrente (prelievo, decodifica, …), le uscite sono i segnali del passo e la funzione di stato prossimo dipende dal codice operativo (vedi Reti sequenziali e automi a stati finitiModello di una rete sequenziale sincrona (stato in flip-flop, logica di stato prossimo e di uscita); automi di Moore e di Mealy; procedimento di sintesi con esempio svolto di un riconoscitore della sequenza 11.Reti sequenziali e automi a stati finiti →).
Veloce, ma difficile da progettare e da modificare quando le istruzioni sono molte e complesse. Usato nei processori RISC.
Esempio. Nel ciclo singolo RegWrite è una funzione booleana del codice operativo: vale per aritmetica e load, per store e salto.
Definizione (controllo microprogrammato). Idea (Wilkes, 1951): i segnali di ogni passo sono una parola di bit, la microistruzione, memorizzata in una memoria di controllo (ROM). Ogni istruzione macchina corrisponde a un microprogramma.
Funzionamento: un microsequenziatore con un registro indirizzo di controllo legge una microistruzione, ne manda i bit come segnali al datapath e calcola l'indirizzo della successiva (sequenziale, salto condizionato, oppure salto all'inizio del microprogramma indicato dal codice operativo).
Formato Caratteristiche orizzontale un bit per segnale: molti bit (anche centinaia), massimo parallelismo, nessuna decodifica verticale segnali codificati in campi (es. 4 bit per scegliere una tra 16 operazioni ALU): microistruzioni corte, serve decodifica, meno parallelismo
Esempio. Per scegliere una tra operazioni dell'ALU una microistruzione verticale usa bit, una orizzontale bit (uno per operazione).
VII. Gerarchia delle memorie
Gerarchia di memoria e principio di località
Definizione (località temporale e spaziale)
- località temporale: un dato usato da poco sarà probabilmente riusato presto (variabili di un ciclo, istruzioni del corpo di un ciclo);
- località spaziale: dopo un indirizzo è probabile che si usino quelli vicini (istruzioni in sequenza, elementi consecutivi di un array).
Esempio. In for (i = 0; i < n; i++) s += a[i]; la variabile s ha località temporale e gli elementi a[i] località spaziale.
Definizione (hit, miss e hit rate)
- Hit: il dato è nel livello superiore; miss: non c'è e va prelevato dal livello inferiore.
- Hit rate : frazione degli accessi che sono hit; miss rate .
Esempio. Su accessi con hit si ha e miss rate .
Formula (tempo medio di accesso con cache). Se un miss costa l'accesso alla cache più quello alla memoria:
Esempio. Con ns, ns e : ns; con diventa ns.
Formula (tempo medio con due livelli di cache). Con due livelli di cache: , con i miss rate locali.
Esempio. Con ns, , ns, e ns: ns.
Memoria cache
Definizione (campo parola e indirizzo del blocco). Se , gli ultimi bit dell'indirizzo indicano la parola dentro il blocco (campo parola), gli altri bit sono l'indirizzo del blocco. Il primo indirizzo di un blocco ha il campo parola a zero.
Esempio. Con blocchi di parole (), l'indirizzo ha campo parola e indirizzo del blocco .
Formula (associazione diretta). Ogni blocco può andare in una sola linea:
Indirizzo: | tag | linea ( bit) | parola ( bit) |
Esempio. Con linee, il blocco va nella linea .
Definizione (associazione completa). Un blocco può andare in qualsiasi linea. Indirizzo: | tag | parola |. Si confronta il tag con tutte le linee in parallelo (memoria associativa): costosa, usata solo per cache piccolissime (es. il TLB, vedi Memoria virtualeIndirizzi virtuali e fisici, pagine e frame; traduzione con la tabella delle pagine e calcolo dei campi; page fault e sostituzione delle pagine; TLB e tempo di accesso effettivo; protezione e condivisione; confronto con la cache.Memoria virtuale →).
Esempio. Con indirizzi di bit e blocchi di byte il tag è l'indirizzo del blocco ( bit) e il campo parola è di bit.
Formula (associazione a insiemi a vie). Le linee sono divise in insiemi (set) di linee. Un blocco va in un insieme fisso, in una linea qualsiasi dell'insieme:
Indirizzo: | tag | insieme ( bit) | parola |
Esempio. Con linee a vie: insiemi; il blocco va nell'insieme .
Formula (campi dell'indirizzo di una cache). Con capacità , linea (= blocco) di byte, vie e memoria indirizzata al byte:
Esempio. Con byte, byte, vie e indirizzi di bit: linee , insiemi , parola bit, set bit, etichetta bit.
Memoria principale a semiconduttore
Definizione (RAM dinamica e statica)
DRAM (dinamica) SRAM (statica) cella un condensatore e un transistor di accesso un flip-flop (tipicamente 6 transistor) bit carica presente/assente stato del flip-flop refresh necessario: la carica si disperde, va riletta e riscritta periodicamente (ogni pochi ms) non serve finché c'è alimentazione densità e costo alta densità, basso costo per bit bassa densità, alto costo velocità più lenta più veloce uso memoria principale cache
Esempio. Una cella SRAM usa circa transistor, una DRAM un transistor e un condensatore: a parità di area la DRAM contiene più bit.
Definizione (chip di memoria ). Un chip contiene parole di bit: ha linee di indirizzo e linee dati. Internamente le celle sono una matrice: l'indirizzo è diviso in riga e colonna, decodificate separatamente. Nelle DRAM riga e colonna arrivano in due tempi sulle stesse linee (segnali RAS e CAS), dimezzando i piedini.
Esempio. Memoria di 1 MB, parola di 1 byte, con chip bit.
Memoria esterna - dischi, RAID e memorie ottiche
Formula (capacità di un disco). Capacità = facce × tracce per faccia × settori per traccia × byte per settore.
Esempio. facce, tracce per faccia, settori per traccia e byte per settore danno byte.
Formula (tempo di accesso al disco)
- Posizionamento (seek): portare la testina sulla traccia; dato del disco (valore medio).
- Latenza rotazionale: attesa che il settore passi sotto la testina; in media mezzo giro:
- Trasferimento di byte su una traccia di byte (frazione di giro):
Esempio. A giri/min la latenza rotazionale media è ms.
Definizione (scheduling del disco: FCFS, SSTF e ascensore)
Algoritmo Regola Caratteristiche FCFS (FIFO) ordine di arrivo equo, spesso il più lento SSTF (shortest seek time first) la richiesta più vicina al cilindro attuale spostamento minimo, ma può far attendere a lungo le richieste lontane e fa molte inversioni ascensore (SCAN) continua nella direzione corrente servendo le richieste che incontra, inverte quando non ce ne sono più poche inversioni del braccio (meno usura meccanica), buone prestazioni
Esempio. Con la testina sul cilindro e richieste (in ordine di arrivo) FCFS percorre cilindri, SSTF () percorre .
Proprietà (parità e ricostruzione nel RAID). La parità permette la ricostruzione: se un disco si guasta, ogni suo blocco è lo XOR dei blocchi corrispondenti degli altri dischi.
Esempio. Con blocchi , , la parità è ; se il secondo disco si guasta, .
Memoria virtuale
Definizione (pagine, frame e indirizzo virtuale)
- Lo spazio virtuale è diviso in pagine di dimensione fissa (tipicamente 4 KB); la memoria fisica in frame (cornici) della stessa dimensione.
- Indirizzo virtuale = | numero di pagina virtuale | offset |; l'offset ha bit e non cambia nella traduzione.
Esempio. Con pagine di KB l'offset è di bit; un indirizzo virtuale di bit ha bit di numero di pagina.
Definizione (tabella delle pagine). Per ogni processo una tabella delle pagine in memoria, indicizzata dal numero di pagina virtuale. Ogni voce contiene: bit di validità (pagina in memoria o no), numero di frame, bit di protezione (lettura, scrittura, esecuzione, utente/supervisore), bit di riferimento e bit sporco.
Esempio. Se la voce della pagina 0x00403 indica il frame 0x1F2, l'indirizzo virtuale 0x00403A7C diventa l'indirizzo fisico 0x1F2A7C.
Definizione (TLB). Ogni accesso richiederebbe un accesso in più alla tabella in memoria. Il TLB (Translation Lookaside Buffer) è una piccola cache associativa delle traduzioni recenti (decine–centinaia di voci). TLB hit: traduzione in un ciclo; TLB miss: si legge la tabella e si aggiorna il TLB.
Esempio. Con accesso alla memoria di ns, TLB di ns e hit rate : ns, contro ns senza TLB.
VIII. Sistemi di input/output
Moduli di input-output e input-output programmato
Definizione (I/O mappato in memoria e I/O isolato)
I/O mappato in memoria I/O isolato spazio di indirizzi unico: i registri dei moduli occupano indirizzi di memoria separato per l'I/O istruzioni le stesse load/store della memoria istruzioni dedicate ( IN,OUTin x86)pro nessuna istruzione speciale; tutte le modalità di indirizzamento disponibili lo spazio di memoria resta tutto per la memoria contro consuma indirizzi di memoria insieme di istruzioni di I/O limitato
Esempio. In ARM (I/O mappato) il registro dati della UART a 0x101F1000 si scrive con STRB r0, [r1], la stessa istruzione di una store in memoria.
Definizione (I/O programmato con polling). La CPU esegue tutto: dà il comando, poi interroga ripetutamente il registro di stato (polling) finché il dispositivo è pronto, poi trasferisce il dato.
Esempio. Con una stampante da caratteri/s e una CPU da istruzioni/s, per ogni carattere si sprecano circa istruzioni di polling.
Definizione (I/O programmato, a interrupt e DMA)
Trasferimento dati Chi aspetta I/O programmato CPU la CPU, in attesa attiva I/O con interrupt (vedi InterruptClassi di interruzioni; I/O guidato da interrupt; sequenza hardware e software di gestione con salvataggio del contesto sullo stack; identificazione della sorgente (linee multiple, polling, daisy chain, vettore); priorità e interruzioni annidate; eccezioni e modi in ARM.Interrupt →) CPU nessuno: il modulo avvisa la CPU quando è pronto DMA (vedi Accesso diretto alla memoria (DMA)Modulo DMA e informazioni che riceve dalla CPU; trasferimento a blocco con un solo interrupt finale; furto di cicli e modalità a burst, punti in cui la CPU può essere sospesa; configurazioni del bus; canali e processori di I/O; confronto quantitativo con l'I/O a interrupt.Accesso diretto alla memoria (DMA) →) modulo DMA, direttamente con la memoria nessuno: la CPU è avvisata solo alla fine del blocco
Esempio. Per un blocco di parole l'I/O con interrupt richiede interruzioni, il DMA una sola, alla fine del blocco.
Interrupt
Definizione (interruzione). Un'interruzione sospende il programma in esecuzione per far eseguire una routine di servizio (interrupt handler), poi lo fa riprendere come se nulla fosse successo.
Classe Causa I/O un modulo segnala la fine di un'operazione o una richiesta timer allo scadere di un intervallo (base per il multitasking del sistema operativo) guasto hardware errore di parità della memoria, calo di alimentazione programma (eccezioni) overflow, divisione per zero, istruzione non valida, accesso a memoria protetta, page fault (vedi Memoria virtualeIndirizzi virtuali e fisici, pagine e frame; traduzione con la tabella delle pagine e calcolo dei campi; page fault e sostituzione delle pagine; TLB e tempo di accesso effettivo; protezione e condivisione; confronto con la cache.Memoria virtuale →), chiamata esplicita al sistema operativo ( SVCin ARM)
Esempio. Una divisione per zero è una eccezione di programma; lo scadere di un timer è una interruzione di timer; la fine di una lettura da disco è una interruzione di I/O.
Definizione (sequenza di gestione di una interruzione). Hardware:
- il dispositivo invia la richiesta;
- la CPU finisce l'istruzione corrente (il controllo delle interruzioni è l'ultima fase del Ciclo fetch-executeRegistri PC, IR, MAR e MBR; ciclo dell'istruzione diviso in fetch ed execute; i quattro tipi di operazioni; diagramma degli stati del ciclo con calcolo degli indirizzi degli operandi e controllo delle interruzioni; esempio su una macchina ad accumulatore.Ciclo fetch-execute →);
- la CPU controlla se ci sono richieste abilitate e invia la conferma (acknowledge);
- salva sullo stack (o in registri dedicati) PC e PSW;
- carica nel PC l'indirizzo della routine di servizio.
Software (routine di servizio):
- salva gli altri registri che userà;
- serve il dispositivo;
- ripristina i registri;
- esegue l'istruzione di ritorno da interruzione, che ripristina PSW e PC.
Esempio. Con prima dell'interruzione, dopo il salvataggio di PC e PSW si ha ; se la routine salva altri registri, , e al ritorno .
Definizione (identificazione della sorgente di una interruzione)
- linee di interrupt multiple: una linea per dispositivo (le linee sono poche);
- polling software: un'unica routine interroga i registri di stato di tutti i moduli (lento);
- daisy chain (polling hardware): il segnale di conferma passa da un modulo all'altro in catena; il primo che ha una richiesta pendente lo blocca e mette sul bus il proprio vettore (un numero che identifica la routine);
- arbitraggio del bus: il modulo deve ottenere il bus prima di richiedere l'interrupt.
Esempio. Con tre moduli in daisy chain che richiedono insieme l'interrupt, il segnale di conferma si ferma in , che mette sul bus il proprio vettore.
Accesso diretto alla memoria (DMA)
Definizione (funzionamento del DMA)
- La CPU programma il modulo DMA indicando: lettura o scrittura, indirizzo del dispositivo, indirizzo iniziale in memoria, numero di parole da trasferire.
- La CPU prosegue con altro lavoro.
- Il DMA trasferisce il blocco una parola alla volta, usando il bus: per ogni parola incrementa l'indirizzo e decrementa il contatore.
- Alla fine invia un solo interrupt alla CPU.
Esempio. Per parole il DMA incrementa l'indirizzo e decrementa il contatore volte, poi invia un solo interrupt.
Definizione (furto di cicli e burst)
- furto di cicli (cycle stealing): il DMA prende il bus per un ciclo, trasferisce una parola e lo rilascia. La CPU rallenta di poco;
- burst (a blocco): il DMA tiene il bus per tutto il blocco. Trasferimento più veloce, ma la CPU non può accedere alla memoria nel frattempo.
Esempio. Per parole, con furto di cicli il DMA prende il bus per ciclo alla volta ( volte); in burst lo tiene per cicli di seguito.
Formula (confronto tra interrupt e DMA). Trasferire 4 KB in parole da 4 byte = 1024 parole.
- Interrupt: 1024 interruzioni; se ognuna costa 200 cicli tra salvataggio del contesto, routine e ritorno → circa 205 000 cicli di CPU.
- DMA: programmazione iniziale (es. 100 cicli) + un interrupt finale (200 cicli) ≈ 300 cicli di CPU, più gli eventuali cicli sottratti sul bus.
Esempio. Con un interrupt per parola servono circa cicli di CPU, con il DMA cicli.
IX. Tecniche avanzate di progettazione
Pipeline
Definizione (pipeline a 5 stadi)
Stadio Cosa fa IF (instruction fetch) preleva l'istruzione all'indirizzo PC; PC ← PC + 4 ID (instruction decode) decodifica, legge i registri, genera i segnali di controllo, rileva le dipendenze EX (execute) ALU: operazione, oppure calcolo dell'indirizzo per load/store e salti MEM accesso alla memoria dati (solo load e store) WB (write back) scrive il risultato nel banco dei registri
Esempio. Al ciclo I1 è in EX, I2 in ID e I3 in IF: tre istruzioni in volo, ciascuna in uno stadio diverso.
Formula (tempo di ciclo della pipeline). Tempo di ciclo: lo stadio più lento più il ritardo dei registri di pipeline :
Esempio. Con stadi da ps e ps: ps.
Formula (tempo per eseguire istruzioni). Tempo per eseguire istruzioni con stadi, senza stalli: la prima istruzione esce dopo cicli, poi ne esce una per ciclo:
Esempio. Con istruzioni e stadi servono cicli, contro senza pipeline.
Formula (speedup della pipeline). Speedup rispetto all'esecuzione senza pipeline (che richiede per istruzione):
Esempio. Con e : .
Formula (speedup con stalli)
Esempio. Con e cicli di stallo per istruzione: .
Hazard nella pipeline
Definizione (dipendenze RAW, WAR e WAW). Un'istruzione usa un registro coinvolto in un'istruzione precedente.
Dipendenza Significato Esempio RAW (read after write) legge un registro che scrive: deve leggere il valore nuovo add $1,$2,$3poisub $4,$1,$5WAR (write after read) scrive un registro che legge: deve leggere il valore vecchio sub $4,$1,$5poiadd $1,$2,$3WAW (write after write) e scrivono lo stesso registro: deve restare il valore di add $1,…poilw $1,…
Esempio. In add $1,$2,$3 seguita da sub $4,$1,$5, la sub legge $1 scritto dalla add: dipendenza RAW.
Definizione (data forwarding). Il risultato esiste già prima di WB: per un'istruzione aritmetica alla fine di EX, per una load alla fine di MEM. Il forwarding (bypass) lo porta direttamente all'ingresso dell'ALU dai registri di pipeline EX/MEM o MEM/WB, tramite multiplexer comandati da un'unità che confronta i numeri dei registri.
Esempio. Con add $1,$2,$3 seguita da sub $4,$1,$5, il risultato della add (fine di EX) arriva direttamente all'ingresso dell'ALU della sub: nessuno stallo.
Formula (stalli per istruzione dovuti ai salti). Esempio di costo: 15% di salti condizionati di cui il 60% presi, 1% di salti incondizionati, 2 cicli persi per ogni salto preso, si prevede "non preso":
Esempio. Con stalli per istruzione e stadi: .
Branch prediction
Definizione (tecniche contro i control hazard senza predizione)
- Stallo: appena in ID si riconosce un salto, si ferma il prelievo finché non si sa dove andare. Semplice ma sempre costoso.
- Flussi multipli: si prelevano entrambe le strade e si scarta quella sbagliata. Richiede risorse doppie e non regge salti a breve distanza l'uno dall'altro.
- Prelievo anticipato del bersaglio: si preleva anche l'istruzione di destinazione e la si tiene pronta.
- Anticipare la decisione: calcolare condizione e indirizzo già in ID (un sommatore e un comparatore in più): il costo scende a 1 ciclo.
- Loop buffer (o buffer circolare): una piccola memoria velocissima (es. 256 byte) con le ultime istruzioni prelevate, indirizzata dai bit bassi dell'indirizzo (8 bit per 256 byte) e con i bit alti come etichetta, come una cache. Un ciclo breve che salta all'indietro trova le istruzioni già nel buffer.
- Salto ritardato (delayed branch, MIPS): l'istruzione subito dopo il salto (delay slot) viene sempre eseguita. Il compilatore ci mette un'istruzione utile che va eseguita comunque (presa da prima del salto), oppure una
nop.
Esempio. Anticipando condizione e indirizzo in ID, un salto preso costa ciclo invece di .
Definizione (predizione statica)
- sempre non preso: si continua a prelevare in sequenza; se il salto è preso si buttano le istruzioni prelevate;
- sempre preso;
- in base al codice operativo o alla direzione: i salti all'indietro (chiusura dei cicli) presi, quelli in avanti non presi. Il compilatore può anche indicare la previsione con un bit nell'istruzione.
Esempio. Il salto che chiude un ciclo (all'indietro) si prevede preso, un salto in avanti non preso.
Definizione (predittori dinamici a 1 e 2 bit). 1 bit: si prevede ciò che il salto ha fatto l'ultima volta. In un ciclo che si ripete sbaglia due volte per ogni esecuzione completa del ciclo: all'uscita (previsto preso, invece non preso) e al primo giro successivo (previsto non preso, invece preso).
2 bit: quattro stati, due "prevedi preso" e due "prevedi non preso"; per cambiare previsione servono due errori consecutivi.
Stato Previsione Se preso Se non preso 11 forte preso 11 10 10 debole preso 11 00 01 debole non preso 11 00 00 forte non preso 01 00
Esempio. In un ciclo da iterazioni (salto preso volte e non preso ) il predittore a bit sbaglia volte ogni (80% corrette), quello a bit volta (90%).
Processori superscalari e multicore
Definizione (processore superscalare). Un processore superscalare preleva, decodifica ed esegue più istruzioni per ciclo (2–8), con più unità funzionali (più ALU, unità load/store, unità in virgola mobile). Il limite teorico è un CPI di con istruzioni lanciate per ciclo.
Esempio. Con istruzioni per ciclo il CPI minimo è ; a GHz si arriva fino a istruzioni al secondo.
Definizione (ridenominazione dei registri). Fuori ordine le dipendenze WAR e WAW (vedi Hazard nella pipelineHazard strutturali, sui dati e sul controllo; dipendenze RAW, WAR e WAW; stalli e bolle con diagrammi; data forwarding (bypass) e caso load-use; riordino delle istruzioni da parte del compilatore e dell'hardware; costo dei salti.Hazard nella pipeline →) diventano un problema. Sono dipendenze "di nome" (riuso dello stesso registro), non di dato: si eliminano con la ridenominazione dei registri, che assegna a ogni nuovo valore un registro fisico diverso (i registri fisici sono molti più di quelli dell'ISA).
1: add r1, r2, r3 2: sub r4, r1, r5 ; RAW su r1: dipendenza vera 3: mul r1, r6, r7 ; WAW con 1, WAR con 2: dipendenze di nome
Esempio. Ridenominando r1 dell'istruzione 3 in p9, la mul non confligge più con add e sub e può partire prima della 2.
X. Valutazione delle prestazioni
Prestazioni di un calcolatore
Definizione (prestazioni e confronto)
- Prestazioni = 1 / tempo di esecuzione. "A è volte più veloce di B" significa .
Esempio. Se s e s, A è volte più veloce di B.
Formula (tempo di CPU)
Esempio. istruzioni con CPI a GHz: s.
Formula (CPI medio). Se le istruzioni sono divise in classi con frequenza e :
Esempio. Con classi al (CPI ), (CPI ), (CPI ) e (CPI ): .
Formula (MIPS)
Esempio. A GHz con : .
Legge (di Amdahl). Se un miglioramento accelera di un fattore solo una frazione del tempo di esecuzione:
Esempio. Con e : .