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