Complemento a 1

annuncio pubblicitario
Libro di testo
inclusa Appendice B
“The Basics of
Logic Design”
disponibile online
Programma delle lezioni e lucidi
http://pomino.isti.cnr.it/~khast/
Componenti principali di un computer
•
•
•
Processore
Input/Output (I/O)
• mouse, tastiera (I)
Control
• video, stampante (O) (Parte di controllo)
• dischi (I/O)
Datapath
(Parte operativa)
• CD e DVD (I/O o I)
• rete (I/O)
memoria principale
• DRAM, SRAM
processore (CPU)
• parte operativa (datapath)
• parte controllo (control)
• bus
Memoria
I/O
Com’è fatto un computer
•
•
•
I/O
• serve per comunicare con l’esterno
• include dispositivi di memoria secondaria (memoria non volatile),
acceduti come dispositivi di I/O
Memoria principale
• usata per memorizzare programmi e dati durante l’esecuzione
(concetto di stored-program introdotto da Von Neumann)
Processore
• è l’esecutore delle istruzioni appartenenti ad un’ISA
• ISA (Instruction Set Architecture) definisce quindi il linguaggio
(povero) comprensibile dal processore
• le istruzioni sono lette dalla memoria, modificano dati in memoria o
agiscono sull’I/O
• decomponibile in Parte Controllo → mente
Parte Operativa → braccio
Com’è fatto un computer
•
•
•
Video: unità di uscita (O)
Tastiera/mouse: unità di ingresso (I)
Scatola: contiene
• alimentatore
• scheda madre (o motherboard o mainboard) e bus
• processore
• memoria volatile (RAM)
• dischi (memoria stabile, I/O)
• lettori CD/DVD
• dispositivi di I/O per rete (LAN / MODEM)
• dispositivi di I/O USB (Universal Serial Bus)
Com’è fatto un computer
Circuiti integrati
•
I componenti elettronici del computer sono realizzati
con circuiti integrati (IC):
• fili + transistor realizzati con processo di integrazione
larghissimo su frammenti di silicio (VLSI - Milioni di
transistor su un singolo frammento)
• Silicio
• presente nella sabbia
• è un semiconduttore
• aggiungendo materiali al silicio attraverso un
processo chimico, il silicio diventa transistor,
conduttore, o isolante
Processo di produzione di un chip
•
Lingotto di silicio (15/30
cm diam.)
•
Wafer sottili ottenuti
tagliando il lingotto
•
20/30 processi
produttivi tramite pattern
e processi chimici →
otteniamo diverse
repliche dello stesso
circuito rettangolare
•
Separiamo i vari circuiti e otteniamo i die
•
Collaudiamo i die
•
Inseriamo nei package i die funzionanti, collegandoli ai piedini (pin) del package
→ otteniamo i chip pronti per la consegna
Livelli di astrazione
•
•
•
Per progettare o capire l’architettura di un sistema,
oppure per programmare semplicemente un sistema,
abbiamo bisogno di astrarre.
Es.: se cerchiamo di capire come funziona una CPU… ci
accorgiamo che la funzionalità della CPU è comprensibile
se astraiamo e guardiamo solo alla sua interfaccia di
programmazione: ISA (Instruction Set Architecture)
Se scendiamo di livello, troviamo fili e milioni di transistor!!
E diventa così impossibile comprenderne il
funzionamento!!! In particolare, non si riesce a:
• capire come questo livello interpreta le istruzioni dell’ISA
• individuare i blocchi funzionali
• capire a cosa servono i blocchi funzionali stessi
Livelli di astrazione
Astrazione:
• Utilizzata per gestire
la complessità
• tipicamente distinta
in livelli (VMi)
• ogni livello possiede
il suo linguaggio Li e
le sue strutture dati Ri
• i livelli inferiori sono
implementati in
hardware
• i livelli superiori sono
implementati in
software
V Mn
Rn
Ln
V Mi
Ri
Li
V M1
R1
L1
Virtualization
Abstraction
Concretization
Emulation
Livelli tipici:
5. Applicazioni
4. Assembler
3. Linguaggio Macchina (ISA)
2. Firmware
1. Hardware
Esempio
a = b + c;
Livello: Linguaggio
ad alto livello
COMPILATORE
Processo di
traduzione
add $4, $5, $6
Livello: Linguaggio
assembler
ASSEMBLATORE
00000010010001010011000100100000
Livello: Linguaggio
macchina (ISA)
Livelli di astrazione
Livello della logica digitale (hardware)
• fili e porte logiche (gate) realizzati tramite transistor
• gate (fili) elaborano (trasportano) segnali binari (0/1)
• tramite questi segnali è possibile rappresentare qualsiasi tipo di informazioni
• interconnettendo gate e fili è possibile realizzare funzioni complesse (es.
moltiplicazioni di interi)
• è anche possibile realizzare elementi di memoria (utilizzati per dati e
programmi)
Livello della microarchitettura (firmware)
• costruito sopra il livello della logica digitale, si occupa di interpretare ed
eseguire le istruzioni del livello ISA
Livelli di astrazione
Livello del linguaggio macchina (ISA)
•
È il livello di macchina nuda che appare al programmatore di sistema
•
Comprende un insieme di istruzioni che di solito sono diverse per ogni
processore
•
problema della portabilità binaria
•
La sintassi è adatta ad essere interpretata facilmente dal livello sottostante
•
Le istruzioni sono stringhe di bit con formato ben determinato per permettere
la facile individuazione di codici e operandi delle istruzioni
•
i codici individuano l’operazione elementare che l’istruzione dovrà eseguire
•
gli operandi si riferiscono alle locazioni di memoria che contengono i dati
su cui eseguire l’operazione, e le locazioni dove memorizzare i risultati
Livelli di astrazione
Livello del linguaggio assembler
• Offre al programmatore di sistema una vista più “umana” del livello macchina:
•
•
istruzioni espresse con stringhe di caratteri mnemoniche invece di
stringhe binarie
•
traduzione realizzata dall’assemblatore (è uno speciale compilatore)
rispetto al livello macchina
L’assemblatore è stato uno dei primi software di sistema realizzato per
facilitare la programmazione dei calcolatori
Livello del linguaggio ad alto livello
•
C, C++, Java, Python
•
•
Permette al programmatore una maggiore astrazione rispetto ai livelli
sottostanti della macchina
Ha di solito bisogno di un traduttore (compilatore) o di un interprete
•
E’ il livello solitamente usato per produrre software
•
Tale livello permette di realizzare la portabilità tra processori con diversa ISA,
basta che esista il compilatore/interprete implementato per la nuova ISA
Caratteristiche di alcuni microprocessori
Capacita dei processori Intel
Legge di Moore
•
•
•
•
•
•
•
•
•
•
Aumento della densità dei componenti su chip
Gordon Moore — co-fondatore della Intel
Il numero di transistor su un chip raddoppierà ogni anno
Dal 1970 lo sviluppo dell’elettronica ha leggermente rallentato
Il numero di transistor su un chip raddoppia ogni 18 mesi
Il costo di un chip è rimasto pressoché invariato
Maggior densità di transistor su chip significa linee elettriche
più corte, con maggiori prestazioni
La minor dimensione aumenta la flessibilità
Ridotti requisiti di potenza di alimentazione e di
raffreddamento
Un minor numero di interconnessioni aumenta l’affidabilità
Base 2
20
1
25
32
21
2
26
64
22
4
27
128
23
8
28
256
24
16
29
512
210
1024
210
KiB
211
2048
220
MiB
212
4096
230
GiB
213
8192
240
TiB
216
65536
250
PiB
Rappresentazioni Numeriche
•
Decimale
3510 = 3 x 101 + 5 x 100
•
Binario
001000112 = 1 x 25 + 1 x 21 + 1 x 20
•
Esadecimale 0x23 or 23hex
= 2 x 161 + 3 x 160
0-15 (base 10) → 0-9, a-f (base 16)
Dec
0
1
2
3
Bin Hex
0000 0
0001 1
0010 2
0011 3
Dec
4
5
6
7
Bin Hex
0100 4
0101 5
0110 6
0111 7
Dec
8
9
10
11
Bin Hex
1000 8
1001 9
1010 a
1011 b
Dec
12
13
14
15
Bin Hex
1100 c
1101 d
1110 e
1111
f
Rappresentazione Binaria
Il numero binario bit più significativo (MSB) bit meno significativo (LSB)
01011000 00010101 00101110 11100111
rappresenta la quantità
0 x 231 + 1 x 230 + 0 x 229 + … + 1 x 20
Con 32 bit è possibile rappresentare 232 numeri tra 0 e 232 –1
Questa rappresentazione è chiamata unsigned (senza segno)
poiché si assume che i numeri siano sempre positivi
NOTA: 2n in base due è un 1 seguito da n zeri: 25 = 100000
NOTA: 2n – 1 in base due è rappresentato da n uni: 25 – 1= 11111
Binario <—> Esadecimale
Numeri negativi (con segno)
32
Su 32 bit si possono rappresentare unicamente 2
numeri. Se volessimo
rappresentare anche i negativi, potremmo rappresentare 2
31
numeri positivi e 2
numeri negativi
0000 0000 0000 0000 0000 0000 0000 0000due = 0
0000 0000 0000 0000 0000 0000 0000 0001due = 1
…
31
0111 1111 1111 1111 1111 1111 1111 1111due = 2
- 1
31
1000 0000 0000 0000 0000 0000 0000 0000due = -2
31
1000 0000 0000 0000 0000 0000 0000 0001due = -(2
31
1000 0000 0000 0000 0000 0000 0000 0010due = -(2
…
1111 1111 1111 1111 1111 1111 1111 1110due = -2
1111 1111 1111 1111 1111 1111 1111 1111due = -1
– 1)
– 2)
31
Complemento a 2
0000 0000 0000 0000 0000 0000 0000 0000due = 0
0000 0000 0000 0000 0000 0000 0000 0001due = 1
…
0111 1111 1111 1111 1111 1111 1111 1111due = 231 - 1
1000 0000 0000 0000 0000 0000 0000 0000due = -231
1000 0000 0000 0000 0000 0000 0000 0001due = -(231 – 1)
1000 0000 0000 0000 0000 0000 0000 0010due = -(231 – 2)
…
1111 1111 1111 1111 1111 1111 1111 1110due = -2
1111 1111 1111 1111 1111 1111 1111 1111due = -1
Perché questa rappresentazione è utilizzata?
• Si consideri la somma di 1 e –2… si ottiene –1
• Si consideri la somma di 2 e –1… si ottiene 1
Questo formato permette di sommare senza nessuna trasformazione aggiuntiva!
Ogni numero rappresenta la quantità
31
30
29
1
0
x31(–2 ) + x302 + x292 + … + x12 + x02
31
31
Su 32 bit si rappresentano tutti i numeri da 2 – 1 a –2
Complemento a 2
0000 0000 0000 0000 0000 0000 0000 0000due = 0
0000 0000 0000 0000 0000 0000 0000 0001due = 1
…
0111 1111 1111 1111 1111 1111 1111 1111due = 231 - 1
1000 0000 0000 0000 0000 0000 0000 0000due = -231
1000 0000 0000 0000 0000 0000 0000 0001due = -(231 – 1)
1000 0000 0000 0000 0000 0000 0000 0010due = -(231 – 2)
…
1111 1111 1111 1111 1111 1111 1111 1110due = -2
1111 1111 1111 1111 1111 1111 1111 1111due = -1
La somma di un numero x e del suo complemento a 1 x’ è sempre uguale
a una stringa di 32 uni (corrispondente al numero –1)
x + x’ = –1 –x = x’ + 1
Analogamente, la somma di x e –x è uguale a una stringa di 32 zeri, con
un riporto di 1.
n
In realtà x + (–x) = 2 , da cui il nome complemento a 2
Esercizio
•
Calcolare le rappresentazioni in complemento a 2 su 32
bit dei seguenti numeri decimali:
5, –5, –6
5:
–5:
–6:
•
•
•
0000 0000 0000 0000 0000 0000 0000 0101
1111 1111 1111 1111 1111 1111 1111 1011
1111 1111 1111 1111 1111 1111 1111 1010
Dato –5 verificare che facendone il complemento a 1 e
sommando 1 si ottiene 5
Calcolare le stesse rappresentazioni usando solo 4 bit
Calcolare le stesse rappresentazioni usando solo 3 bit
Estensione di segno
•
Occasionalmente sarà necessario estendere numeri con segno
rappresentati su 16 bit su 32 bit,
•
Vuol dire trasformare la rappresentazione di un numero con segno su 16 bit
nel numero intero rappresentato, e calcolarne la rappresentazione su 32 bit
210: 0000 0000 0000 0010 →
0000 0000 0000 0000 0000 0000 0000 0010
–210: 1111 1111 1111 1110 →
1111 1111 1111 1111 1111 1111 1111 1110
•
La conversione è banale: si prende il bit più significativo e lo si usa per
riempire i bit aggiuntivi sulla sinistra
Rappresentazioni Alternative
Le seguenti due rappresentazioni intuitive furono scartate
poiché richiedevano dei passi di conversione addizionali
prima di poter effettuare operazioni aritmetiche
•
Modulo e segno: il bit più significativo rappresenta +/– e i
bit rimanenti rappresentano il valore assoluto del numero
•
Complemento a 1: –x è rappresentato invertendo tutti i bit
di x
Entrambe le rappresentazioni descritte soffrono del problema
della doppia rappresentazione dello zero
Scarica