xzxyxxy xy zxzxzxyzxyz xy zz = x AND yz = x OR yz = NOT x = x` xxxyy
Transcript
xzxyxxy xy zxzxzxyzxyz xy zz = x AND yz = x OR yz = NOT x = x` xxxyy
2001/02 Lezione N. 3 L’hardware Reti di interruttori e espressioni logiche x z In figura è rappresentato un semplice circuito elettrico. Quando l'interruttore è chiuso crea il contatto tra batteria e lampadina e la lampadina si accende. Allo stato dell'interruttore e della lampadina possiamo attribuire un significato associando loro delle proposizioni, cioè delle affermazioni che possono essere vere o false. Indichiamo con x e z le due proposizioni associate all'interruttore e alla lampadina. Per convenzione assumiamo che l'interruttore sia chiuso se e solo se x è vera, e che la lampadina sia accesa se e solo se z è vera. Chiamiamo x e z variabili logiche o booleane perchè possono assumere solo due valori logici, vero o falso, che per convenzione indichiamo rispettivamente con 1 e 0. Il circuito crea una dipendenza funzionale tra il valore di x e quello di z, cioè realizza la funzione z=f(x). Nell'esempio in figura il circuito realizza la funzione identità z=x. Il circuito può essere utilizzato come strumento automatico per la valutazione dell’espressione logica che esso realizza. A tal fine è sufficiente chiudere l’interruttore quando la proposizione x è vera ed interpretare l’accensione della lampadina come verifica della condizione espressa dalla proposizione z. Es: Il circuito può essere usato per regolare l’accesso a un club: x=”la persona ha una tessera valida”, z=”la persona può entrare”. Sostituendo al blocco tratteggiato le seguenti reti di interruttori si realizzano le 3 operazioni elementari della logica (o dell'algebra di Boole): x z x NOT z x 0 1 1 0 z = NOT x = x' x x y x y xy z x x y AND z y 00 01 10 11 0 0 0 1 z = x AND y 00 01 10 11 0 1 1 1 z = x OR y xy z x x y OR y z E’ dimostrato che qualsiasi funzione logica, rappresentata da un'espressione logica comunque complessa, può essere realizzata componendo i circuiti che realizzano le tre operazioni elementari. Particolarmente interessante è il seguente circuito x x y c x y c x y c z c y ALU z che implementa la funzione logica z = ((x AND y) AND c) OR ((x OR y) AND c'). In altri termini, la funzione realizzata dal circuito è z = x AND y se c è vera, z = x OR y se c è falsa. Per questo il circuito è detto programmabile e chiamiamo: c variabile di controllo x,y dati o operandi z risultato I circuiti programmabili sono i componenti fondamentali di ogni computer. Ref: Boni Cap 1.36-1.42 Codifica delle informazioni: bit e byte Una variabile logica rappresenta l'unità minima di informazione (bit), in quanto esprime una scelta tra due sole alternative. Utilizzando un bit si possono esprimere due soli concetti, associati ai valori 1 e 0, quali la verità o falsità di un’affermazione (o proposizione). Utilizzando due bit si possono esprimere quattro diversi concetti, associati alle configurazioni (o parole) 00, 01, 10, 11. Associare un significato ad una configurazione di bit prende il nome di codifica. Informazioni comunque complesse (tra cui informazioni numeriche a più di due valori) possono sempre essere rappresentate (codificate) nei termini di un numero sufficiente di bit, a meno di eventuali approssimazioni (Es: le quattro parole di due bit possono essere usate per rappresentare i numeri interi 0, 1, 2 e 3). Con n bit si n possono rappresentare 2 diverse informazioni. Una parola di 8 bit è detta byte, e può rappresentare 256 diverse informazioni. (L’argomento verrà approfondito in lezioni successive) Dalle reti di interruttori ai calcolatori elettronici Potendo codificare ogni informazione in termini di 0 e 1, è possibile ricondurre qualsiasi operazione (aritmetica o logica) alla valutazione di un'espressione logica, e qualsiasi elaborazione alla valutazione di una sequenza di espressioni logiche. Unità aritmetico-logica. Il nucleo di elaborazione di ogni calcolatore elettronico è l'Unità Aritmetico-Logica (ALU), che non è altro che un circuito programmabile il cui schema di principio è lo stesso della rete di interruttori programmabile vista in precedenza, con tre differenze fondamentali: • i componenti elementari che svolgono la funzione di interruttori sono detti transistor ed hanno dimensioni dell’ordine del micron (indicato con mm), pari a un millesimo di millimetro; • le variabili x, y, c e z non rappresentano singoli bit, ma parole di più bit (tipicamente 8, 16, 32 o 64); • le istruzioni elementari che la ALU può svolgere sono più di 2. Il numero di bit utilizzati per la codifica di operandi e risultati prende il nome di parallelismo interno. Il numero di bit di controllo è legato invece al numero di diverse istruzioni elementari che la ALU può svolgere. Clock e memoria. Disponendo di un circuito programmabile in grado di svolgere qualsiasi operazione elementare, è possibile svolgere operazioni comunque complesse purchè si possa distribuire nel tempo l'elaborazione e memorizzare i risultati parziali. Per questo sono necessari due componenti di supporto: la memoria e il clock. Es: l'espressione z = ((x1 AND x2) AND x3) OR x4 può essere valutata direttamente da una rete di interruttori appositamente realizzata, oppure scomposta in una sequenza di operazioni elementari che possono essere svolte dal nostro circuito programmabile a parallelismo 1: z1 = x1 AND x2 z2 = z1 AND x3 z = z2 OR x4 I risultati parziali z1 e z2 devono essere memorizzati per essere utilizzati come operandi nelle successive operazioni. La sequenza delle tre operazioni è un algoritmo per il calcolo di z dati x1, x2, x3 e x4. Ogni passo dell'algoritmo può essere tradotto in un'istruzione che dica che valori assegnare agli ingressi x, y, c del circuito programmabile e dove memorizzare il risultato parziale z: x=x1, y=x2, c=1, z1=z x=z1, y=x3, c=1, z2=z x=z2, y=x4, c=0, z=z La memoria contiene dati e istruzioni, il clock scandisce il tempo di esecuzione di ogni operazione elementare. I trasferimenti di dati e istruzioni tra memoria e ALU sono anch'essi operazioni che richiedono un tempo non trascurabile e appositi circuiti di controllo che, assieme alla ALU, formano la CPU (Central Processing Unit). Poichè ogni istruzione deve essere letta dalla memoria per poter essere eseguita e spesso l'esecuzione comporta precedenti e successivi trasferimenti di dati, la frequenza di esecuzione dei passi di un algoritmo è generalmente molto inferiore alla frequenza del clock. Le frequenze si misurano in Hertz (Hz), che rappresentano il numero di eventi in un secondo. La frequenza tipica degli attuali microprocessori è superiore ai 100 milioni di Hz (100 MHz). La frequenza di esecuzione delle istruzioni si misura in milioni di istruzioni al secondo (MIPS). Architettura di un calcolatore elettronico L'hardware di un calcolatore elettronico è strutturato in modo gerarchico. Macroscopicamente si distinguono periferiche e scheda madre. La scheda madre contiene i componenti principali del calcolatore: microprocessore (o CPU) ed eventuali co-processori, memoria centrale (RAM e ROM), circuiteria di controllo e canali di comunicazione (BUS). Le periferiche forniscono vari tipi di interfaccia tra il calcolatore e il resto del mondo: tastiera, mouse, monitor, stampante, interfacce di comunicazione, memorie di massa. Microprocessore. Il microprocessore è un unico circuito integrato (chip), ma contiene a sua volta diversi Scheda madre Periferiche Hard Disk co-processore Porte microprocessore control unit cache RAM BUS Controllers registri BUS ALU Porte Tastiera Mouse Monitor Disp. di com. Stampante ROM CD componenti, tra cui in particolare: la ALU, circuito programmabile in grado di svolgere un insieme completo di operazioni aritmetico-logiche elementari, l'unità di controllo (control unit), per la gestione dei trasferimenti di dati e istruzioni, per la decodifica delle istruzioni e per il controllo del flusso di esecuzione, piccole memorie locali (registri e cache), per la memorizzazione di dati temporanei sui quali operare. In base al numero di operazioni elementari che svolgono, i microprocessori si dicono CISC (Complex Instruction Set Computer) o RISC (Reduced Instruction Set Computer). All’aumentare dell’instruction set (insieme di istruzioni riconosciute dal microprocessore) diminuisce il numero di passi necessari a svolgere una data elaborazione, ma aumentano la complessità delle istruzioni (cioè il numero di bit necessari a codificarle) e il tempo di decodifica e ed esecuzione delle singole istruzioni. Le prestazioni di un microprocessore dipendono principalmente, oltre che dal set di istruzioni, dalla frequenza operativa e dal parallelismo (numero di bit utilizzato per rappresentare operandi e risultati). Co-processori. Gli eventuali co-processori sono microprocessori ausiliari specializzati nell'esecuzione di operazioni complesse dedicate ad applicazioni specifiche: elaborazione matematica, gestione della grafica, ecc. BUS. Sono detti BUS i canali di comunicazione interni ad un computer. I BUS si classificano innanzitutto in base al grado di parallelismo, cioè al numero di fili elettrici da cui sono composti. Su ogni filo può essere trasferito un bit alla volta. Su n fili possono essere trasferiti n bit contemporaneamente. Più alto è il parallelismo, più veloce è la comunicazione. In genere, i BUS interni ai microprocessori sono a parallelismo più alto (64) di quelli esterni (32). Bus a parallelismo 1 sono detti collegamenti seriali. Ref: Boni Cap 2.71-2.81, 2.90-2.92, 2.95 Esercizi 1. Disegnare una rete di interruttori, che sostituita al blocco tratteggiato del circuito elettrico di pagina 1, realizzi la funzione logica z = x1 AND x2 AND x3 AND x4. 2. Scrivere un algoritmo per la valutazione della funzione logica dell’esercizio precedente che possa essere eseguito dalla rete di interruttori programmabile rappresentata a pagina 1. E’ possibile scrivere algoritmi diversi per la valutazione della stessa funzione? Se sì, quanti? E’ possibile scrivere algoritmi di lunghezza diversa per la valutazione della stessa funzione? Se sì, quanti? 3. Scrivere l’espressione della funzione logica valutata dalla rete programmabile di pagina 1 nei seguenti tre passi: x=x1, y=x2, c=0, z1=z x=x3, y=x4, c=0, z2=z x=z1, y=z2, c=1, z=z