In una delle molteplici possibili definizioni di ... · Quindi, in una notazione di tipo...

43
1 In una delle molteplici possibili definizioni di informazione, questa viene fatta corrispondere a qualunque elemento, in grado di essere rappresentato e comunicato, che consenta di fornire o aumentare la conoscenza su cose, fatti, ecc., attraverso meccanismi di tipo logico e razionale, ovvero anche, semplicemente, di dare coscienza dell‟esistenza di tali cose o fatti attraverso la sola percezione. L‟informazione si presenta tipicamente come flusso di dati, definibili quindi come elementi di informazione opportunamente strutturati in funzione di ciò che rappresentano. Alla base di qualunque processo di memorizzazione, elaborazione e trasmissione dell‟informazione vi è quindi la necessità di rappresentare l‟informazione stessa utilizzando insiemi di regole (codici) basati su simboli di cui coloro che dovranno condividerla devono essere in grado di comprendere il significato. In natura, l‟informazione si presenta, sia a livello percettivo che di comunicazione, in forma analogica. Ciò che fornisce informazione (il suono, la luce, il tatto) è basato sulla misurazione, attraverso opportuni strumenti o attraverso i sensi, della variazione continua nel tempo di una grandezza che noi consideriamo o percepiamo come proporzionale („analoga‟) al fenomeno che essa costituisce o rappresenta. Proprietà principale di un fenomeno continuo è la possibilità di assumere una infinità di valori all‟interno di un qualsivoglia intervallo, per quanto piccolo: in un intervallo compreso fra 0 e 100 metri è possibile immaginare infinite distanze intermedie, esattamente come fra 0 e 1000 km. Inoltre, un fenomeno continuo che si evolve nel tempo passando da una certa intensità ad un‟altra, assume, anche se per istanti di durata infinitesimale, tutti i possibili (infiniti) valori compresi fra il valore iniziale e quello finale. Al contrario, una grandezza discreta può assumere solo un numero limitato di valori e la sua variazione si realizza come successione di un numero finito di incrementi (decrementi) di ampiezza finita e, tipicamente, uguale a, o multipla di, una quantità prefissata. La rappresentazione numerica o digitale (dall‟inglese digit, cifra) dell‟informazione è una rappresentazione di tipo discreto. Ogni fenomeno di tipo quantitativo rappresentato in forma digitale è un‟approssimazione della realtà (che è tipicamente continua e, quindi, analogica) sotto forma di campioni. I valori dei campioni approssimano la misura esatta dell‟intensità che il fenomeno che rappresentano assume in corrispondenza di un insieme limitato di punti (istanti) di misura, normalmente fra loro equidistanti (nel tempo, nello spazio, o all‟interno di un qualche altro ordinamento). Se il numero di campioni utilizzati per rappresentare una quantità finita di informazione è sufficientemente grande, è possibile, a partire da tale rappresentazione approssimata, ricostruire il fenomeno continuo che essi rappresentano con una precisione arbitraria. La rappresentazione digitale di informazioni di tipo quantitativo è quindi costituita da un insieme limitato e ordinato di sequenze di simboli elementari (cifre). E‟ quindi naturale associare a tali sequenze valori numerici interi e positivi (il “valore” dei campioni in cui l‟informazione analogica viene scomposta), anche se, come vedremo, tale rappresentazione è utilizzata nei moderni calcolatori in un contesto molto più ampio della sola rappresentazione di numeri o di concetti di tipo quantitativo. Il calcolatore (digitale) nasce, in primo luogo, come strumento per fare operazioni aritmetiche. I calcolatori, in effetti, elaborano dati (costituiti, come detto, da sequenze di simboli elementari) che possono essere interpretati come numeri, compiendo operazioni meccaniche che possono essere assimilate a calcoli. Tuttavia, in funzione del contesto in cui operano, i calcolatori sono in grado di attribuire a tali sequenze significati diversi e più ampi della semplice rappresentazione di quantità numeriche. Questo fa sì che i calcolatori siano strumenti multimediali, utilizzabili, ad esempio, anche per elaborare e rappresentare suoni o immagini o, come nel caso dell‟Intelligenza Artificiale, per rappresentare ed elaborare concetti astratti, di tipo simbolico. Il calcolatore può quindi oggi essere considerato uno strumento universale per l‟elaborazione dell‟informazione. Utilizzando un calcolatore è virtualmente possibile elaborare ogni possibile forma di informazione sfruttando una stessa rappresentazione: la rappresentazione digitale. Nel seguito verranno esaminati i diversi tipi di dato e il modo in cui essi sono rappresentati all ‟interno del calcolatore.

Transcript of In una delle molteplici possibili definizioni di ... · Quindi, in una notazione di tipo...

1

In una delle molteplici possibili definizioni di informazione, questa viene fatta corrispondere a qualunque

elemento, in grado di essere rappresentato e comunicato, che consenta di fornire o aumentare la conoscenza

su cose, fatti, ecc., attraverso meccanismi di tipo logico e razionale, ovvero anche, semplicemente, di dare

coscienza dell‟esistenza di tali cose o fatti attraverso la sola percezione. L‟informazione si presenta

tipicamente come flusso di dati, definibili quindi come elementi di informazione opportunamente strutturati

in funzione di ciò che rappresentano.

Alla base di qualunque processo di memorizzazione, elaborazione e trasmissione dell‟informazione vi è

quindi la necessità di rappresentare l‟informazione stessa utilizzando insiemi di regole (codici) basati su

simboli di cui coloro che dovranno condividerla devono essere in grado di comprendere il significato.

In natura, l‟informazione si presenta, sia a livello percettivo che di comunicazione, in forma analogica. Ciò

che fornisce informazione (il suono, la luce, il tatto) è basato sulla misurazione, attraverso opportuni

strumenti o attraverso i sensi, della variazione continua nel tempo di una grandezza che noi consideriamo o

percepiamo come proporzionale („analoga‟) al fenomeno che essa costituisce o rappresenta.

Proprietà principale di un fenomeno continuo è la possibilità di assumere una infinità di valori all‟interno di

un qualsivoglia intervallo, per quanto piccolo: in un intervallo compreso fra 0 e 100 metri è possibile

immaginare infinite distanze intermedie, esattamente come fra 0 e 1000 km. Inoltre, un fenomeno continuo

che si evolve nel tempo passando da una certa intensità ad un‟altra, assume, anche se per istanti di durata

infinitesimale, tutti i possibili (infiniti) valori compresi fra il valore iniziale e quello finale.

Al contrario, una grandezza discreta può assumere solo un numero limitato di valori e la sua variazione si

realizza come successione di un numero finito di incrementi (decrementi) di ampiezza finita e, tipicamente,

uguale a, o multipla di, una quantità prefissata.

La rappresentazione numerica o digitale (dall‟inglese digit, cifra) dell‟informazione è una rappresentazione

di tipo discreto. Ogni fenomeno di tipo quantitativo rappresentato in forma digitale è un‟approssimazione

della realtà (che è tipicamente continua e, quindi, analogica) sotto forma di campioni. I valori dei campioni

approssimano la misura esatta dell‟intensità che il fenomeno che rappresentano assume in corrispondenza di

un insieme limitato di punti (istanti) di misura, normalmente fra loro equidistanti (nel tempo, nello spazio, o

all‟interno di un qualche altro ordinamento). Se il numero di campioni utilizzati per rappresentare una

quantità finita di informazione è sufficientemente grande, è possibile, a partire da tale rappresentazione

approssimata, ricostruire il fenomeno continuo che essi rappresentano con una precisione arbitraria.

La rappresentazione digitale di informazioni di tipo quantitativo è quindi costituita da un insieme limitato e

ordinato di sequenze di simboli elementari (cifre). E‟ quindi naturale associare a tali sequenze valori

numerici interi e positivi (il “valore” dei campioni in cui l‟informazione analogica viene scomposta), anche

se, come vedremo, tale rappresentazione è utilizzata nei moderni calcolatori in un contesto molto più ampio

della sola rappresentazione di numeri o di concetti di tipo quantitativo.

Il calcolatore (digitale) nasce, in primo luogo, come strumento per fare operazioni aritmetiche. I calcolatori,

in effetti, elaborano dati (costituiti, come detto, da sequenze di simboli elementari) che possono essere

interpretati come numeri, compiendo operazioni meccaniche che possono essere assimilate a calcoli.

Tuttavia, in funzione del contesto in cui operano, i calcolatori sono in grado di attribuire a tali sequenze

significati diversi e più ampi della semplice rappresentazione di quantità numeriche. Questo fa sì che i

calcolatori siano strumenti multimediali, utilizzabili, ad esempio, anche per elaborare e rappresentare suoni o

immagini o, come nel caso dell‟Intelligenza Artificiale, per rappresentare ed elaborare concetti astratti, di

tipo simbolico.

Il calcolatore può quindi oggi essere considerato uno strumento universale per l‟elaborazione

dell‟informazione. Utilizzando un calcolatore è virtualmente possibile elaborare ogni possibile forma di

informazione sfruttando una stessa rappresentazione: la rappresentazione digitale.

Nel seguito verranno esaminati i diversi tipi di dato e il modo in cui essi sono rappresentati all‟interno del

calcolatore.

2

Rappresentazione dei numeri La necessità di rappresentare numeri nasce in parallelo alla necessità di

comunicare, utilizzando un linguaggio in grado non solo di esprimere concetti qualitativi ma anche concetti

che esprimano quantità. Quindi, come è stato necessario creare un alfabeto ed i relativi simboli che lo

compongono per comporre parole e formare discorsi e, quindi, esprimere concetti, così anche per i numeri è

stato necessario trovare una rappresentazione basata su simboli. Analogamente a quanto accade con le lettere

dell'alfabeto nella composizione di parole e di frasi, una volta che siano composti secondo opportune regole,

tali simboli permettono di comunicare concetti di tipo quantitativo.

Una sequenza (stringa) di n simboli tratti da un insieme (alfabeto) di b simboli diversi, può assumere bn

configurazioni diverse. Nella numerazione in base 10, che ci è familiare, si usano sequenze di simboli che

comprendono le 10 cifre che vanno da 0 a 9. Quindi, nel caso della numerazione in base 10, con 4 cifre

decimali si possono rappresentare 10000 (104) numeri diversi, che associamo in modo naturale ai valori

interi da 0 (0000) a 9999. L‟associazione fra una sequenza di simboli e il corrispondente valore numerico da

esso rappresentato avviene attraverso una codifica, universalmente utilizzata, di tipo posizionale. Questo

significa che il significato attribuito alla stringa si ricava considerando sia il valore dei singoli simboli che la

posizione che questi assumono all'interno della stringa. Se, ad esempio, si considera la stringa 3457, essa

significa:

7 * 100 + 5 * 10

1 + 4 *10

2 + 3 * 10

3.

Quindi, in generale, se abbiamo una stringa ... x y z di simboli in base b, cioè appartenenti ad un alfabeto che

comprende b simboli, la quantità da essa rappresentata sarà z * b0 + y * b

1 + x * b

2 … e così via.

La cifra che si trova più a sinistra nel numero è detta cifra più significativa poiché è quella che, nella

decodifica del numero, viene moltiplicata per la potenza della base b di ordine più alto; quella più a destra è,

per lo stesso motivo, detta cifra meno significativa.

Quindi, in una notazione di tipo posizionale, per rappresentare le quantità è necessario per prima cosa

specificare la base che si vuole utilizzare. Nella vita di tutti i giorni siamo abituati ad utilizzare la notazione

in base 10 o decimale (b=10) che trova una radice storica nel fatto che abbiamo dieci dita, e quindi il metodo

più primitivo e intuitivo per comunicare concetti quantitativi è stato, da sempre, rappresentare con le dita le

quantità.

Se l‟uomo ha la capacità di rappresentare dieci quantità diverse con le mani, e quindi trova naturale l‟uso

della base 10, il calcolatore è costituito da circuiti in grado di assumere due soli stati: è quindi naturale

utilizzare, per descrivere i fenomeni elettrici che avvengono all‟interno dei calcolatori, ma anche per

progettarne la realizzazione fisica, una rappresentazione binaria (cioè in base 2), i cui simboli sono soltanto

0 e 1, che possono essere interpretati come „livello basso o alto‟, „interruttore aperto o chiuso‟, o come i

concetti di „falso o vero‟, se consideriamo la logica booleana con la quale, come si vedrà nel seguito, è

possibile rappresentare concetti e processi di tipo logico con un formalismo di tipo algebrico.

Conversione di numeri da una base ad un’altra

Dato un numero rappresentato in una certa base, può essere utile operare una conversione della sua

rappresentazione dalla base utilizzata a una base diversa. Per convertire in base N un numero espresso in

un‟altra base1, ad esempio in base 10, esiste un metodo molto semplice, detto metodo delle divisioni

successive, che viene illustrato nel seguito.

1 Quando si trattano grandezze che possono essere espresse in basi differenti, o comunque non è immediatamente evidente la base

che si sta utilizzando per la rappresentazione di un numero, si usa di solito una notazione in cui la sequenza di cifre che lo

rappresenta appare fra parentesi e la base appare come pedice. Quindi, in generale, un numero xyzt espresso in base b si indica

convenzionalmente con (xyzt)b.. Ad esempio, (1157)10 significa che la sequenza di cifre 1157 va interpretata in base 10.

3

Metodo delle divisioni successive

Passo base:

Si divide il numero da convertire (ad es. 1157) per la base nella quale lo si vuole convertire (ad es. 2, se si

vuole convertire un numero in binario) e si annota il resto della divisione:

1157 : 2 = 578 (con resto 1);

successivamente si procede allo stesso modo, dividendo il quoziente ancora per 2, (ottenendo, nel nostro

caso 289) e annotando il resto (nel nostro caso, 0), etc.... fino a quando non si ottiene un quoziente nullo.

La codifica nella nuova base del numero di partenza sarà costituita dalla successione dei resti a partire

dall'ultimo resto ottenuto e risalendo fino al primo (v. Esempio 1).

In questo modo (dividendo cioè per la base del sistema verso cui stiamo convertendo e considerando la

successione dei resti), è possibile effettuare la conversione di un numero nella corrispondente

rappresentazione in qualunque altra base.

E‟ possibile verificare che, se si applica il metodo utilizzando come „nuova base‟ la stessa base in cui il

numero è rappresentato (cioè si “converte” da una base verso la stessa base) la rappresentazione resta,

ovviamente, invariata.

Un'osservazione immediata che si può fare se si confrontano le rappresentazioni di una stessa quantità in più

basi diverse è che più piccola è la base, più lunga e meno leggibile diventa la rappresentazione della quantità

stessa; la rappresentazione decimale ha trovato un uso universale, al di là della derivazione „antropologica‟

legata al numero di dita che possediamo, anche perché consente di ottenere una rappresentazione dei numeri

sufficientemente compatta, a partire da un insieme sufficientemente limitato di simboli.

METODO DELLE DIVISIONI SUCCESSIVE

Esempio: conversione di 1157 da base 10 a base 2

1157:2 = 578 (resto 1)

578:2 = 289 (resto 0)

289:2 = 144 (resto 1)

144:2 = 72 (resto 0)

72:2 = 36 (resto 0)

36:2 = 18 (resto 0)

18:2 = 9 (resto 0)

9:2 = 4 (resto 1)

4:2 = 2 (resto 0)

2:2 = 1 (resto 0)

1:2 = 0 (resto 1) La rappresentazione binaria (successione dei resti) di 1157 è 10010000101. VERIFICA: 10010000101 = 1 x 2

0 + 0 x 2

1 + 1 x 2

2 + 0 x 2

3 + 0 x 2

4+ 0 x 2

5 + 0 x 2

6 + 1 x 2

7 + 0 x 2

8 + 0 x 2

9 + 1 x 2

10=

= 1 + 4 + 128 + 1024 = 1157

Esempio 1

4

Unità di misura binarie

Nella notazione in base 2 (notazione binaria) una singola cifra si chiama bit, che è la contrazione di

BINARY DIGIT che, in inglese, non significa altro che cifra binaria. Con un bit si possono rappresentare

soltanto due valori: 0 o l. Quindi la rappresentazione di una stessa quantità in binario richiede un maggior

numero di cifre rispetto alla rappresentazione in base 10 della stessa quantità.

All'interno del calcolatore i dati sono organizzati in sequenze di bit che vengono, anche fisicamente,

elaborate a blocchi di 8 bit o di dimensione pari a multipli di 8 bit.

Poiché la rappresentazione binaria, come quella decimale, è una rappresentazione posizionale, essa ne segue

le stesse regole. Quindi il bit all‟estrema sinistra di un numero binario è detto bit più significativo (o MSB =

Most Significant Bit), poiché viene moltiplicato per la potenza di 2 di ordine più elevato; quello più a destra

è detto, analogamente, bit meno significativo (LSB = Least Significant Bit).

Con i progressi nel campo della microelettronica, i circuiti (microprocessori) che eseguono le operazioni

all‟interno di un calcolatore sono stati in grado di gestire contemporaneamente un numero sempre più

elevato di bit: nelle prime generazioni dei personal computer il blocco di dati normalmente elaborati dal

calcolatore in una singola operazione era una stringa di 8 bit, cioè un byte. Attualmente esistono calcolatori

con microprocessori che possono elaborare, con una singola operazione, quantità rappresentate da 16, 32 o

64 bit.

A partire dalla definizione di byte come stringa di 8 bit, è possibile definire le unità di misura utilizzate in

campo informatico, come multipli del byte. Un Kilobyte (KB) è uguale a circa 1000 byte; in realtà sono 1024

byte perché 1024 (210

) è la potenza di 2 più vicina a 1000, e viene usata come multiplo convenzionale

quando si opera in base 2. A sua volta 1 Megabyte (MB) equivale a 1024 KByte (cioè 1024x1024 byte).

Quindi non è esattamente 1 milione di byte ma un numero lievemente superiore. 1 Gigabyte (GB) sarà a sua

volta 1024 Mbyte, cioè 210

MByte, ovvero 220

KByte, ovvero 230

byte, cioè poco più di un miliardo di byte.

Altre rappresentazioni utilizzate in informatica

E‟ stato evidenziato in precedenza come, utilizzando la codifica binaria, si ottenga una rappresentazione

estremamente lunga e poco leggibile delle quantità numeriche. Questo ha portato ad utilizzare, per esigenze

di compattezza di notazione, rappresentazioni in basi diverse da 2, ma che fossero comunque potenze di 2:

sono state utilizzate rappresentazioni di tipo ottale (b=8; simboli da 0 a 7) e esadecimale (base 16) che

utilizza i dieci simboli che vanno da 0 a 9, cui si aggiungono, per raggiungere un totale di 16, le prime sei

lettere dell'alfabeto che sono a, b, c, d, e, f, corrispondenti, rispettivamente, ai valori decimali 10, 11, 12, 13,

14 e 15.

Se una base b è potenza di 2 (cioè b=2n), la rappresentazione binaria di una delle cifre che la compongono

corrisponde esattamente a un gruppo di n cifre. Pertanto, un modo molto semplice per convertire un numero

binario in un numero in una base che sia potenza di 2 consiste nel raggruppare il numero binario che si vuole

convertire, a partire dal LSB, cioè da destra, in sequenze di n bit (quindi di 3 bit se si sta lavorando in ottale

(23=8), di 4 bit (2

4=16) se si sta lavorando in esadecimale, ecc.) per poi convertire tali sequenze nella cifra

corrispondente. Ad esempio, se si suddivide un numero binario in gruppi di 3 bit (con cui si possono

rappresentare 8 simboli, vale a dire le cifre da 0 a 7), a partire dal bit meno significativo, e ad esse si

sostituisce il corrispondente valore, si ottiene immediatamente la conversione del numero binario nella

corrispondente rappresentazione ottale.

Ad esempio, la rappresentazione ottale del numero decimale 1157 (in binario 10 010 000 101) è 2205, che

corrisponde a 5*80 + 0*8

1 + 2*8

2 + 2*8

3 (v. Esempio 2).

Se, invece, si vuole effettuare la conversione in esadecimale si devono considerare gruppi di bit in grado di

rappresentare 16 valori diversi, quindi ogni gruppo di 4 cifre binarie, a partire dal LSB, verrà messo in

corrispondenza con la cifra esadecimale che rappresenta il valore espresso da tale gruppo di bit. In questo

caso (1157)10 = (100 1000 0101)2 = (485)16. Si noti come, in questo modo, un byte (una sequenza di 8 bit) sia rappresentato da due sole cifre esadecimali.

5

Siccome, normalmente, la quantità di dati elaborati contemporaneamente dal calcolatore è un multiplo pari

di 8 bit, talvolta risulta pratico utilizzare la rappresentazione esadecimale per rappresentare in modo

compatto le sequenze binarie utilizzate all‟interno del calcolatore.

CONVERSIONE ESADECIMALE-BINARIO-DECIMALE

Cifra Numero Decimale Decimale Decimale Decimale

Esadecimale Binario Cifra OOOX Cifra OOXO Cifra OXOO Cifra XOOO

______________________________________________________________________ 0 0000 0 0 0 0 1 0001 1 16 256 4096

2 0010 2 32 512 8192

3 0011 3 48 768 12288

4 0100 4 64 1024 16384

5 0101 5 80 1280 20480

6 0110 6 96 1536 24576

7 0111 7 112 1792 28672

8 1000 8 128 2048 32768

9 1001 9 144 2304 36864

A 1010 10 160 2560 40960

B 1011 11 176 2816 45056

C 1100 12 192 3072 49152

D 1101 13 208 3328 53248

E 1110 14 224 3584 57344

F 1111 15 240 3840 61440

_______________________________________________________________________________________ Tabella di conversione binario/decimale/esadecimale

Conversione binario - ottale

Conversione binario - esadecimale

(1221) 10 = (10011000101) 2

Binario - ottale

( 10 011 000 101)2 = (2 3 0 5)8

2 3 0 5

ogni gruppo di 3 bit corrisponde ad una cifra ottale

Binario – esadecimale

(100 1100 0101) (4 C 5)16

4 C 5

ogni gruppo di 4 bit corrisponde ad una cifra esadecimale

Esempio 2

6

Addizione binaria

Una volta definita la rappresentazione dei numeri nel sistema binario, vediamo le operazioni che si possono

compiere su di essi. La più semplice operazione che si può compiere, qualunque sia la base utilizzata, è

l'addizione. Come nel caso decimale, se si conosce il risultato dell‟addizione di 2 cifre qualsiasi, è possibile,

operando „per colonne‟, sommare numeri di qualunque lunghezza.

Nel caso decimale le 10 cifre da 0 a 9 danno origine a 100 (102) combinazioni possibili.

Nel caso binario, se si considera la somma di due bit, si possono verificare solamente quattro (22) possibili

combinazioni:

0 + 0 = 0

0 + 1 = 1

1 + 0 = 1

1 + 1 = 10 (rappresentazione binaria di 2; in questo caso, eseguendo l‟addizione, il risultato è zero

e si riporta 1 sulla colonna alla sinistra di quella su cui si sta operando, così come accade

quando si effettua la somma 9+1 in decimale).

Per fare un'addizione si opera come nel caso di un'addizione decimale: l‟Esempio 3 mostra come eseguire la

somma fra interi positivi 152 + 86, avendo a disposizione 8 bit per la loro rappresentazione, quindi potendo

rappresentare i 256 (28) numeri da 0 a 255.

ADDIZIONE BINARIA

Se si opera su singoli bit

0 + 0 = 0

0 + 1 = 1 N.B. (10)2 = (2)10

1 + 0 = 1

1 + 1 = 10 (cioè, facendo l'addizione, scrivo zero e riporto 1)

In decimale: (1)

1 5 2 +

8 6 (N.B. 5 + 8 = 13 scrivo 3 e riporto 1)

2 3 8

In binario:

(152)10 = (10011000)2

(86)10 = (01010110)2

Applicando le 4 ‘regole’ alle coppie di bit corrispondenti (1)

10011000 +

01010110

11101110

Esempio 3

7

Quando tuttavia si lavora al limite delle capacità di rappresentazione del calcolatore esistono opportuni

circuiti e opportuni bit che evidenziano condizioni di errore. Ad esempio possono verificarsi situazioni in cui

il risultato di un‟operazione è troppo grande per essere rappresentato in modo corretto, come accade se si

cerca di fare la somma 1+1 utilizzando una rappresentazione su un solo bit. In tal caso sarebbero necessari 2

bit per rappresentare correttamente il risultato (10)2.

Questa condizione, in cui il numero di cifre necessarie a rappresentare in modo esatto un numero è maggiore

delle cifre effettivamente disponibili per la sua rappresentazione, si dice condizione di overflow

(traboccamento).

Se, ad esempio, anziché 86 si fosse voluto sommare a 152 il numero 118 (v. Esempio 4), il risultato sarebbe

stato 270. Ma 270 è maggiore di 255, cioè maggiore del più grande numero rappresentabile con 8 bit. In tal

caso, in corrispondenza della cifra più significativa dei due addendi si sarebbe ottenuto come risultato 0 con

riporto 1. Tuttavia non ci sarebbe stato spazio per rappresentare il bit derivante dal riporto negli 8 bit a

disposizione per il risultato.

All'interno del calcolatore questo bit „in eccesso‟ viene inserito in un apposito registro della CPU (v. seguito)

e si chiama bit di overflow: esso indica che si sono superate le capacità di rappresentazione della macchina.

CONDIZIONE DI OVERFLOW

152 + 10011000+

118 01110110

____ ________

270 (1) 00001110 00001110

270 non è rappresentabile con 8 bit!

bit di overflow (riporto derivante dalla somma dei due bit più significativi)

Esempio 4

L'operazione di addizione fra numeri in base 2 viene eseguita quindi in modo del tutto analogo a quella fra

numeri in rappresentazione decimale. Del resto, come detto, entrambe le notazioni sono di tipo posizionale e

sono quindi soggette alle stesse regole.

Sottrazione binaria (rappresentazione di numeri relativi)

Anche per la sottrazione si potrebbe operare in modo del tutto simile al caso decimale. Tuttavia, utilizzando

una opportuna rappresentazione, è possibile fare in modo che sottrazioni e addizioni possano essere

effettuate utilizzando la stessa operazione e quindi, all‟interno del calcolatore, utilizzando gli stessi circuiti.

Sinora si sono considerati solo numeri interi positivi (detti anche numeri naturali). Per poter fare le

sottrazioni si introducono i numeri relativi, che permettono di rappresentare quantità numeriche sia positive

che negative. Nell'algebra classica, a livello notazionale, si rendono uniformi i concetti di addizione e

sottrazione facendo equivalere l'operazione a - b alla somma a + (-b). Perché questa equivalenza si riscontri

anche quando si devono eseguire, in modo meccanico, addizioni fra numeri relativi (quindi addizioni e

sottrazioni secondo la stessa regola meccanica) e perché tali operazioni possano essere realizzate secondo le

stesse regole viste per i numeri naturali, è necessario ricorrere alla cosiddetta aritmetica del complemento.

Se utilizziamo la rappresentazione binaria, si definisce complemento a 2 di un numero m, rappresentato con

N bit, la differenza fra 2 elevato alla N ed m, cioè

C(m) = 2 N - m

8

In generale, data una base b e una rappresentazione su N cifre in base b si definisce complemento a b di m il

numero C(m) = b N - m

Si noti che, qualunque sia la base, l‟operazione di complemento stabilisce una corrispondenza biunivoca fra

un numero e il suo il complemento. Infatti, il complemento del complemento di un numero è il numero

stesso: C(m) = bN - m; quindi: C(C(m)) = C(b

N - m) = bN

- (bN - m) = b

N - b

N + m = m .

Nell‟aritmetica del complemento, i numeri negativi (e solo quelli!) si rappresentano mediante quella che, se

si stesse rappresentando un numero naturale, corrisponderebbe alla rappresentazione del complemento del

loro valore assoluto. Ad esempio, la rappresentazione in complemento a 2 con N = 8 bit del numero -32

corrisponde alla rappresentazione in base 2 del numero naturale 28 – 32 = 256 - 32 = 224, cioè del

complemento a 2 di 32 (v. Esempio 5a)

_________________________________________________________________________ COMPLEMENTO DI UN NUMERO

Data una rappresentazione su N bit, si definisce COMPLEMENTO A 2 DI UN NUMERO m il

numero 2N - m, e si indica con C(m)

C(m) = 2N - m

(a)

(32)10 = (00100000)2 (N = 8)

C(32) = 28 - 32 = 256 - 32 = 224 = (11100000)2

(b)

Si noti che C(m) = 2N - m = (2

N - 1) - m + 1

Quindi C(32) = (255 - 32) + 1

Se calcoliamo 255 - 32 ( = 223 ), il risultato espresso in binario è

11011111

Ma 32 è uguale a 00100000 (cioè lo stesso numero con 0 e 1 scambiati)

Quindi, per rappresentare [(2N – 1) – m] basta trasformare in 1 ogni 0 di m e in 0 ogni 1

Aggiungendo poi 1 (poiché C(m) = (2N – m) )

11011111 +

1 _________________________

11100000 ottengo lo stesso risultato dell'esempio (a).

Quindi, come regola meccanica, si può dire che per ottenere il complemento di un numero

si trasformano in 0 gli 1 e viceversa, aggiungendo infine 1 al risultato ottenuto. _____________________________________________________________________________ Esempio 5

9

Esiste, comunque, una regola meccanica che semplifica l'operazione di complementazione (v. Esempio 5b).

Esprimiamo il complemento a 2 di un numero come:

C(m) = 2N - m = [(2

N - 1) – m] + 1

Si osserva che, nel caso N=8, 2N - 1 è pari a 255, ovvero, in binario, a 11111111. Analogamente, qualunque

sia N, il numero naturale 2N – 1 è sempre rappresentato da una stringa di N bit, tutti uguali a 1. Se si sottrae

un qualunque numero m da tale valore è facile vedere che il risultato è un numero rappresentato come il

numero da complementare, in cui tuttavia ogni 0 viene sostituito da un 1 e viceversa. Abbiamo quindi

ottenuto una semplice regola meccanica che, in un solo passo, permette di calcolare la quantità [(2N - 1) –

m]. Per ottenere il complemento a 2 di m non resta quindi che sommare 1 al risultato così ottenuto.

Si noti che, nella rappresentazione degli interi in complemento a 2, i numeri che hanno 0 come MSB sono

positivi e possono essere interpretati come se fossero numeri naturali, mantenendo quindi consistenza con la

rappresentazione utilizzata per questi ultimi. Al contrario, quelli che hanno 1 come MSB rappresentano

numeri negativi (v. Esempio 6) e devono essere decodificati con la regola del complemento, tenendo cioè

conto che rappresentano numeri negativi il cui valore assoluto (il numero privato del segno) è 2N – m, dove

m è il valore che rappresenterebbe la sequenza di bit che stiamo considerando se la interpretassimo come

numero naturale.

_______________________________________________________________________________________ SOTTRAZIONE BINARIA

46 46 è positivo, quindi segue la normale rappresentazione

-127 -127 va invece rappresentato con il complemento

____

- 81

(46)10 = (00101110)2

(-127) 10= C(127) = (10000001) 2

Infatti (127)10 = (01111111)2

Usando il semplice procedimento visto in precedenza si scambiano 0 e 1, ottenendo

10000000 (equivale a fare 255 - 127); poi si aggiunge 1, e si ottiene 10000001

46 – 127 = 46 + (-127) .

Eseguo l'addizione:

46 + 00101110 +

- 127 = 10000001 = ___________ ________

- 81 10101111

VERIFICA: Il risultato è un numero che inizia per 1, quindi è la rappresentazione

complementata di un numero negativo. Per conoscerne il valore assoluto bisogna operare

la complementazione.

C (10101111) = 01010000 + 1 = 01010001 = (81)10,

Quindi il risultato è - 81

Esempio 6 Pertanto, utilizzare la rappresentazione in complemento a 2 consente di usare lo stesso procedimento (e lo

stesso circuito all‟interno del calcolatore) per effettuare sia le addizioni che le sottrazioni. L'unica differenza

rispetto all'addizione fra numeri naturali riguarda la condizione di overflow. Nel caso di addizioni fra numeri

naturali, infatti, ogni qualvolta il bit di overflow (che coincide col riporto derivante dalla somma dei bit più

10

significativi) vale 1, ciò indica che si è superata la capacità della parola utilizzata per la rappresentazione; si

genera quindi una condizione di errore. Nel caso invece dell'estensione dell'addizione ai numeri negativi non

basta che il bit di overflow sia 1, ma è necessario confrontare il bit di overflow con il riporto che si è avuto

sulla cifra più significativa; se questi due bit sono diversi, si ha una condizione di errore; se sono uguali, il

risultato è corretto (v. Esempio 7) .

Trascurare la condizione di overflow può portare a risultati abbastanza curiosi. Ad esempio, utilizzando 8 bit

per rappresentare i numeri relativi, se consideriamo il numero 127 e sommiamo 1, otteniamo una

rappresentazione che, interpretata come numero naturale, equivarrebbe a 128; con la convenzione vista per i

numeri relativi, invece, essa è la rappresentazione di -128. Quindi, è importante avere sempre presente, una

volta che sia siano stabiliti tipo e lunghezza (numero di bit) della rappresentazione, l‟intervallo entro il quale

i numeri devono essere compresi per essere rappresentati in modo corretto. Se si rappresentano numeri

naturali, con le 2N combinazioni ottenibili con N bit si possono rappresentare i 2

N numeri da 0 a 2

N -1.

Utilizzando invece la rappresentazione complementata per rappresentare i numeri relativi, i 2N numeri

rappresentabili con N bit dovranno essere divisi in ugual misura fra numeri negativi e numeri positivi (che

comprendono anche lo zero); quindi con N bit si potranno rappresentare i numeri che vanno da -2N-1

a +2N-1

–1, cioè ad es. da –128 a 127, se si usa una rappresentazione su 8 bit. _______________________________________________________________________________________________________

CONDIZIONE DI OVERFLOW NELLA RAPPRESENTAZIONE COMPLEMENTATA Se si usa l'aritmetica del complemento, non basta osservare il solo bit di overflow, ma si deve confrontare il bit di overflow con il riporto avuto sull'ultima cifra (bit di carry).

Se i 2 bit sono diversi si ha CONDIZIONE DI OVERFLOW

Se i 2 bit sono uguali non si ha CONDIZIONE DI OVERFLOW. Se esaminiamo l'esempio 6: (0) < ------------------ bit di carry

46 + 00101110 + -127 = 10000001 ____ ________

-81 (0)* 10101111 * = bit di overflow (riporto dovuto alla somma delle ultime due cifre)

I 2 bit sono uguali e quindi il risultato, rappresentato con gli 8 bit a disposizione, è corretto. Se invece avessimo provato a fare: (0)

-20 + 11101100 + -110 10010010 ____ _________ -130 (1) 01111110 Questa volta i 2 bit sono diversi. Infatti il risultato rappresentato dagli 8 bit, corrispondente a +126, non è quello desiderato. Infatti con 8 bit si possono rappresentare numeri compresi nell’intervallo da -128 a +127. _____________________________________________________________________________ Esempio 7

11

Riepilogando, è stato dapprima mostrato come rappresentare e sommare numeri interi positivi (naturali); poi,

introducendo la notazione complementata, si è mostrato come sia possibile utilizzare la stessa operazione per

effettuare l'addizione fra interi relativi (che assumono valori positivi o negativi). La sottrazione di un numero

diviene quindi equivalente alla somma col corrispondente numero negativo e può essere effettuata seguendo

le stesse regole utilizzate per sommare i numeri naturali.

Diamo infine un rapido sguardo anche alle divisioni ed alle moltiplicazioni; esiste una proprietà della

notazione posizionale per la quale, se si fa scorrere la rappresentazione di un numero (es. il numero decimale

105) verso sinistra (ottenendo 1050), si moltiplica di fatto quel numero per la base; infatti in questo caso

1050 = 105*10. Analogamente, dato un numero binario, ad es. 1101, che è la rappresentazione binaria di

(13)10, se si compie la stessa operazione, cioè uno shift (scorrimento) verso sinistra, si ottiene 11010, che

corrisponde al numero decimale 26. Anche in questo caso, uno shift di una posizione verso sinistra ha come

conseguenza la moltiplicazione del numero di partenza per la base, in questo caso per 2. Analogamente si

può vedere che lo scorrimento di un numero di una posizione verso destra equivale alla divisione del numero

stesso per la base. Nel caso del numero decimale 105, considerando solo la parte intera del quoziente (stiamo

comunque operando su numeri interi), si ottiene 10, che è il quoziente di 105:10. Anche nel caso binario,

shiftando verso destra 1101 (rappresentazione di 13), si ottiene 110, che è la rappresentazione binaria di 6,

che è il quoziente della divisione fra interi 13:2.

RAPPRESENTAZIONE DI NUMERI INFERIORI ALL'UNITA'

Vediamo ora come si possono rappresentare in base 2 i numeri inferiori all'unità (v. Esempio 8). Partiamo da

un esempio in base 10: il numero 19.375 significa, per ciò che riguarda la parte intera, 1x101 + 9x10

0.

Continuando dopo la virgola, la regola applicata resta la stessa: infatti, proseguendo verso destra, si continua

a moltiplicare le cifre corrispondenti per potenze decrescenti di 10, quindi .375 rappresenta 3x10-1

+ 7x10-2

+ 5x10-3

, cioè 3/10 + 7/100 + 5/1000.

Anche a livello di numerazione binaria possiamo compiere esattamente la stessa operazione.

RAPPRESENTAZIONE (IN VIRGOLA FISSA) DEI NUMERI INFERIORI ALL'UNITA'

Base 10

19.375 = 1x101 + 9x10

0 + 3x10

-1 + 7x10

-2 + 5x10

-3

Base 2

10011.011 = 1x24 + 0x2

3 + 0x2

2+ 1x2

1 + 1x2

0 + 0x2

-1 + 1x2

-2 + 1x2

-3

CONVERSIONE PARTE INTERA CONVERSIONE PARTE DECIMALE

19:2 = 9 (resto 1)

9:2 = 4 (resto 1) 0.375 x 2 = 0.75

4:2 = 2 (resto 0) 0.75 x 2 = 1.5

2:2 = 1 (resto 0) 0.5 x 2 = 1.0 => 011

1:2 = 0 (resto 1) => 10011

Esempio 8

Vediamo come convertire un numero inferiore all‟unità nella sua rappresentazione binaria. Si moltiplica per

2 il numero da trasformare e si annota la parte intera del risultato. Si considera poi la parte inferiore all‟unità

del risultato e la si moltiplica nuovamente per 2, ripetendo l‟operazione finché la parte inferiore all‟unità non

diventa zero o fino a quando la successione dei risultati non inizia a ripetersi (numero periodico). La

12

rappresentazione binaria della parte inferiore all‟unità è quindi data dalla sequenza delle parti intere dei

risultati ottenuti, nel nostro caso 011.

Non tutti i numeri che hanno una rappresentazione finita in una base, cioè per rappresentare i quali in tale

base è sufficiente un numero finito di cifre, hanno una rappresentazione finita anche in un‟altra base. Si

pensi al caso di 1/3 che, in base 3, può essere rappresentato come 0.1, mentre in base 10 è un numero

periodico 1/3 = 0.3333333……

L'unico caso in cui si ottiene sempre un numero finito di cifre è la conversione dalla base di partenza ad una

base che è una sua potenza. Se è possibile ottenere una rappresentazione finita in base 2 per un numero,

avremo una rappresentazione finita per esso anche in base 4, 8, 16 e così via, come si è visto nel caso della

conversione di un numero da binario a esadecimale; si è visto infatti che essa consiste nella conversione di

successivi raggruppamenti di 4 cifre binarie nelle corrispondenti cifre esadecimali.

Si consideri (Esempio 9) il numero 0.31, che ha una rappresentazione finita in base 10. Operiamo la

conversione in binario usando lo stesso procedimento visto in precedenza.

Si ottiene un numero periodico che approssima, ma non rappresenta esattamente, il numero di partenza.

_______________________________________________________________________________________ (0.31)10 0.31 x 2 = 0.62 0.62 x 2 = 1.24 0.24 x 2 = 0.48 ___________________ 0.48 x 2 = 0.96 0.010011110101010000101 0.96 x 2 = 1.92 0.92 x 2 = 1.84 0.84 x 2 = 1.68 0.68 x 2 = 1.36 0.36 x 2 = 0.72 0.72 x 2 = 0.44 0.44 x 2 = 0.88 0.88 x 2 = 1.76 0.76 x 2 = 0.52 0.52 x 2 = 1.04 0.04 x 2 = 0.08 0.08 x 2 = 0.16 0.16 x 2 = 0.32 0.32 x 2 = 0.64 0.64 x 2 = 1.28 0.28 x 2 = 0.56 0.56 x 2 = 1.12 0.12 x 2 = 0.24 ……………

Esempio 9

Questa proprietà crea problemi nel caso in cui sia necessario ottenere la stessa precisione che si avrebbe

lavorando in base 10. Ad esempio, nelle applicazioni gestionali, se si eseguono molte operazioni in

sequenza, anche piccoli arrotondamenti possono portare ad errori rilevanti. In questi casi si può usare la

cosiddetta rappresentazione BCD (Binary Coded Decimal): si rappresentano cioè i numeri decimali cifra per

cifra. I dieci simboli da 0 a 9, che sono utilizzati in base 10, si possono rappresentare ciascuno coi

corrispondenti gruppi di 4 bit. Utilizzando poi meccanismi diversi per eseguire le operazioni, ogni cifra

decimale viene rappresentata singolarmente da un gruppo di 4 bit. Si ottengono quindi sempre

rappresentazioni finite e la stessa precisione che si avrebbe operando in decimale. Ci sono però degli

inconvenienti: con 4 bit si potrebbero rappresentare 16 valori; in questo caso invece si utilizzano 4 bit per

rappresentare 10 valori; quindi, con 4 cifre BCD, cioè con 16 bit, si possono rappresentare i numeri da 0 a

9999, cioè 10000 numeri, mentre la rappresentazione binaria consentirebbe, con 16 bit, di rappresentare

65536 numeri diversi numeri, ad es. i naturali da 0 a 65535. Ciò comporta che la rappresentazione BCD sia

13

ancora meno compatta di quella binaria; poiché inoltre, per effettuare le operazioni, si devono utilizzare

regole diverse e più complesse da quelle che sono normalmente utilizzate dal calcolatore quando esegue

operazioni direttamente in binario, queste vengono eseguite dal calcolatore ad una velocità notevolmente

inferiore.

Normalmente, un programma che richiede una maggiore occupazione di memoria è più veloce di un

programma che esegue le stesse operazioni utilizzando meno memoria e viceversa. In questo caso, sotto

entrambi i punti di vista, si ha un peggioramento delle prestazioni del calcolatore: si usa più memoria e si

eseguono più lentamente le operazioni, pur di avere una rappresentazione esatta dei numeri. Questa

notazione resta quindi confinata ad applicazioni particolari; ad esempio, per applicazioni gestionali sono stati

definiti linguaggi, come ad es. il COBOL, che possono utilizzare questa notazione per ottenere una maggiore

precisione. Si possono rappresentare anche numeri con parte inferiore all‟unità sottintendendo che la virgola

si trovi in una posizione prefissata e continuando a rappresentare ogni cifra decimale con la rappresentazione

BCD.

BCD (BINARY CODED DECIMAL)

I numeri decimali si rappresentano, cifra per cifra, a gruppi di 4 bit.

Es.: (1579)10 = (0001010101111001)BCD

Infatti le sequenze di 4 bit

0001 0101 0111 1001

rappresentano le 4 cifre decimali

1 5 7 9

Esempio 10

Rappresentazione in virgola mobile

Abbiamo sinora parlato della rappresentazione binaria dei numeri inferiori all‟unità senza porre alcun limite

alla lunghezza delle parole utilizzate. Nel calcolatore si usano parole di lunghezza finita, ad esempio 8, 16 o

32 bit. E‟ quindi necessaria una rappresentazione che permetta di rappresentare qualunque numero decimale

con la massima precisione consentita dalla lunghezza della rappresentazione utilizzata.

A tal fine si utilizza la cosiddetta rappresentazione in virgola mobile (floating point). E‟ una notazione di

tipo esponenziale, in cui la sequenza di N bit utilizzata per rappresentare un numero reale viene suddivisa in

3 parti: un bit di segno, un certo numero di bit che rappresenta la cosiddetta caratteristica (o esponente) e,

infine, la cosiddetta mantissa, rappresentata di solito con un numero di bit superiore a quello dell‟esponente.

Quindi, la rappresentazione di un numero in virgola mobile è una sequenza binaria ottenuta dalla

concatenazione delle rappresentazioni di 3 “numeri” diversi, aventi ognuno una propria codifica e un proprio

significato. Il primo è il segno, costituito da un unico bit (0 per i numeri positivi e 1 per i numeri negativi).

La mantissa e l‟esponente, invece, rappresentano il valore assoluto del numero in notazione esponenziale,

che rappresenta un generico numero n nel formato n = +/- m x Be (m= mantissa, B= base, e= esponente).

Utilizzando una rappresentazione di questo tipo, si potrebbe rappresentare uno stesso numero in infiniti modi

diversi. Ad es., in base 10, 100 può essere espresso come 100 x 100, o 1 x 10

2, o anche come 0.1 x 10

3, ecc.,

come mostrato nell‟Esempio 11.

Tali rappresentazioni del numero 100 corrispondono, rispettivamente, a mantissa=100 ed esponente=0, a

mantissa=1 ed esponente=2, e a mantissa=0.1 ed esponente=3. Per rendere univoca la rappresentazione di un

numero in virgola mobile si impone che la mantissa sia sempre inferiore all‟unità e abbia la cifra più

significativa diversa da 0; si sottintende cioè che la virgola sia posizionata a sinistra della cifra più

significativa della mantissa (normalizzazione della mantissa). Se lavoriamo in binario, B è fissato ed è

ovviamente uguale a 2. Per quello che riguarda il segno, la regola è quella appena ricordata. Resta quindi da

vedere come codificare la mantissa e l‟esponente, dato il numero che si vuole rappresentare.

14

La mantissa è una sequenza di bit che comprende tutte le cifre significative del numero, cioè tutti i bit

necessari a rappresentarlo in modo esatto, a partire dall‟1 più significativo all‟1 meno significativo, ammesso

che la lunghezza della rappresentazione utilizzata lo consenta. Il segno, come già detto, è rappresentato

separatamente mediate un bit ad esso “dedicato”. La mantissa viene rappresentata quindi con la stessa

convenzione utilizzata per la rappresentazione del valore assoluto di un numero in virgola fissa, supponendo

che la virgola si trovi alla estrema sinistra del numero. La sequenza di bit che rappresenta la mantissa è

quindi esattamente la stessa che si otterrebbe rappresentando il numero in virgola fissa e spostando la virgola

all‟immediata sinistra della cifra più significativa.

RAPPRESENTAZIONE IN VIRGOLA MOBILE

Stabilita la lunghezza della parola, essa viene suddivisa in 3 parti

Segno | Mantissa | Esponente

Si usa una notazione di tipo esponenziale; cioè si esprime un numero n come

n = +/- m x Be (B = base)

In questo modo si possono avere più rappresentazioni per uno stesso numero.

Es. (in base 10, cioè B=10)

100 1 x 102 m = 1 c = 2

100 x 100 m = 100 c = 0

0.1 x 103 m = .1 c = 3

Esempio 11

Ad esempio, (10.25)10 in virgola fissa corrisponde a (1010.01)2 . Pertanto la mantissa è in questo caso

rappresentata dalla sequenza di bit 101001 che corrisponde, per la convenzione cui si è appena accennato, al

numero (0.101001)2 . Se le cifre a disposizione per rappresentare la mantissa sono meno delle cifre

significative necessarie a rappresentare in modo esatto il numero che dobbiamo convertire, si trascurano i bit

meno significativi (quelli cioè che si trovano alla estrema destra del numero), fino a raggiungere il numero di

bit richiesto. Ad esempio, se avessimo avuto a disposizione soltanto 5 bit per rappresentare la mantissa di

(10.25)10 questa sarebbe diventata 10100, trascurando il bit meno significativo.

Tuttavia, normalizzando la mantissa, nell‟esempio fatto è stata operata una divisione del numero per 24 (si

ricordi che uno scorrimento a sinistra della virgola di N posizioni, in qualunque base, corrisponde alla

divisione del numero di partenza per la base elevata alla N). Per ottenere il valore che si vuole rappresentare

è quindi necessario moltiplicare la mantissa per la stessa quantità per cui esso è stato diviso. Nell‟esempio

fatto, quindi, è necessario moltiplicare per 24. Questo determina automaticamente il valore dell‟esponente

che, nell‟esempio, sarà quindi pari a 4, cioè (100)2. L‟esponente, tuttavia, può assumere valori anche negativi

(si provi, ad esempio, a compiere le stesse operazioni per convertire il numero 0.25, che, con le convenzioni

viste viene rappresentato come + .1 x 2-1

) e quindi la sequenza di bit che lo rappresenta deve essere in grado

di rappresentare anche numeri negativi. Perciò, per codificare l‟esponente si deve usare la rappresentazione

in complemento a 2, poiché l‟esponente è un numero relativo. Nel caso del numero decimale 0.25,

utilizzando 4 bit per l‟esponente, ad esempio, la sequenza di bit che codifica in binario l‟esponente risulta

1111, cioè la codifica su 4 bit di –1.

Riepilogando, dato un numero n da convertire in virgola mobile con k bit di mantissa ed e bit di esponente:

Il bit di segno è 0 se n è positivo; 1 se n è negativo

Per determinare la mantissa si converte il valore assoluto del numero in virgola fissa: la mantissa è

costituita dalla sequenza delle k cifre più significative di tale rappresentazione.

15

Si sottintende che la rappresentazione della mantissa sia normalizzata, cioè che la virgola si trovi

all‟estrema sinistra del numero, cioè che la cifra più significativa risulti moltiplicata per 2-1

L‟esponente è un numero il cui valore rappresenta il numero di posizioni di cui la virgola è stata spostata

per operare la normalizzazione delle mantissa. E‟ positivo se la virgola è stata spostata a sinistra e

negativo se la virgola è stata spostata a destra. E‟ rappresentato in complemento a 2: pertanto, se è

negativo, per la sua rappresentazione bisogna complementare il suo valore assoluto.

Supponiamo di lavorare con 8 bit di mantissa e 4 bit di esponente e rappresentiamo il numero 1.5 in virgola

mobile: sappiamo che è uguale a 1 + ½ cioè, in binario, 1.1 . Si è detto che, per convenzione, la mantissa

deve comprendere le cifre più significative del numero (le cifre che compongono il numero a partire dal

primo 1), cioè la mantissa deve essere normalizzata. In questo caso, quindi, la rappresentazione della

mantissa sarà 11000000 che rappresenta il numero binario 0.11 . Questa sequenza binaria corrisponde alla

rappresentazione da cui si era partiti, in cui la virgola è stata spostata a sinistra di una posizione (si è diviso

per 2 il numero, passando da 1.1 a 0.11). Per rappresentare correttamente il numero da convertire, bisogna

tornare a moltiplicare la mantissa per 2 (cioè per 21), quindi si deve porre l‟esponente = 1, cioè:

1.1 = 0.11 x 21.

Nel caso di 0.25, invece, si avrà:

segno = 0 (il numero è positivo)

mantissa = 10000000, corrispondente al numero 0.1 (la rappresentazione di (0.25)10 in virgola fissa è

(0.01)2)

esponente = 1111, corrispondente a –1 in rappresentazione in complemento a 2 su 4 bit, poiché per

passare da 0.01 a 0.1 il numero da convertire è stato moltiplicato per 2, cioè la virgola è stata spostata a

destra di 1 posizione.

Per quanto riguarda le addizioni, per poter effettuare una somma con questa rappresentazione bisogna che i

due numeri abbiano uguale esponente: questo equivale, quando si sommano due numeri, ad es. 123 e 1240,

in base 10, a fare in modo che tali numeri siano incolonnati correttamente. Questo fa sì che la loro somma

mantenga lo stesso esponente dei due numeri e abbia come mantissa la somma delle mantisse. Quindi lo zero

che compare in 1240 dovrà essere nella stessa posizione del 3 in 123, cioè dovrà essere moltiplicato per una

potenza di 10 analoga a quella della cifra meno significativa dell'altro numero. Se si vogliono sommare 123

e 1240 è possibile quindi sommare .123 x 103 con 1.240 x 10

3 operando solo sulle mantisse; non si può

effettuare un'addizione, ad es., tra 123 x 100 e 124 x 10

1 , incolonnando 123 e 124. Quindi, anche nel

calcolatore, la prima operazione che viene effettuata prima di compiere una somma in virgola mobile è

proprio quella di uguagliare gli esponenti in modo di poter limitare l'operazione soltanto alla somma delle

mantisse. Nel caso in esame si deve passare da .124x104 alla rappresentazione 1.240 x 10

3 in modo che

entrambi i numeri siano rappresentati con lo stesso esponente. Ovviamente, se si lavora con un numero

limitato di cifre per la mantissa, questi spostamenti possono richiedere di troncare certi numeri e quindi ad

errori nell'operazione. Tali errori vengono minimizzati eliminando le cifre meno significative, ma fanno sì

che il risultato rappresentato dal calcolatore in virgola mobile possa non essere esattamente quello che si

otterrebbe lavorando con precisione infinita. Di questo bisogna tenere conto perché gli errori che si

commettono in una lunga serie di calcoli possono propagarsi, accumularsi e portare a risultati che, per

quanto il procedimento seguito sia corretto, possono anche essere del tutto errati o, comunque, approssimati

in modo tropo grossolano.

Come visto anche nel caso dei numeri interi, fissata una rappresentazione che utilizza un numero finito di

bit, anche se due numeri sono entrambi rappresentabili correttamente, non è detto che la loro somma lo sia;

una cosa apparentemente strana che però può capitare lavorando in virgola mobile è che la somma di due

numeri non risulti rappresentabile in modo esatto ma che un numero più grande lo sia. Ad esempio, se si

considerano 10 e 0.5, supponendo di utilizzare una rappresentazione con 4 bit di mantissa, si ha che la

rappresentazione in base 2 di 10 è 1010, quella in base 2 di 0.5 è 0.1. Se si esegue la somma dei due numeri,

16

il risultato è 1010.1. Poiché, tuttavia, si hanno solo 4 bit a disposizione per rappresentare tale risultato e

quindi risulta necessario eliminare una cifra dalla rappresentazione, si esclude quella che ha il minor peso,

cioè il bit meno significativo. Quindi la mantissa è 1010, poiché non siamo in grado di rappresentare 10101.

Quindi l‟addizione 10 + 0.5, utilizzando 4 bit per la mantissa, produce ancora 10 come risultato!

Se fra il bit più significativo e quello meno significativo di un numero ci sono più cifre di quante possono

essere rappresentare, le cifre meno significative vengono eliminate (v. Esempio 12).

Si verifica quindi un apparente paradosso: non possiamo rappresentare in modo esatto 10.5 ma può capitare

che un numero più grande, ad es. 11, torni ad essere rappresentabile, poiché bastano 4 cifre per

rappresentarlo in modo esatto.

Una situazione particolarmente critica che può portare ad errori rilevanti è l‟effettuazione di somme fra due

numeri di cui uno è molto più grande dell'altro.

_________________________________________________________________________

In una rappresentazione con 4 bit di mantissa e 4 di esponente, si considerino i due

numeri:

10 1010

0.5 0.1

Per rappresentare la loro somma (1010.1 ) si hanno a disposizione solo 4 bit, mentre ne

occorrerebbero 5; l’esponente permette solo di spostare la virgola

al massimo rappresento

1010 = 0.1010 x 24

S = 0

M = 1010

C = 0100

Quindi

10 + 0.5 = 10 !

Osservazione:

10.5 non è rappresentabile ma 11. ad es, lo è. Infatti (11)10 = (1011)2: infatti bastano 4 bit.

Esempio 12

Per dare una misura della precisione con cui possono essere effettuati i calcoli su una certa macchina, si

definisce precisione di macchina il più piccolo numero che, sommato ad 1, consente una rappresentazione

esatta della somma. Cioè, per valutare la precisione di macchina di un calcolatore, si effettuano tante somme

1 + N rendendo sempre più piccolo il numero N (dividendolo iterativamente per 2) finché non si arriva al

risultato che 1 + N = 1: a quel punto, l'ultimo numero N che ha prodotto un risultato diverso da 1 è il più

piccolo numero su cui si può lavorare, rispetto all'unità. Più piccolo sarà questo numero, maggiore sarà la

precisione ottenibile utilizzando quel calcolatore, cioè tanto più grande sarà il numero di bit con cui il

calcolatore rappresenta la mantissa.

17

RAPPRESENTAZIONE DI CARATTERI ALFANUMERICI

Per concludere la rassegna dei dati che possono essere rappresentati all'interno di un calcolatore, vediamo

come sono rappresentati all'interno di un calcolatore i caratteri alfanumerici. Per interagire più facilmente

con il calcolatore bisogna usare un linguaggio che sia il più possibile simile al linguaggio che usiamo tutti i

giorni, e che si esprima quindi secondo un alfabeto che conosciamo. La codifica che permette di

rappresentare all'interno del calcolatore anche caratteri alfanumerici è la cosiddetta codifica ASCII

(American Standard Code for Information Interchange). Normalmente la codifica ASCII è basata su parole

di 7 bit oppure di 8 bit, nel qual caso essa è detta codifica ASCII estesa.

I primi 32 codici, da 0 a 31, rappresentano i cosiddetti caratteri di controllo. Ad es. il numero 10 rappresenta

il "Line Feed". Quando si invia alla stampante questo carattere il foglio si muove di una posizione in

verticale e si posiziona sulla riga successiva. Se si vuole ottenere un "a capo" completo c'è bisogno di una

coppia di caratteri: uno è il "Line Feed" (codice decimale 10), l'altro è il codice 13 che si chiama "Carriage

Return" (ritorno di carrello), che fa ritornare il carrello con la testina di stampa fino al margine sinistro della

pagina. Dalla ultima posizione (all‟estrema destra) dell'ultima riga precedente, quindi, la testina di stampa si

posiziona nella prima posizione della riga successiva.

I simboli, con codici da 32 a 47 sono simboli di interpunzione, +, /, *, ecc. Con i codici da 48 al 57 sono

rappresentate le dieci cifre decimali, da 0 a 9. In particolare si può notare che, nel codice ASCII, hanno tutte

una rappresentazione uguale a 0011 per i 4 bit più significativi seguiti dalla loro effettiva rappresentazione

binaria come 4 bit meno significativi. Coi numeri da 65 a 90 sono rappresentate le lettere maiuscole; coi

numeri da 97 al 122 sono rappresentate le lettere minuscole.

Se si usa la rappresentazione ASCII a 7 bit, si hanno a disposizione 128 simboli. Questa è la

rappresentazione classica che si usava per le telescriventi: in essa sono comprese le lettere dell‟alfabeto

inglese, le 10 cifre decimali, i caratteri di controllo per gestire la telescrivente e i segni di interpunzione. Nei

calcolatori, i codici che vanno da 128 a 255 sono utilizzati per la cosiddetta codifica ASCII estesa, che però

non rispetta alcuno standard e quindi dipende da calcolatore a calcolatore. Tali codici corrispondono ad una

serie di simboli che comprendono le lettere accentate ed altre lettere appartenenti ad alfabeti diversi da

quello inglese, oltre ad alcuni simboli grafici, utili ad esempio per tracciare riquadri senza bisogno di operare

con terminali di tipo grafico.

18

ALGEBRA DI BOOLE

L‟algebra booleana prende il nome dal matematico Boole, che la introdusse come formalismo che opera su

variabili (dette variabili booleane o variabili logiche o asserzioni) che possono assumere due soli valori:

Vero

Falso

Tale formalismo nasce come tentativo di definire in forma algebrica processi di tipo logico-deduttivo.

Tuttavia, poiché l‟algebra di Boole opera su variabili binarie, che possono cioè assumere solo due valori, è

possibile definire una corrispondenza fra i valori logici vero e falso e i valori binari 0 e 1, includendo di fatto

gli operatori booleani fra gli operatori dell‟algebra binaria. Al valore vero viene normalmente fatto

corrispondere il valore binario 1, mentre al valore falso viene fatto corrispondere il valore binario 0.

L‟algebra booleana è definita su un dominio finito ed estremamente limitato, che comprende solo i due

valori vero e falso. In tale dominio è possibile definire funzioni di un numero arbitrario di variabili

indipendenti. Le funzioni booleane elementari (operatori booleani) più frequentemente utilizzate

rappresentano le operazioni logiche più comuni e operano su una o due variabili booleane producendo come

risultato un solo valore, anch‟esso booleano. Tali funzioni sono:

NOT (opera su una sola variabile; il risultato è la negazione della variabile)

AND (congiunzione logica di due variabili; il risultato è vero se entrambe hanno valore vero)

OR (disgiunzione logica di due variabili; il risultato è vero se almeno una ha valore vero)

E‟ possibile dimostrare che qualunque funzione booleana è equivalente, cioè produce gli

stessi risultati a parità di valori assunti delle variabili su cui opera, ad una opportuna

composizione di 2 di questi operatori, di cui uno sia NOT. A puro titolo di esempio, la

funzione F1(A,B,C) = (A AND B) OR C è equivalente alla funzione F2(A,B,C) = NOT

((NOT A) OR (NOT B)) OR C. Le funzioni booleane possono essere descritte attraverso le cosiddette tabelle di verità, che associano a

ciascuna possibile combinazione di valori delle variabili il corrispondente valore della funzione.

In ciascuna riga sono quindi riportati i valori corrispondenti ad una delle possibili combinazioni delle

variabili indipendenti, seguiti dal valore che assume la funzione in corrispondenza di tale combinazione.

Le tabelle di verità per NOT, AND e OR sono le seguenti:

Si può notare che la tabella di verità di una funzione di N variabili ha N+1 colonne, una per ogni variabile di

ingresso più una per il valore che assume la funzione. Inoltre, ovviamente, una tabella di verità ha tante righe

quante sono le combinazioni che le variabili di ingresso possono generare. Poiché i valori assunti da

ciascuna variabile sono soltanto 2, con N variabili si possono generare 2N possibili combinazioni. Quindi

una funzione booleana di N variabili potrà essere rappresentata da una tabella di verità costituita da N+1

colonne e 2N righe. Pertanto l‟operatore NOT, che opera su una singola variabile (N=1), ha una tabella di

verità costituita da 2 righe e 2 colonne, mentre le tabelle di verità relative agli operatori AND e OR, che

operano su 2 variabili (N=2), sono costituite da 4 righe e 3 colonne.

1

0

X NOT X

0

1

1

1

0

0

X1 X1 AND X2 X2

1 1

0 0

0 1

0 0

1

1

0

0

X1 X1 OR X2 X2

1 1

1 0

1 1

0 0

19

Un‟altra considerazione che si può fare riguarda il numero di funzioni che possono essere ottenute a partire

da un certo numero di variabili. Poiché per ogni riga (corrispondente ad una possibile combinazione delle

variabili di ingresso) la funzione può fornire due possibili valori (0 o 1), il numero di combinazioni possibili

dei valori di uscita (e quindi di funzioni diverse che si possono generare) sarà 2 elevato al numero delle

righe, che abbiamo detto essere 2N, quindi 22

N. (Per analogia, ad esempio, nell‟attuale versione del

Totocalcio, in cui si hanno 3 possibili risultati per ognuna delle 14 partite, il numero di possibili

combinazioni vincenti è 314

).

Pertanto, ad esempio, è possibile ottenere 4 diverse funzioni di una sola variabile X, in cui il valore di f(X):

1. è uno in entrambi i casi (X=0 e X=1)

2. è zero in entrambi i casi

3. è uguale al valore assunto da X (funzione identità)

4. è la negazione di X (funzione NOT)

Nel caso di 2 variabili avremo invece 16 possibili funzioni, fra le quali, oltre a AND e OR appena viste,

sono particolarmente importanti la funzione XOR (OR esclusivo, il valore dell‟uscita è vero se o l‟una o

l‟altra delle variabili di ingresso, ma non entrambe, hanno valore vero) e le funzioni NAND e NOR che sono

la negazione di AND e OR, cioè i cui valori sono la negazione dei valori assunti da AND e OR in

corrispondenza delle omologhe configurazioni delle variabili di ingresso.

Come si può osservare, poiché i valori che le variabili e le funzioni possono assumere sono solo 2, è molto

facile che funzioni ottenute mediante combinazioni diverse di operatori risultino equivalenti. Del resto, è

stato già detto che tutte le funzioni booleane possono essere espresse utilizzando la coppia di operatori NOT

e AND, oppure la coppia NOT e OR.

Per verificare che due funzioni booleane siano equivalenti, come ad esempio che X1 NAND X2 equivale a

NOT (X1 AND X2), basterà quindi verificare che le loro tabelle di verità siano uguali, che cioè facciano

corrispondere lo stesso valore a uguali combinazioni delle variabili su cui sono definite.

INTERPRETAZIONE LOGICA DEGLI OPERATORI

Come già detto, il primo obiettivo con cui è stata definita l‟algebra booleana è quello di rappresentare

operazioni logiche in forma di operazioni algebriche. Da questo punto di vista, è possibile identificare le

variabili di ingresso delle funzioni booleane come rappresentazioni di fatti o di asserzioni.

1

0

1

0

X1 X1 XOR X2 X2

0 1

1 1

1 0

0 0

1

1

0

0

X1 X1 NAND X2 X2

0 1

1 0

1 1

1 0

1

1

0

0

X1 X1 NOR X2 X2

0 1

0 0

0 1

1 0

20

Ad esempio, se si considera il dominio logico delle figure geometriche e si associa alla variabile X1

l‟informazione “ha 3 lati”, alla variabile X2 l‟informazione “tutti i lati sono uguali”, alla variabile A1 il

concetto “è un triangolo” e alla variabile A2 il concetto “è un triangolo equilatero” si potranno determinare

le seguenti relazioni: A1 ≡ X1 A2 ≡ X1 AND X2

In questo caso il simbolo ≡ rappresenta la relazione logica di equivalenza, quindi le espressioni precedenti

vanno lette come “una figura geometrica è un triangolo se e solo se ha 3 lati” e “una figura geometrica è un

triangolo equilatero se e solo se ha tre lati e tutti i lati sono uguali” .

In modo analogo espressioni logiche possono essere utilizzate per esprimere criteri che devono essere

soddisfatti, ad esempio quando si ricercano informazioni in una base di dati o con un motore di ricerca su

Internet. In quest‟ultimo caso, l‟interfaccia utente permette di solito (esplicitamente o implicitamente) di

esprimere criteri di ricerca sotto forma di funzioni booleane, le cui variabili corrispondono alla presenza o

all‟assenza, in una certa pagina, delle parole che si elencano: se la parola è presente nella pagina, allora la

corrispondente variabile assumerà il valore vero. I siti elencati saranno tutti quelli per cui l‟espressione

booleana che viene usata come criterio di selezione ha come valore vero. Quindi, se si cercano le pagine che

contengono informazioni su cavalli o cani (e non necessariamente su entrambi) si potrà usare come criterio

“cavalli OR cani”. Se invece si cercano informazioni sui cavalli, ma si vogliono evitare le pagine in cui si

parla di cavalli come unità di misura di potenza dei motori, si potrà adottare il criterio “cavalli AND NOT

motore”.

Un altro esempio pratico: se cerchiamo una ricetta per una macedonia di frutta e utilizziamo “macedonia”

come criterio di ricerca

otteniamo anche (e soprattutto) risultati che riguardano la Macedonia intesa come regione geografica.

Occorre quindi restringere la ricerca, utilizzando un criterio più articolato, ad es. “macedonia AND frutta”.

21

OPERATORI BOOLEANI E CALCOLATORI

Dal momento che gli operatori booleani possono essere assimilati in ogni caso a funzioni di variabili binarie,

non solo vengono inclusi nel set di istruzioni delle CPU (v. sezione sull‟architettura del calcolatore), ma tutti

i circuiti digitali (reti logiche) che costituiscono l‟hardware di un calcolatore sono composti da un elevato

numero di circuiti elementari (porte logiche) che realizzano gli operatori logici di base (NOT, AND, OR,

NAND, NOR, XOR). Quindi la progettazione di una rete logica, dalle più semplici fino ai microprocessori,

che sono sicuramente le più complesse, può essere “ridotta” alla ricerca della funzione logica che produce le

uscite desiderate in presenza di certi ingressi. Tuttavia, come si è detto, ci sono molti modi per ottenere la

stessa funzione booleana utilizzando diverse combinazioni di operatori logici elementari. Quindi la

soluzione ottima per il progetto sarà quella che non solo rispetta le specifiche del progetto (cioè realizza

correttamente la funzione desiderata), ma che riesce anche a farlo utilizzando il minor numero di porte

logiche. Infatti un circuito più semplice (con meno componenti) è non solo più economico, ma anche, di

solito, più veloce nell‟eseguire l‟operazione per cui è stato progettato.

Infatti, da un lato, i segnali elettrici che vengono elaborati all‟interno di un calcolatore si propagano ad una

velocità prossima a quella della luce, che è elevatissima ma comunque finita. Pertanto abbreviare il percorso

che i segnali devono “attraversare” per compiere una certa operazione comporta una riduzione del tempo di

esecuzione dell‟operazione stessa. Dall‟altro lato, si deve tenere presente che, ogni volta che si attiva una

porta logica, i circuiti che la compongono richiedono un tempo significativo (anche se molto piccolo,

tipicamente inferiore a 10-6

/ 10-9

secondi) per raggiungere una configurazione stabile che consente di

“leggerne” il risultato correttamente, introducendo quindi un ritardo di pari durata prima che il risultato sia

leggibile in forma stabile. Per questo motivo, ridurre il numero di porte logiche attraverso cui il segnale si

deve propagare comporta una riduzione del tempo richiesto per eseguire l‟operazione che queste realizzano,

cioè del ritardo con cui è possibile leggere il valore di uscita del circuito (cioè il valore della funzione)

rispetto al momento in cui sono stati fissati i valori degli ingressi (cioè i valori delle variabili).

A livello di operazioni eseguite dalla CPU, si è detto che i dati su cui queste vengono eseguite sono

normalmente raggruppati in byte o in multipli del byte. Tuttavia, gli operatori booleani operano su variabili

che corrispondono a singoli bit. Quindi, come si può interpretare l‟istruzione A AND B, dove A e B sono, ad

esempio, due parole da 8 bit? Il risultato dell‟applicazione di un operatore booleano a parole di più bit non è

altro che una parola della stessa lunghezza in cui ciascun bit rappresenta il risultato dell‟operatore applicato

ai due bit che si trovano in posizioni corrispondenti nei due operandi (v. Esempio 1).

_____________________________________________________________________________ A = 11100110 A AND B = 01000100

B = 01011101 A OR B = 11111111

A 11100110

B 01011101

A AND B 01000100 (ogni bit è il risultato dell’AND fra i due bit corrispondenti degli operandi)

A OR B 11111111 (ogni bit è il risultato dell’OR fra i due bit corrispondenti degli operandi)

_____________________________________________________________________________ Esempio 13

L‟operatore AND può, ad esempio, essere utilizzato per “leggere” il contenuto di un singolo bit all‟interno di

una parola. Dalla tabella di verità dell‟operatore AND si può vedere che X AND 0 = 0, qualunque sia il

valore di X (infatti, perché l‟operatore AND restituisca il valore vero bisogna che entrambi gli operandi

abbiano valore vero). Analogamente, X AND 1 = X. Allora (v. Esempio 2) per conoscere il valore del bit più

significativo di una parola K, ad es. di 8 bit, si può eseguire l‟operazione K AND 10000000, cioè applicare

l‟operatore AND a K e a una parola composta da tutti zeri eccetto un 1 nella posizione che vogliamo leggere.

In questo modo, il risultato per i bit meno significativi sarà sicuramente 0 mentre, sul bit più significativo,

sarà uguale al contenuto del bit più significativo di K. Quindi basterà verificare se il valore rappresentato

dalla parola ottenuta è o meno uguale a zero (il confronto con lo zero fa sempre parte del set di istruzioni di

una CPU): se è 0 allora il bit che abbiamo “letto” ha valore 0, se è diverso da 0 allora il bit è uguale a 1.

22

_____________________________________________________________________________ Determinare il valore del quinto bit (a partire dal meno significativo) della seguente parola:

K = 01011000

*

Eseguo K AND 00010000

Il risultato è 00010000, diverso da 0, quindi il bit che ho letto è uguale ad 1.

Se fosse stato 0 il risultato sarebbe stato 00000000.

_____________________________________________________________________________ Esempio 14

Agli operatori booleani già visti si aggiungono anche i due operatori di shift (scorrimento) a destra e shift a

sinistra. Il risultato di tali operatori è una parola derivata dalla parola cui sono applicati facendo scorrere ogni

bit di una posizione a destra o a sinistra. Nel caso dello shift a destra (Shift Right, SHR), il bit più

significativo diventa 0 e il bit meno significativo “sparisce” a destra; nel caso dello shift a sinistra (Shift

Left, SHL), il bit meno significativo diventa 0 e, se consideriamo una rappresentazione con un numero finito

di bit, il bit più significativo “sparisce” a sinistra, altrimenti si sposta di una posizione a sinistra come tutti

gli altri e la parola risultante risulta più lunga di un bit rispetto a quella cui l‟operatore è stato applicato.

_____________________________________________________________________________ P = 11001001

SHR(P) = 01100100 (ogni bit si è spostato a destra di una posizione; il MSB è diventato 0; il LSB

‘sparisce’).

SHL(P) = 110010010 se si hanno a disposizione più di 8 bit per rappresentare il risultato

10010010 se anche il risultato è rappresentato su 8 bit

(ogni bit si è spostato a sinistra di una posizione; il LSB è diventato 0; il MSB è

‘scomparso’ da sinistra).

_____________________________________________________________________________ Esempio 15

23

ARCHITETTURA DI UN CALCOLATORE

In questa sezione si prendono in esame i componenti fondamentali di un calcolatore. Si possono individuare

tre strutture principali (v. Figura 1) collegate fra loro.

Figura 1

La CPU (Central Processing Unit, in italiano normalmente detta Unità Centrale) ha un ruolo sia di

elaborazione che di controllo. Nei calcolatori attuali, in pratica, è identificabile con un singolo circuito, il

microprocessore. Più in generale, è quell'insieme di circuiti dedicati all'esecuzione delle operazioni

elementari sui dati ed al controllo dell'intero sistema. La memoria centrale è un insieme di celle, ciascuna

delle quali contiene 1 byte ed è individuata da un numero progressivo ad essa associato, detto indirizzo. La

memoria centrale contiene, durante il funzionamento del calcolatore, sequenze binarie che possono

rappresentare dati o codici corrispondenti alle istruzioni che costituiscono i programmi in esecuzione. Il bus

è l'insieme dei collegamenti elettrici (fisicamente è un insieme di piste di un circuito stampato, in cui

transitano segnali elettrici controllati da appositi dispositivi) che collega le varie parti del calcolatore e

consente lo scambio di dati e segnali di controllo. I cosiddetti dispositivi di input/output sono dispositivi che

consentono l'acquisizione dei dati da parte del calcolatore (input), la loro archiviazione e la loro

presentazione verso il mondo esterno (output). Una classificazione schematica dei dispositivi di input/output

è la seguente (in corsivo i dispositivi ormai caduti in disuso):

MEMORIE DI MASSA DISCHI MAGNETICI

DISCHI OTTICI NASTRI MAGNETICI

MEMORIE FLASH TAMBURI MAGNETICI SCHEDE PERFORATE

TERMINALI TASTIERA / MOUSE

MONITOR ALFANUMERICI/ GRAFICI

STAMPANTI A MARGHERITA

AD AGHI TERMICHE

A GETTO DI INCHIOSTRO LASER

PLOTTER A RULLO

XY

Figura 2

24

1) Memorie di massa - possono essere:

a) dischi, magnetici oppure ottici,

b) nastri magnetici,

c) memorie flash,

d) tamburi magnetici (ormai in disuso),

e) schede perforate, dispositivi ormai del tutto obsoleti.

I dischi, sia magnetici che ottici, possono essere suddivisi in dischi fissi o asportabili.

2) Terminali, composti di solito da una tastiera, un mouse e un monitor di tipo grafico (un tempo esistevano

anche monitor di tipo alfanumerico, che cioè potevano rappresentare solo caratteri dell'alfabeto o numeri

o alcuni simboli grafici predeterminati). Nei monitor di tipo grafico ogni punto che compone

un‟immagine sul video (pixel, contrazione di „picture element‟) è controllabile singolarmente. Quindi,

con un terminale grafico si possono visualizzare grafici ed immagini, la cui qualità è determinata dalla

risoluzione del dispositivo, cioè dal numero di pixel che si hanno a disposizione per formare l'immagine.

Un terminale di tipo grafico può, ovviamente, visualizzare anche caratteri alfanumerici, „disegnandoli‟

opportunamente attivando i pixel che formano la loro immagine.

3) Stampanti: possono essere

a) a margherita,

b) ad aghi,

c) laser,

d) a getto di inchiostro,

e) termiche o, in generale, chimiche.

4) Plotter , che possono essere a rullo o piani (di tipo X-Y).

CPU

La CPU può essere considerata il vero e proprio cuore del sistema: La struttura della CPU è la seguente

(Vedi Figura 3)

Figura 3

CLOCK

25

La CPU è un dispositivo sequenziale, cioè può eseguire una sequenza di operazioni (v. sotto), una alla volta,

in successione. E‟ inoltre un dispositivo di tipo sincrono. Questo significa che esiste un circuito, detto clock,

il cui compito è quello di sincronizzare tutte le operazioni che avvengono nel calcolatore, generando il

cosiddetto segnale di clock. Quest‟ultimo è costituito da una serie di impulsi che si ripetono per

milioni/miliardi di volte ogni secondo, ad intervalli regolari, e viene inviato in ingresso alla CPU e a tutti gli

altri dispositivi che costituiscono il calcolatore. La CPU e gli altri dispositivi diventano attivi, cioè eseguono

una operazione, soltanto ogni volta che ricevono un impulso di clock. In pratica, ogni volta che viene inviato

un impulso alla CPU, questa esegue una operazione elementare che, come vedremo, implica un

cambiamento del suo stato ed, eventualmente, dello stato dei dispositivi ad essa collegati. La CPU è

internamente suddivisa in una Unità di Controllo, una Unità Logico-Aritmetica, chiamata di solito ULA in

italiano (ALU in inglese) e un insieme di registri che servono a contenere i dati su cui la CPU sta eseguendo

un‟operazione: la CPU, infatti, non può operare direttamente sulla memoria ma ha bisogno di trasferire i dati

al suo interno, e in particolare nei registri, prima di poterli elaborare. Alcuni registri possono essere riservati

ad usi specifici; ad esempio contenere gli operandi, nel caso in cui si debba eseguire un‟operazione

matematica (registri dati); oppure contenere l'indirizzo, all'interno della memoria, della prossima operazione

da eseguire (registro Program Counter), o i bit di overflow e di carry (riporto) e, più in generale, bit (detti

flag) che segnalano l‟occorrenza di eventi specifici quando si esegue una operazione (registri di stato). La

CPU è collegata alla memoria centrale tramite un bus, suddivisibile in bus dati, bus indirizzi e bus di

controllo, a seconda del significato e dell‟effetto che hanno i segnali che vengono trasmessi sulle piste

corrispondenti.

Ogni CPU dispone di un proprio linguaggio macchina, ovvero di una codifica, mediante sequenze binarie,

delle diverse operazioni che può compiere: ogni operazione ha una diversa codifica. Tali sequenze binarie

sono chiamate istruzioni. Da questo punto di vista la CPU può essere schematizzata nel modo seguente

(Figura 4):

Figura 4

Il contenuto dei registri che si trovano all'interno della CPU (che contengono i dati su cui deve essere

eseguita la prossima operazione, l‟indirizzo dell‟operazione, i bit che servono a segnalare particolari

situazioni, ecc.) definisce lo stato in cui si trova la CPU. La combinazione fra la sequenza binaria

(istruzione) in ingresso e lo stato in cui si trova la CPU determina un risultato (output) che è sempre lo stesso

a parità di istruzione e stato; in pratica la CPU trasforma la lunga sequenza binaria formata dall‟input e dallo

stato in una nuova sequenza binaria (output) che dovrà essere opportunamente interpretata. Questa nuova

sequenza è il risultato dell‟esecuzione dell'istruzione. L'esecuzione di una istruzione modifica il contenuto

dei registri, quindi lo stato della CPU. Una operazione eseguita dal calcolatore corrisponde quindi ad un

cambiamento di stato della CPU. Il nuovo stato in cui si trova la CPU dopo l‟esecuzione dell‟operazione è il

risultato dell‟operazione. In pratica, la CPU è una complicatissima rete logica che realizza una funzione

booleana avente un elevatissimo numero di variabili di input e di output.

Per fare un esempio estremamente banale, facendo il paragone con l‟uso di una macchina da scrivere, fornire

un'istruzione alla CPU può corrispondere alla pressione di un tasto, mentre lo stato può corrispondere alla

DATI

26

condizione in cui si trova il tasto di shift; quando, ad esempio, si preme il tasto "A" (che, in questo esempio,

corrisponde all‟istruzione da eseguire) nella macchina da scrivere, se il tasto di shift (stato) è premuto il

risultato sarà il carattere A maiuscolo, se non è premuto il risultato sarà una a minuscola.

Per risolvere qualunque problema, bastano tre tipi di istruzione: istruzioni aritmetiche e logiche (abbiamo

visto che con la somma e lo shift si possono eseguire anche sottrazioni, moltiplicazioni o divisioni),

operazioni di accesso alla memoria (ad esempio la possibilità di spostare un dato da una posizione all'altra

all'interno della memoria oppure di leggere un dato e di inserirlo in uno dei registri, oppure di trasferirlo da

uno dei registri all'interno della memoria), e operazioni di confronto fra numeri. Riguardo a queste ultime,

può bastare anche il solo confronto con lo zero: se, infatti, si devono confrontare due numeri per vedere se

uno è maggiore dell'altro, ciò equivale a calcolarne la differenza e vedere se questa è maggiore, minore o

uguale a zero. Se è uguale a zero i due numeri sono uguali, se è maggiore di zero il primo numero è

maggiore del secondo e viceversa. Le operazioni aritmetiche e logiche, come detto, vengono eseguite dalla

Unità Logico-Aritmetica.

I registri possono avere diverse funzioni a seconda del loro contenuto: possono contenere dati, ma anche

indirizzi di memoria (cioè, come si vedrà in seguito, quegli indici che consentono di identificare in modo

univoco ogni cella della memoria centrale). Ad esempio, quando si esegue un programma, il cosiddetto

Program Counter è un registro particolare che contiene l'indirizzo della prossima istruzione che la CPU

dovrà eseguire. La CPU, in pratica, legge nel Program Counter un indirizzo che identifica una certa

locazione di memoria, legge l‟istruzione contenuta in quella locazione e la esegue, operando sui dati che

sono presenti in quel momento nei registri dati. I registri possono, inoltre, contenere codici di controllo; uno

di questi, ad esempio, è il bit di overflow che, come detto, segnala quando in un'operazione intera senza

segno si va oltre la capacità di rappresentazione della macchina. Quando questi codici di controllo sono

rappresentati da un singolo bit vengono normalmente chiamati flag, cioè bandierine. In effetti, hanno un

ruolo di segnalazione analogo a quello del guardalinee in una partita di calcio: se il bit è attivato (cioè il suo

valore è 1), questo indica che si è verificata una certa condizione, ed equivale al sollevamento della

bandierina da parte del guardalinee.

La supervisione di tutte queste operazioni è compito dell'unità di controllo. Con una velocità proporzionale

alla frequenza con cui arrivano gli impulsi di clock, l'unità di controllo interpreta le singole istruzioni

attivando opportunamente le varie componenti della CPU, in modo da produrre il risultato corrispondente.

PARAMETRI CARATTERISTICI DI UNA CPU (MicroProcessore)

1) LUNGHEZZA DELLE PAROLE BINARIE CHE E' IN GRADO DI ELABORARE, ESPRESSA IN NUMERO DI

BIT (8, 16, 32, 64)

2a) LUNGHEZZA DELLE PAROLE BINARIE CHE E' IN GRADO DI RICEVERE DALL'ESTERNO O DI INVIARE

VERSO L'ESTERNO CON UN'UNICA OPERAZIONE (8, 16, 32, 64)

2b) CAPACITA' DI INDIRIZZAMENTO (Mb, Gb)

3) TIPO DI ARCHITETTURA UTILIZZATA:

CISC (Complex Instruction Set Computer)

RISC (Reduced Instruction Set Computer)

4) FREQUENZA DI CLOCK.

espressa in Megacicli/secondo = Megahertz (MHz)

5) MILIONI DI ISTRUZIONI AL SECONDO (MIPS) (centinaia o migliaia)

MILIONI DI OPERAZIONI IN VIRGOLA MOBILE AL SECONDO (MFLOPS, decine o centinaia)

MFLOPS <= MIPS <= FREQ. DI CLOCK

Figura 5

Il bus, pur essendo, dal punto di vista logico, un'entità unica, in realtà è un insieme di collegamenti fisici

suddivisibili in un insieme collegamenti che consentono il trasferimento dei dati dalla memoria centrale alla

27

CPU e viceversa (bus dati), un insieme di collegamenti per trasmettere gli indirizzi (bus indirizzi) e una serie

di collegamenti (bus di controllo) che consentono di trasmettere i segnali di controllo che regolano il

collegamento fra CPU, memoria e dispositivi di Input/Output. Ad esempio, un collegamento è riservato ad

un segnale che indica se sulla memoria deve essere eseguita un'operazione di lettura (cioè un trasferimento

dalla memoria verso la CPU o verso un dispositivo di input/output) oppure un'operazione di scrittura (cioè

un trasferimento dalla CPU o da un dispositivo di input/output verso la memoria).

In figura 5 sono riportati i principali parametri che caratterizzano le prestazioni della CPU.

Il primo è la lunghezza della parola che la CPU è in grado di elaborare. Questa lunghezza è espressa in

numero di bit (normalmente sono 8, 16, 32 o 64 bit). Alla lunghezza della parola si fa riferimento spesso col

termine architettura interna della CPU. Cioè, se una CPU ha una architettura interna a 8, 16, 32, 64 bit,

questo significa che è in grado, internamente, di compiere operazioni su stringhe binarie di tale lunghezza,

Ogni operazione eseguibile in un unico ciclo di clock coinvolge quindi operandi che, al massimo, sono di

tale lunghezza. Analogamente all'architettura interna, si può definire anche una architettura esterna,

caratterizzata dalla lunghezza delle parole che la CPU può trasferire, con una singola operazione, verso

l'esterno: questo parametro si può identificare con la dimensione del bus dati.

La distinzione fra architettura interna ed esterna è importante in quanto vengono talvolta utilizzati, per

motivi di economia, microprocessori con architetture interne, ad es., a 32 o 64 bit che, per poter essere

inseriti in calcolatori più economici, hanno un bus dati caratterizzato da un numero di bit inferiore.

Internamente, quindi, un microprocessore di questo tipo può trattare dati di 32 (64) bit; tuttavia, disponendo,

ad esempio, di un bus a 16 bit, deve eseguire in due (quattro) cicli di clock ogni operazione di lettura e di

scrittura. Da un lato, ciò provoca un rallentamento delle operazioni di input/output, dall'altro i circuiti esterni

collegati a questo microprocessore sono molto più economici, perché sono costituiti da un minor numero di

componenti o, in ogni caso, da componenti più semplici. Per quello che riguarda il tipo di istruzioni che è in

grado di eseguire un microprocessore, si possono avere due tipi di architetture: Architettura CISC (Complex

Instruction Set Computer) o RISC (Reduced Instruction Set Computer). L'architettura CISC caratterizza

microprocessori che sono in grado di eseguire istruzioni molto complesse, per eseguire le quali sono spesso

necessari molti cicli di clock; quindi, la ALU ha una struttura molto complessa e occupa gran parte dello

spazio a disposizione nel chip. Pertanto, questo tipo di microprocessori contiene di solito un numero

piuttosto limitato di registri. Nel caso dell'architettura RISC si ha la situazione opposta: si dispone di un

numero molto basso di operazioni molto elementari, avendo però a disposizione un numero molto elevato di

registri: questo fa sì che si possa ottenere un elevatissima velocità di elaborazione, in quanto gran parte delle

operazioni possono essere eseguite in pochi cicli di clock, se non addirittura in uno solo. Tuttavia, ogni

operazione corrisponde solo ad una parte di una operazione di una CPU CISC. Le prestazioni relative di una

CPU CISC o una RISC dovranno quindi essere valutate in funzione del tipo di programma che deve essere

eseguito. Non è possibile affermare la superiorità in assoluto dell‟una architettura sull‟altra.

Un'altra caratteristica fondamentale della CPU è la frequenza di clock alla quale può operare. Come abbiamo

visto, ogni istruzione corrisponde ad una sequenza di operazioni elementari eseguite dalla CPU in

corrispondenza di ogni impulso di clock; quindi, maggiore è il numero di impulsi di clock che la CPU riceve

in un secondo, maggiore è il numero delle operazioni che la CPU è in grado di svolgere nell'unità di tempo.

Normalmente è espressa in MHz/GHz (Megahertz/GigaHertz) o Megacicli/Gigacicli al secondo. Il primo

personal computer (PC) IBM aveva una frequenza di clock di 4,77 MHZ, e il suo processore aveva una

architettura interna a 16 bit: attualmente i computer a 32 o 64 bit basati su processori Intel o su processori

della stessa classe (es. quelli prodotti dalla AMD) arrivano ad un massimo di circa 3 GHz, cioè di quasi 1000

volte superiore. Se a ciò si aggiunge il progressivo miglioramento dell‟ingegnerizzazione dei

microprocessori, che comporta che una stessa istruzione sia eseguita in un minor numero di cicli di clock, e

l‟estensione dell‟architettura interna, si raggiunge un incremento di prestazioni ancora maggiore rispetto al

PC originale. Negli ultimi 20 anni si è raddoppiata la potenza di calcolo mediamente ogni 18 mesi (a questo

fenomeno si fa normalmente riferimento come legge di Moore)! Tale legge si prevede che continui a valere

almeno per i prossimi 10 anni.

28

Altri parametri che descrivono le prestazioni di una CPU e vengono forniti in genere insieme alla macchina

sono i MIPS, cioè milioni di istruzioni per secondo, e i MFLOPS (Megaflops), milioni di operazioni in

virgola mobile per secondo. Un'operazione in virgola mobile è normalmente molto più complessa di

un'operazione fra interi e richiede quindi un maggior numero di cicli di clock, perciò il dato relativo ai

MFLOPS è generalmente molto più basso di quello relativo ai MIPS che, a sua volta, è inferiore alla

frequenza di clock. In realtà, nei microprocessori più recenti, alcune operazioni possono essere effettuate in

parallelo, durante lo stesso ciclo di clock, per cui potrebbe anche succedere, per particolari sequenze di

operazioni, che MIPS > frequenza di clock. Quando si confrontano i MIPS di due CPU diverse bisogna

tenere in considerazione l'architettura del microprocessore; abbiamo detto infatti che l'architettura RISC può

eseguire una varietà minore di istruzioni più elementari, quindi un'istruzione di un computer con architettura

CISC può corrispondere, a livello operativo, a più istruzioni di un computer RISC. A parità di MIPS, è

quindi più potente un microprocessore CISC; d'altra parte, a parità di frequenza di clock, un microprocessore

RISC esibirà un dato in MIPS generalmente superiore ad un CISC, rendendo molto delicato (se non

impossibile) un confronto basato su questo solo dato.

MEMORIA CENTRALE

La memoria centrale è lo spazio di lavoro in cui si collocano i dati da elaborare durante il funzionamento del

calcolatore. E' caratterizzata da un insieme di celle, ciascuna delle quali contiene 8 bit (1 byte) ed ha un

proprio indirizzo, cioè un numero progressivo che la identifica in modo univoco.

A seconda della dimensione del Registro Indirizzi all‟interno del microprocessore, quest‟ultimo sarà in

grado di gestire una quantità più o meno grande di memoria. Ad es., con 16 bit si possono generare 65536

(216

) numeri diversi, quindi si può accedere direttamente a 65536 celle di memoria. I primi microprocessori

avevano uno spazio di indirizzamento di questo tipo, cioè potevano indirizzare 65536 locazioni di memoria

di 1 byte ciascuna, cioè 64 Kbyte. Un microprocessore con un registro indirizzi di 32 bit (come il Pentium)

può indirizzare 4GByte (232

byte) di memoria. In realtà il Pentium ha un ulteriore registro a 16 bit che

permette di indirizzare 65536 blocchi (segmenti) di 4Gbyte. Questo registro, a 16 bit, individua quindi il

segmento di memoria entro cui opera il processore ed il registro indirizzi a 32 bit serve quindi a identificare

la singola cella all‟interno del segmento entro il quale si sta lavorando. Per gli attuali calcolatori, 4Gbyte di

memoria sono mediamente sufficienti. In questo caso quindi la CPU lavora sempre all‟interno dello stesso

segmento di memoria.

Il tipo di memoria centrale utilizzata nella grandissima maggioranza dei casi nei calcolatori (fanno eccezione

alcuni dispositivi palmari o tascabili) è la memoria di tipo RAM (Random Access Memory), cioè Memoria

ad Accesso Casuale. Tale termine indica che si può accedere direttamente a qualunque locazione della

memoria, indipendentemente dalla sua posizione; ogni dato è quindi raggiungibile con la stessa velocità. In

pratica, tutti i tipi di memoria allo stato solido (basata cioè su circuiti elettronici) oggi esistenti sono ad

accesso casuale, tuttavia il termine RAM indica convenzionalmente un particolare tipo di memoria ad

accesso casuale che conserva i dati finché le viene fornita tensione: è cioè un tipo di memoria "volatile" e

quindi, al momento dello spegnimento del calcolatore i dati in essa contenuti vengono persi. Vedremo in

seguito quali siano gli altri tipi di memoria che è possibile trovare in un sistema di calcolo.

A livello operativo, sulla memoria la CPU compie tre operazioni principali: lettura, scrittura e spostamento.

La lettura implica che si invii alla memoria un indirizzo e si prelevi (cioè si trasferisca all‟interno della CPU)

la sequenza binaria (corrispondente ad un dato o ad una istruzione) contenuto nella cella di memoria

corrispondente. Durante un‟operazione di scrittura, una volta che la CPU ha specificato l'indirizzo di

memoria dove scrivere, il contenuto della cella ad esso corrispondente viene modificato; con lo spostamento,

infine, il contenuto di una cella di memoria viene trasferito in un'altra cella. Si può dire che in pratica le

operazioni possibili sulla memoria sono comunque quelle di lettura e scrittura, in quanto lo spostamento

consiste in una operazione di lettura di un dato da una cella seguita da una operazione di scrittura dello

stesso dato in un'altra cella.

29

Nella memoria centrale si memorizzano sia i dati che le istruzioni che costituiscono i programmi; questi, di

solito, vengono collocati in una zona della memoria distinta da quella riservata ai dati, in modo tale che la

CPU possa interpretare tali sequenze come istruzioni e non come dati.

Il funzionamento dei calcolatori è di tipo sequenziale, cioè il calcolatore esegue un'istruzione dopo l'altra, in

sequenza. E‟ quindi naturale e vantaggioso da un punto di vista pratico che le istruzioni vengano inserite in

memoria nello stesso ordine in cui devono essere eseguite. Infatti, in questo modo, per prelevare l‟istruzione

da eseguire dopo quella attualmente in esecuzione la CPU non deve fare altro che incrementare di 1

l‟indirizzo contenuto nel registro Program Counter che, come detto, contiene l‟indirizzo in memoria centrale

della prossima istruzione che la CPU deve eseguire.

L'operazione di lettura dalla memoria centrale può essere scomposta in tre fasi: (0) una fase preliminare, in

cui viene attivata la linea del Bus di Controllo relativa alla lettura: quasi contemporaneamente (1) la CPU

pone l'indirizzo della cella di memoria che si vuole leggere sul Bus Indirizzi. A questo punto, dopo un tempo

brevissimo, detto tempo di accesso, il dato (2) viene trasmesso alla CPU sul Bus Dati. Il tempo di accesso è

quindi il tempo che intercorre fra il momento in cui viene generato l'indirizzo e il momento in cui il dato

richiesto viene inviato alla CPU sul Bus Dati. Questo ritardo è dovuto al fatto che i circuiti logici hanno

bisogno di un certo tempo per cambiare stato, cioè per commutare da 0 a 1 o viceversa. Il tempo di accesso è

di solito pari a qualche decina di nanosecondi (un nanosecondo corrisponde a 10-9

s, cioè 1 miliardesimo di

secondo).

Nel caso dell‟operazione di scrittura l'unica diversità è che nella fase (0) anziché attivare la linea di controllo

relativa alla lettura si attiva la linea di controllo relativa alla scrittura; successivamente la CPU pone

contemporaneamente sul Bus Indirizzi l'indirizzo della cella nella quale deve essere scritto il dato e sul Bus

Dati la sequenza binaria che deve essere trasferita, ottenendo un trasferimento di dati in senso opposto

rispetto alla lettura.

Riassumendo, vediamo quali sono i parametri caratteristici della memoria centrale: la prima caratteristica

fondamentale è la dimensione, espressa di solito in MByte, cioè il numero di celle (di 1 byte) disponibili

all'interno della memoria. La seconda caratteristica è il tempo di accesso, che abbiamo appena definito. I

Personal Computer vengono tipicamente forniti con uno o più GByte di RAM.

Abbiamo detto che la memoria centrale è normalmente una memoria di tipo RAM. Esaminiamo ora altri tipi

di memoria. La memoria ROM (Read Only Memory, cioè memoria a sola lettura), viene „scritta‟ al

momento della sua produzione con un processo irreversibile e contiene quindi dati che non possono essere

più modificati. Su tale tipo di memoria è quindi possibile compiere solo operazioni di lettura. Quando si

accende il calcolatore, nella memoria centrale non c'è niente, in quanto la RAM ha bisogno di tensione per

conservare i dati. Pertanto è necessario che all'interno del calcolatore vi sia un programma, disponibile

immediatamente all‟accensione, che consenta di "inizializzare" il calcolatore (cioè di eseguire la cosiddetta

sequenza di boot o sequenza di caricamento) in modo che possa cominciare ad operare. Normalmente questa

parte di programma, attivata solo al momento dell'accensione, è memorizzata su una memoria ROM, che nel

PC è detta BIOS (Basic Input/Output System). Questo perché la memoria ROM conserva i dati in essa

memorizzati anche a calcolatore spento. Il nome BIOS deriva dal fatto che i programmi in esso contenuti

devono permettere al calcolatore di eseguire anche operazioni elementari di input/output, in quanto il

calcolatore dovrà per prima cosa trasferire dalla memoria di massa alla memoria centrale (nella fase di boot)

il sistema operativo, il programma cioè che gestisce l‟hardware e il software applicativo del calcolatore.

Un altro tipo di memoria a sola lettura sono le PROM (Programmable ROM). Queste ultime differiscono

tuttavia dalle ROM in quanto, al momento della fabbricazione, non contengono alcun dato e possono in

seguito essere programmate (in modo irreversibile) tramite opportuni dispositivi. Vi si possono cioè

memorizzare dati che diventano inalterabili, cioè vi si può scrivere una sola volta. Per poter scrivere più

volte su memorie utilizzabili come PROM sono state create le EPROM (Erasable PROM), cioè PROM

cancellabili tramite l'applicazione di un fascio di raggi ultravioletti. Si tenga tuttavia presente che la

cancellazione delle EPROM è un processo relativamente lungo, inoltre è totale e non selettiva. Le EPROM

30

non possono quindi essere utilizzate al posto delle RAM, che permettono di modificare in modo quasi

istantaneo il contenuto anche di una singola cella. La memorie appartenenti alla „famiglia‟ ROM hanno la

caratteristica di mantenere le informazioni senza bisogno di essere alimentate, in quanto la loro scrittura

avviene o mediante processi irreversibili (ROM e PROM), o mediante processi che le fanno cambiare di

stato in modo stabile (EPROM) a meno che non vengano esposte ai raggi UV.

Recentemente si stanno affermando anche le memorie di tipo FLASH, che sono memorie permanenti,

indirizzabili singolarmente e riscrivibili, quindi possono di fatto sostituire le RAM in tutto e per tutto. Per

ora tuttavia il costo e le prestazioni inferiori, in particolare in termini di tempo di accesso, ne consentono un

uso efficiente solo come dispositivi di memoria di massa.

MEMORIE DI MASSA

Al momento dello spegnimento del calcolatore tutti i dati contenuti nella memoria centrale vengono

cancellati. Bisogna quindi predisporre un sistema per conservare i dati che si sono elaborati o che si vogliono

elaborare ed i programmi che servono ad elaborarli. Per questo esistono le memorie di massa, di tipo

permanente, disponibili normalmente sotto forma di nastri (magnetici) o dischi (magnetici, ottici o

magneto-ottici) ovvero sotto forma di memoria FLASH.

Ci si potrebbe chiedere perché non si usi questo tipo di memoria anche durante l‟elaborazione. Il motivo

risiede principalmente nel tempo di accesso (che, analogamente a quanto visto per la memoria centrale,

corrisponde al tempo che trascorre dal momento in cui viene inviata una richiesta di lettura o di scrittura di

un dato a quello in cui il dato diventa effettivamente disponibile per l'elaborazione). Esso è infatti molto più

elevato rispetto a quello della RAM o delle ROM, che sono memorie costituite da soli componenti

elettronici, senza alcuna parte meccanica in movimento: un'operazione che in memoria centrale richiede

alcune decine di nanosecondi richiede invece decine di millisecondi quando viene eseguita su disco. Quindi

eseguire un miliardo di operazioni in memoria centrale richiede alcune decine di secondi, mentre eseguire le

stesse operazioni su un disco richiederebbe alcune migliaia di secondi (N.B. 1000 secondi sono circa 17

minuti!). La memoria di tipo FLASH è anch‟essa totalmente di tipo elettronico, ma ha un tempo di accesso

superiore alla RAM, anche se nettamente inferiore a quello dei dispositivi di tipo magnetico.

In una prospettiva storica, il primo tipo di memoria di massa ad essere utilizzato sono state le schede

perforate. Queste erano cartoncini in cui, ad un foro praticato in una certa posizione, corrispondeva un valore

di 1 o 0 nel bit corrispondente; queste schede venivano lette da un lettore di tipo ottico che riusciva a

riconoscere la presenza del foro e consentiva il trasferimento dei dati dalla scheda alla memoria centrale. Per

memorizzare dati si usava quindi un perforatore di schede, un dispositivo simile ad una macchina da scrivere

con una tastiera simile a quella degli attuali computer, che disponeva di una serie di aghi, anziché di

martelletti come nella macchina da scrivere che incidevano le schede „bianche‟, cioè prive di fori, contenute

in un opportuno cassetto. Ovviamente era un tipo di memoria molto poco pratico. Ad ogni scheda

corrispondevano pochi byte e, quindi, programmi di una certa mole o quantità di dati significative

costituivano pacchi di schede di dimensioni considerevoli; le schede, inoltre, potevano deteriorarsi, piegarsi,

forarsi e quindi generare errori. Un progresso decisivo si è avuto nel momento in cui si è passati alla

memorizzazione su supporto magnetico.

Figura 6

31

Il nastro magnetico fu il primo tipo di memoria di massa di tipo magnetico ad essere realizzato. I nastri

magnetici per computer sono del tutto analoghi ai nastri che vengono (venivano) utilizzati per le

registrazioni musicali o video. L'organizzazione tipica del nastro magnetico su bobina (ormai del tutto

abbandonato) è simile a quella che si vede in Figura 6. Il nastro è suddiviso in 9 tracce, quindi la testina è in

grado di operare su 9 sezioni parallele del nastro. In ogni posizione del nastro, su ciascuna traccia viene

scritto uno dei bit che compongono un byte. Le tracce sono 9 invece che 8 (1 byte= 8 bit) poiché il nono bit,

che non contiene informazioni utili, viene utilizzato come controllo (controllo di parità), che consente di

determinare se il byte è stato letto/scritto in modo corretto o sbagliato. Ad esempio, si può supporre di usare

la regola banale ma efficace secondo cui, se il byte contiene un numero pari di 1 (o di 0), questo bit (detto bit

di parità) deve essere posto a 1, se è dispari a 0. Se, ad esempio, viene letto un byte che contiene un numero

pari di 1 ma il valore del bit di parità viene letto come 0, questo significa che uno dei bit del dato, o il bit di

parità stesso, è stato letto/scritto in modo sbagliato. Si noti che un meccanismo di questo tipo permette di

identificare solo un numero dispari di errori. Se si commettono, ad esempio, due errori, il controllo di parità

non segnala alcun errore. Tuttavia, poiché un errore costituisce un evento di per sé raro, è estremamente

improbabile che si commetta più di un errore scrivendo o leggendo lo stesso byte, per cui il controllo è

comunque molto efficace.

I nastri che si usano attualmente hanno lo stesso formato dei nastri video/audio digitale (DAT, Video8,

MiniDV), che consentono di memorizzare dati con una densità (quantità di dati per unità di lunghezza)

molto elevata. La distribuzione dei dati sul nastro è diversa, poiché le testine di lettura/scrittura dei

videoregistratori non sono fisse ma mobili, ma il principio resta sostanzialmente lo stesso.

L'accesso alle informazioni contenute sul nastro è ovviamente di tipo sequenziale, al contrario, come si è

detto in precedenza, delle memorie RAM, ROM, PROM ed EPROM che sono ad accesso random. In tali

memorie ogni cella è singolarmente indirizzabile: basta generare l'indirizzo per avere subito disponibile il

dato corrispondente. Utilizzando i nastri magnetici, invece, accade ciò che si verifica nelle registrazioni

musicali: se si vuole ascoltare un brano musicale che si trova in fondo al nastro, bisogna scorrere tutta la

bobina. Analogamente, se vogliamo cercare dati contenuti in una certa posizione del nastro, bisognerà farlo

scorrere fino a quella posizione. Quindi l'organizzazione di tipo sequenziale fa sì che l'accesso a un dato sia

mediamente molto lento (anche dell'ordine di minuti). Quindi l'utilizzazione principale dei nastri è quella di

copia per motivi di sicurezza (backup) di grosse quantità di dati, con un'alta densità di registrazione (su un

nastro magnetico possono essere memorizzate decine di Gbyte) e con il vantaggio della portabilità. Pertanto,

con un unico lettore e un numero elevato di nastri (dal costo limitato) si può disporre di un archivio molto

ampio. Si può notare che i dati, in un nastro, oltre ad essere organizzati su diverse tracce, sono anche

organizzati in blocchi. Cioè durante la scrittura su nastro e quindi in seguito anche durante la lettura, per

ottimizzare i tempi delle operazioni di lettura e scrittura, non si fa mai accesso ad un solo byte alla volta ma

ad un certo numero di byte, tipicamente 256 o 512, memorizzati su nastro in modo contiguo. Poiché il

sistema di lettura è meccanico, l'arresto e l‟avviamento del nastro risentono dell‟inerzia meccanica del

dispositivo, per cui la velocità di scorrimento standard, necessaria per una corretta lettura dei dati, viene

raggiunta in alcune frazioni di secondo, durante le quali il nastro si sposta di una certa lunghezza. Per

distinguere i diversi blocchi di dati, fra essi si interpone un gap, cioè uno spazio bianco che dovrà essere più

esteso di tale lunghezza per poter accedere al blocco successivo rispetto alla posizione in cui il nastro si è

eventualmente arrestato, senza dovere riavvolgere il nastro stesso. Se supponiamo, quindi, che, al momento

in cui si termina la lettura di un blocco di dati il nastro sia posizionato esattamente alla fine di tale blocco,

fra quest'ultimo ed il blocco successivo è necessario predisporre un gap per poter leggere il blocco

successivo anche a partire da nastro fermo.

Se invece di dare un'organizzazione di tipo rigorosamente sequenziale come quella di un nastro, si

dispongono i dati su un supporto di forma diversa, come ad esempio un disco, a parità di supporto magnetico

e quindi di registrazione di informazioni sì potrà ottenere un tempo di accesso decisamente più rapido.

32

Vediamo come vengono organizzati i dati su un disco (Figg. 7 - 8).

Figura 7

Le tracce, a differenza del nastro, in cui erano disposte in modo parallelo, sono concentriche. Quindi i

blocchi, rettangolari nel caso del nastro, nel caso del disco sono areole formate dall‟intersezione delle tracce

con i settori circolari (settori del disco) in cui la superficie del disco può essere suddivisa. Ogni blocco non è

più quindi caratterizzato da un numero, come nel caso del nastro, ma è identificato tramite 2 „coordinate‟: il

numero di traccia e il numero di settore cui appartiene. A causa della forma del disco e del suo moto di

rotazione (anziché di scorrimento lineare come nel caso del nastro), un punto che si trova su di esso ritorna

periodicamente nella stessa posizione. Anche nei dischi esiste il problema che, dal momento dell'avviamento

del disco, passa un po' di tempo prima che questo giunga alla velocità ideale per la lettura; ma, basterà

attendere che, una volta raggiunta la velocità di lettura, il dato ripassi sotto la testina per poterlo leggere.

Poiché il disco ruota piuttosto velocemente (oggi fino a una velocità di 7200 giri/minuto) il tempo di attesa

prima che un dato ripassi nella posizione desiderata e utile per la lettura è piuttosto limitato. E‟ quindi

sufficiente predisporre sulla superficie del disco un singolo gap, utilizzato come riferimento per segnalare

l'inizio del conteggio dei settori. Supponiamo ad esempio di voler leggere il blocco che in Figura 8 è

contrassegnato da un asterisco. Possiamo supporre di cominciare a contare le tracce dal centro lungo il

raggio e i settori a partire dal gap e procedendo in senso orario; il settore contrassegnato dall'asterisco nella

figura corrisponde allora alla seconda traccia del primo settore.

I blocchi interni del disco sono più corti e questo, poiché in ogni settore deve essere registrato un uguale

numero di dati, fa sì che la densità di informazione (quantità di dati per unità di superficie) nelle tracce

interne sia maggiore di quella delle tracce esterne. Tenendo conto che c'è un limite fisico nella densità delle

informazioni che possono essere registrate su un supporto magnetico, si ha una utilizzazione non ottimale

del supporto, in quanto solo nelle tracce interne si può utilizzare la massima densità possibile, mentre la

densità delle tracce esterne è inevitabilmente inferiore. Se da un certo punto di vista, quindi, le tracce esterne

sono sottoutilizzate, quelle interne, poiché le prestazioni del supporto vengono portate al limite, sono quelle

in cui si può avere più facilmente qualche inconveniente, come ad esempio la perdita di qualche dato, a

causa di processi di smagnetizzazione. In testa a ciascun blocco di dati viene scritto il suo indirizzo,

individuato, come detto, dalla traccia e dal settore cui appartiene.

Figura 8

33

Al momento in cui si acquista un disco, questo è semplicemente di materiale magnetico neutro, privo di

punti di riferimento per il calcolatore. Per poterlo utilizzare occorre dargli un formato, quindi eseguire la

cosiddetta operazione di formattazione. Il disco non viene, di solito, formattato direttamente dal produttore

in quanto ogni sistema operativo utilizza una diversa convenzione (formato) e quindi, nonostante si possano

usare gli stessi dischi con sistemi operativi diversi, a seconda del sistema operativo utilizzato vengono

registrate inizialmente informazioni diverse da sistema a sistema per consentire l‟accesso ai dati.

Il sistema più semplice per operare una lettura su disco è utilizzare un'unica testina che può spostarsi lungo il

raggio e quindi leggere qualunque traccia, o insieme di tracce contigue, del disco. Il metodo quindi più

immediato per rendere più veloce la lettura consiste nell'utilizzare un unico blocco composto da più testine,

una per traccia, onde evitare di dovere attendere il tempo necessario alla testina per spostarsi radialmente e

posizionarsi sulla traccia in cui è contenuto il dato che deve essere letto. Se il dato si trova nel settore

immediatamente successivo alla posizione della testina, la lettura sarà pressoché immediata, ma se il dato è

appena passato sotto la testina bisognerà attendere che il disco compia un'intera rotazione prima di poterlo

leggere. Quindi si può dire che, mediamente, il tempo di accesso di un disco è pari al tempo necessario ad

una mezza rotazione del disco stesso. Memorie di massa più veloci possono essere costituite da sistemi a

stack (Figura 9), in cui si hanno più dischi con più testine e quindi, se i dati vengono scritti nella stessa

posizione relativa in dischi diversi si potrà accedere contemporaneamente ad una quantità di dati superiore a

quella accessibile su un singolo disco di tante volte quante sono i dischi che vengono impiegati.

Figura 9

Un sistema di memorizzazione che consente di ovviare ai problemi di densità non omogenea che si hanno

nei dischi, è il sistema basato sui tamburi magnetici (Figura 10): si tratta di cilindri in cui i dati sono scritti

sulla superficie esterna: quindi, ogni traccia ha la stessa dimensione e inoltre, essendo il sistema a testine

fisse, la lettura può avvenire piuttosto rapidamente.

Figura10

34

Tuttavia, rispetto ad una pila di dischi, si ha una superficie utile minore e quindi la memorizzazione delle

informazioni è meno efficiente, tanto che questi dispositivi non sono mai stati utilizzati in modo esteso.

I dischi che offrono la massima densità di informazione sono quelli ottici: usano la stessa tecnologia che

viene utilizzata per i compact disc e per i DVD, cioè l'1 o lo 0 vengono codificati mediante un foro, praticato

con il raggio laser su una superficie riflettente, di dimensioni talmente piccole che su un disco di grandezza

uguale o poco superiore a quella di un compact disc, possono essere memorizzate quantità di dati molto

elevate, dell'ordine di alcune centinaia di Mbyte (CD-ROM) fino ad alcuni Gbyte (DVD-ROM) ed oltre per

dischi ottici di dimensioni maggiori. Durante la lettura, se non c‟è alcun foro il raggio laser di bassa potenza

che è presente sul lettore viene riflesso, altrimenti attraversa il disco e non viene riflesso. Le due situazioni

corrispondono una alla lettura di un 1 e l‟altra alla lettura di uno 0. I dispositivi che scrivono i dischi ottici

(masterizzatori) forano fisicamente il disco e fanno quindi sì che questo non sia più riscrivibile, in quanto,

ovviamente, una volta praticato un foro non è possibile “riempirlo” di nuovo. Per questo motivo i dischi che

operano secondo questo principio si dicono di tipo WORM che significa Write Once Read Many, cioè

“scrivi una volta sola e leggi molte volte”. Nel caso di CD e DVD si parla rispettivamente di CD-ROM e

DVD-ROM per evidenziare la proprietà di tali dispositivi di consentire solo la lettura dei dati, una volta che

sono stati scritti. Esistono anche dischi (come ad esempio i CD-RW e i DVD-RW cioè i CD e DVD

riscrivibili), che si basano su alterazioni reversibili della superficie riflettente e possono essere quindi scritti

più volte.

Il compact disc è stato presentato originariamente come supporto per registrazioni musicali pressoché

indistruttibile. Pur essendo sicuramente meno alterabile di un 33 giri in vinile, è tuttavia più corretto dire

che, per quanto riguarda la ricostruzione di un segnale musicale, il danneggiamento o la mancata lettura di

alcuni byte alterano la riproduzione sonora in modo quasi impercettibile, anche per merito dei metodi di

correzione degli errori che compensano la mancata lettura di alcuni campioni isolati. Quando invece si tratta

di dati, la perdita di un singolo bit può essere talvolta sufficiente a compromettere completamente

l'elaborazione. Si pensi ad es. ad un'immagine di tipo medico in cui una zona di interesse può essere

rappresentata da una alterazione di dimensioni anche molto limitate, all‟apparenza molto simile all'effetto

che si può avere a causa della perdita o all'alterazione di qualche pixel. Oppure, più semplicemente, ad un

programma in cui venga sostituita un‟istruzione con un‟altra a caso, a causa di un errore di lettura.

L'affidabilità di questi dispositivi non è quindi assoluta, anche se è di solito superiore rispetto a quella un

supporto magnetico; pertanto, se si vuole gestire un archivio, anche utilizzando dischi ottici sarà comunque

opportuno disporre sempre di una seconda copia di sicurezza (backup).

Vediamo ora quali sono i parametri caratteristici dei dispositivi di memorizzazione di massa, in particolare

dei dischi e dei nastri: la caratteristica principale è la capacità, cioè la quantità totale di byte che si può

memorizzare. Per i nastri a bobina era dell'ordine di alcune decine di Mbyte; i DAT e debgi altri formati di

nastri nati per il video (ad es. DV o Video 8 Sony) si è arrivati a decine di Gbyte. Può essere interessante

anche valutare il costo medio di un nastro per valutare il costo effettivo per byte di questi dispositivi: un

nastro DAT, DV o Video8 per memorizzazione dati costa in genere circa alcuni Euro. Per quanto riguarda i

dischi, possono essere asportabili o fissi. I dischi asportabili sono di solito i floppy disk (ormai in disuso) che

possono essere da 3.5 pollici di diametro e contenere 720 Kbyte, 1.44 Mbyte o 2.88 Mbyte, oppure da 5.25

pollici (ormai totalmente obsoleti) e contenere o 360 Kbyte o 1.2 Mbyte. I floppy disk avevano un costo di

circa 50 centesimi, fino a circa 1 Euro per quelli da 2.88 Mbyte, standard che però non si è mai affermato.

Nei sistemi più vecchi venivano utilizzati anche dischi da 8 pollici, con una capacità di circa 360 Kbyte.

Nella valutazione del costo dei dischi asportabili bisogna considerare anche il prezzo del lettore, di solito

molto basso per quanto riguarda i lettori di floppy disk. Un lettore di floppy disk ha un prezzo di circa 15

Euro. Gli hard disk sono dischi fissi, contenuti all'interno del cabinet del calcolatore o in contenitori esterni e

comprendono anche il dispositivo di lettura. Gli hard disk hanno una capacità che varia oggi di solito di

qualche centinaio di Gbyte, con prezzi a partire da circa 50 Euro.

35

Per quanto riguarda i dischi ottici e magneto-ottici, da un lato, hanno una capacità molto elevata, che va dai

circa 650 Mbyte dei CD-ROM a 10 Gbyte dei DVD doppio strato a decine di Gbyte e possono costare 0.5-1

Euro (CD-ROM e CD-RW) ad una decina di Euro e più (dischi WORM di formato superiore), e quindi

hanno un prezzo per byte molto basso. Attualmente i dispositivi più economici, relativamente al costo per

byte sono i CD-ROM e i DVD-ROM, che però possono essere scritti una sola volta. Il masterizzatore per

CD/DVD ha un costo di alcune decine di Euro. Il tempo di accesso è di solito molto più elevato rispetto a

quello di un hard disk. I CD/DVD-RW hanno caratteristiche analoghe, con un costo per byte lievemente più

alto, ma sono riscrivibili. Tuttavia, per come è organizzata l‟informazione sul disco, non è possibile

utilizzarli esattamente come un hard disk, anche se sono in commercio programmi che, a scapito della

velocità di accesso, operano su di essi come se fossero hard disk. Inoltre, possono essere riscritti un numero

elevato, ma comunque limitato (fino ad un migliaio) di volte.

Gli altri due parametri che caratterizzano un dispositivo per la memorizzazione di massa sono il tempo di

accesso, che equivale al tempo che trascorre dal momento in cui si impartisce l'ordine di andare a leggere un

dato, al momento in cui la testina o il sistema di lettura si posizionano sul dato stesso. Per i nastri non ha

molto senso parlare di tempo di accesso in quanto abbiamo una struttura sequenziale, quindi, come già detto,

la ricerca di un dato può richiedere anche minuti se il nastro è lungo. Per i floppy si hanno tempi di accesso

dell'ordine di 150 millisecondi, per i dischi ottici di 40-100 millisecondi, per gli hard disk di qualche

millisecondo. Una volta che sono stati raggiunti i dati, è anche importante considerare quanto tempo

impiegano per essere trasferiti in memoria: questo parametro è detto Transfer Rate e si misura in Kbyte al

secondo. Questo dipende in buona parte dalle caratteristiche meccaniche del disco ma anche dal dispositivo

di controllo, cioè dal circuito elettronico che viene utilizzato per gestire le operazioni che si effettuano sul

disco. Per i floppy si hanno Transfer Rate nell'ordine delle decine di Kbyte/s, per i dischi alcuni Mbyte/s, per

gli hard disk si arriva anche a decine di Mbyte/s. Come abbiamo già accennato, per le diverse caratteristiche

che presentano questi dispositivi, la loro utilizzazione varia da dispositivo a dispositivo. L'hard disk è una

memoria di massa veloce e, per brevi periodi, può essere utilizzato anche durante una elaborazione nel caso

che la memoria centrale non sia in grado di contenere tutti i dati da elaborare, limitando, se gestiti in modo

intelligente, la riduzione, comunque rilevante, della velocità di esecuzione del processo. Quindi sono

utilizzabili per memorizzare dati e programmi (ad es., inevitabilmente, il sistema operativo) che vengono

utilizzati molto spesso e che quindi è necessario che risiedano permanentemente all'interno del calcolatore.

Oppure possono essere sfruttati da meccanismi di gestione della memoria che utilizzano l'hard disk come se

fosse memoria RAM. I floppy disk, i CD ROM e alcuni dischi ottici, essendo asportabili e tascabili, sono

molto utili per il backup di quantità relativamente limitate di dati e per il trasferimento di dati fra calcolatori

che non sono collegati fra loro in rete, mentre i nastri e i dischi ottici di maggiore capacità e dimensioni

vengono prevalentemente utilizzati per l'archiviazione di grandi quantità di dati.

Recentemente con l‟avvento delle memorie FLASH, si stanno diffondendo anche dispositivi di memoria di

massa di dimensioni limitatissime, detti pen drive o data key, in quanto assumono spesso la forma di una

piccola penna o di un portachiavi. Collegati alla porta USB del calcolatore, vengono visti dal sistema

operativo come un disco aggiuntivo, utilizzabile sia in lettura che in scrittura. La loro capacità è di alcuni

Gbyte, hanno un tempo di accesso intorno al microsecondo e un costo di alcuni Euro/Gbyte.

36

DISPOSITIVI DI INPUT/OUTPUT

TERMINALI

Sono dispositivi formati in genere da una tastiera e da un dispositivo di visualizzazione, di solito costituito

da un monitor, che nei primi calcolatori era sostituito da una stampante. Il terminale principale di un sistema

multi-utente, cioè a cui più utenti possono accedere contemporaneamente da più terminali, è detto console.

Per quanto riguarda la tastiera, oltre ai tasti che corrispondono direttamente a quelli che si trovavano nelle

macchine da scrivere, esistono alcuni tasti aggiuntivi, come il tasto di Return che si usa per indicare il

termine di un comando impartito al calcolatore, oppure, quando si elaborano testi, per andare a capo. Altri

tasti sono il cosiddetto backspace che consente di cancellare l'ultimo carattere che abbiamo inserito, il tasto

DEL (CANC sulla tastiera italiana), che cancella il carattere su cui è posizionato il cursore; il tasto INS

consente di passare da modalità inserimento a modalità sostituzione. Quando si è in modalità inserimento il

carattere viene inserito immediatamente prima di quello su cui è posizionato il cursore. Se invece ci si trova

in modalità di sostituzione, il carattere va a sostituire quello su cui si è posizionati. Abbiamo poi le quattro

frecce (tasti cursore), che vengono utilizzate in genere per spostare il cursore sullo schermo. I tasti funzione,

di solito indicati con sigle da F1 a F12, sono programmabili, cioè, a seconda del programma, a tali tasti

possono essere assegnate funzioni diverse. C'è poi il tasto ESC (escape), che in genere permette di uscire da

una modalità di operazione „speciale‟ e di tornare a quella normale. Ad esempio, nei programmi che

prevedono un Help, cioè una schermata che può essere richiesta (in genere premendo un tasto funzione,

tipicamente F1) per avere spiegazioni sulle operazioni che si possono compiere. Una volta che si è terminata

la lettura della schermata, premendo il tasto ESC si ritorna all'operazione che si stava compiendo nel

momento in cui è stato attivato l'Help. Il tasto ALT (alternative) costituisce uno shift aggiuntivo, analogo al

tasto per le maiuscole, per estendere la capacità della tastiera dando accesso a ulteriori funzioni secondarie

del tasto premuto in contemporanea ad esso.

Abbiamo visto come i caratteri vengano di solito rappresentati secondo la codifica ASCII: quando un tasto

viene premuto, al calcolatore viene trasmesso un byte o una coppia di byte. Nel caso dei tasti che

corrispondono a caratteri che sono compresi nella codifica ASCII, il byte trasmesso sarà uguale alla codifica

ASCII del carattere che corrisponde al tasto premuto. I comandi che si ottengono premendo i tasti speciali,

come i tasti funzione, ALT e i cursori (frecce) in genere inviano alla CPU un codice doppio, in cui il primo

byte è 0. Poiché nei calcolatori al codice ASCII 0 non è direttamente associato alcun simbolo, questo serve

per indicare che dalla tastiera è stato impartito un comando diverso, che non è un carattere standard ASCII

ma corrisponde a una sequenza particolare. Questa può ad esempio essere una combinazione di più tasti o

uno dei tasti funzione: sarà quindi necessario leggere il byte successivo allo 0 per decodificare il tasto o la

combinazione di tasti che sono stati effettivamente premuti.

Attualmente, nei sistemi dotati di una interfaccia utente di tipo grafico (GUI, Graphical User Interface)

l'interazione con la macchina avviene tramite lo spostamento di un cursore che può assumere varie forme

sullo schermo grafico (una freccia, una croce ecc.), a seconda del contesto. Il posizionamento del cursore in

particolari zone dello schermo, unitamente alla pressione di tasti, consente di accedere alle diverse

operazioni previste da un programma o dal sistema operativo. Per spostare il cursore ed accedere a queste

operazioni si usa il mouse. Il mouse è un dispositivo di tipo opto-meccanico (il cui funzionamento cioè si

basa su parti meccaniche in movimento e su componenti elettronici ottici). Nella sua versione più

tradizionale, lo spostamento del mouse trascina e fa muovere una pallina che si trova al suo interno; il moto

della pallina, a sua volta è trasmesso a due dischi che presentano una serie di fori lungo la circonferenza

esterna. Gli assi di tali dischi sono ortogonali, e ruotano a velocità proporzionali alle componenti della

velocità della pallina lungo l‟asse X e lungo l‟asse Y. Sulla parte esterna dei dischi è proiettato un fascio

luminoso, in modo tale che un sensore, posto in corrispondenza dell‟altra faccia del disco, possa “leggere”

quanti fori sono stati attraversati dal fascio luminoso nell‟unità di tempo e determinare uno spostamento del

cursore, lungo la direzione associata al disco, proporzionale a tale quantità. Quindi, muovendo il mouse si

37

può spostare il cursore dove si desidera; utilizzando poi i tasti che si trovano su di esso (di solito in numero

variabile da 1, come nei computer Apple, a 3), si possono attivare certe funzioni che sono rappresentate sul

video in forma grafica mediante le cosiddette icone, piccole immagini che rappresentano in modo intuitivo la

funzione cui danno accesso.

Come ultimo componente del terminale consideriamo il monitor, le cui capacità di visualizzazione

dipendono anche dalla scheda (interfaccia, v. più avanti) video cui è collegato. Bisogna quindi distinguere le

prestazioni grafiche intrinseche del monitor dalle prestazioni effettive che possono essere raggiunte una volta

che questo è collegato alla scheda video che lo pilota e che deve essere in grado di sfruttare appieno tali

capacità. Le prestazioni grafiche o in generale di visualizzazione di un calcolatore sono quindi date

dall'insieme monitor più scheda video. I monitor possono essere a colori o in bianco e nero e le dimensioni

variano tipicamente dai 15 pollici a oltre 20 pollici (la misura corrisponde alla lunghezza della diagonale

dello schermo).

La caratteristica fondamentale di un sistema grafico è la risoluzione: un'immagine su un monitor è formata

da una serie di punti luminosi detti pixel (Picture Elements). La risoluzione di un sistema grafico,

rigorosamente, sarebbe la quantità di pixel per unità di lunghezza che tale sistema è in grado di visualizzare.

In realtà, se questo si verifica per le stampanti, nel caso dei monitor, come avviene anche nel caso delle

fotocamere digitali, si considera il numero totale dei pixel visualizzabili sull‟intero schermo. Di solito la

misura è fornita nelle due dimensioni (larghezza x altezza). Tipiche risoluzioni utilizzate per i monitor

tradizionali con un rapporto di 4/3 fra larghezza e altezza sono 640x480 (VGA), 1024x768 (SVGA), 1280x

1024 (XGA). Con l‟avvento dei monitor widescreen (rapporto di circa 16/10 fra larghezza e altezza) si sono

diffusi nuovi standard per le risoluzioni offerte dalle schede video.

In un monitor a colori, un pixel è in realtà un insieme di tre punti molto ravvicinati che, visti alla distanza da

cui normalmente si utilizza il monitor, appaiono come un singolo punto. Questi tre punti, di solito, sono

posti a triangolo, e sono uno rosso, uno verde e uno blu e vengono indicati di solito con le iniziali inglesi R,

G , B. Assegnando una diversa intensità a ciascuno dei 3 punti componenti un pixel, si possono ottenere per

tale pixel tutti i colori rappresentabili con le tre componenti di partenza. Un caso particolare si verifica se

R=G=B, cioè se l'intensità dei tre punti è uguale. In questo caso si produrranno delle sfumature di grigio: in

particolare se R=G=B=0 cioè se i tre punti sono spenti, il pixel appare nero, se R=G=B=(Massimo livello di

intensità), il punto apparirà bianco. Per valori all'interno del range che va da 0 al livello massimo avremo

diverse sfumature di grigio. La capacità di visualizzazione di un monitor dipende tuttavia anche dalla scheda

video che va a pilotare questo monitor. Il range di livelli di intensità visualizzabili per ogni pixel è

proporzionale al numero di combinazioni ottenibili con la parola con cui ogni pixel è rappresentato in

memoria. Esso, come al solito, è una potenza del 2 (2m

, dove m è il numero di bit che vengono utilizzati per

la rappresentazione). Cioè all'interno della memoria contenuta in una scheda video (memoria video o VRAM)

si assegna ad ogni pixel un certo numero di bit; se si rappresenta ogni pixel con un solo bit si hanno soltanto

21, cioè due, possibilità: il pixel potrà essere o bianco o nero (acceso o spento). Se si assegna un byte per la

componente R, uno per la componente G e uno per la componente B si hanno 256 (28) livelli per ogni

componente, cioè si avranno in totale 23x8

= 224

combinazioni possibili: oltre 16 milioni di colori. Per quanto

riguarda i livelli di grigio, siccome c'è il vincolo che R G e B devono essere uguali, con 8 bit per componente

si potranno visualizzare 28 = 256 livelli di grigio diversi.

Un'altra caratteristica dei monitor che misura la nitidezza delle immagini che si possono ottenere con un

monitor, è il cosiddetto Dot Pitch, misurato in millimetri, che corrisponde alla minima distanza che devono

avere due pixel adiacenti per essere distinguibili sullo schermo. Più piccolo è il valore di dot pitch, più nitida

apparirà l'immagine.

STAMPANTI

Le stampanti sono dispositivi periferici in grado di trasferire su carta l‟output del computer. Le prestazioni

delle stampanti si caratterizzano attraverso la velocità di stampa (caratteri/secondo o pagine/minuto) e la

risoluzione che si misura in dpi (dot per inch, punti per pollice), quindi in punti per unità di lunghezza. In

questo caso i punti non sono necessariamente quelli visualizzabili e distinguibili ma quelli effettivamente

38

stampati. L‟effettiva qualità di stampa (la risoluzione effettiva, cioè i punti effettivamente distinguibili una

volta che la stampa è avvenuta) è determinata anche dal supporto su cui si stampa; essa dipende, ad esempio,

dalla porosità o dalla compattezza della carta. Carta molto porosa tende a ingrandire la dimensione del

punto, diminuendo di fatto la risoluzione. Migliori risultati in termini di risoluzione si ottengono con carta

poco porosa. Tuttavia se la carta è troppo poco porosa tende ad essere quasi impermeabile e quindi con gli

inchiostri più liquidi l‟immagine si fissa su carta con maggiore difficoltà. Le stampanti si classificano in

funzione della tecnica con cui trasferiscono i caratteri o le immagini dal calcolatore alla carta.

Le stampanti termiche hanno il vantaggio di essere poco ingombranti, molto silenziose e a basso consumo.

Utilizzano una punta che viene riscaldata e posta a contatto con una carta chimica che reagisce generando un

punto scuro nella posizione in cui avviene il contatto fra carta e punta calda. Presentano tuttavia lo

svantaggio di avere bassa risoluzione, in quanto di solito il punto, per le caratteristiche della carta, non può

essere molto piccolo. Inoltre la carta è alterabile (ad es., se esposta alla luce può cancellarsi). Normalmente

le stampanti termiche vengono utilizzate, proprio per le loro caratteristiche di praticità, silenziosità e di

scarso ingombro, all'interno di strumenti portatili o di piccolo ingombro in cui non è necessaria una elevata

risoluzione, come ad es. registratori di cassa, elettrocardiografi, terminali portatili ecc.

Le stampanti ad aghi hanno una testina costituita da una fila verticale di aghi (di solito 9 o 24), che si sposta

in orizzontale sul foglio e permette, attivando di volta in volta uno o più aghi, di comporre i caratteri

desiderati (vedi Figura 11, limitata a 6 aghi, per praticità).

Figura 11

In questo caso, il trasferimento avviene per percussione degli aghi su un nastro inchiostrato, in modo del

tutto analogo a quanto avviene in una macchina da scrivere. A causa delle percussioni del nastro sul tamburo

le stampanti ad aghi sono piuttosto rumorose e piuttosto lente: la loro velocità di stampa arriva di solito a

qualche centinaio di caratteri al secondo. Se si tiene conto che normalmente una linea di testo è composta da

un centinaio di caratteri, ciò corrisponde a circa 2-3 righe al secondo, quindi una pagina media di testo può

essere stampata teoricamente in circa dieci secondi (ovvero 6 pagine/minuto). Ma la massima velocità è

raggiungibile solo durante lo spostamento orizzontale e non tiene conto dello spostamento del rullo e di altri

fattori, come ad es. i caratteri in neretto che richiedono che la testina di stampa passi due volte sulla carta.

Quest‟ultima tecnica (il doppio passaggio della testina sulla stessa riga) può essere utilizzata anche per

aumentare la risoluzione di stampa e quindi la qualità dei caratteri o dei grafici. Mediamente, la stampa di

una pagina con una stampante ad aghi richiede in realtà almeno una ventina di secondi (3 pagg/minuto). Le

stampanti a 24 aghi hanno ovviamente una maggior risoluzione rispetto a quelle a 9 aghi e quindi

permettono di ottenere una stampa più nitida.

Vi sono poi le stampanti a trasferimento termico, che utilizzano un nastro simile a quello delle stampanti ad

aghi, ma, anziché operare il trasferimento tramite la percussione del nastro, effettuano un trasferimento a

caldo. Sono infatti dotate di un dispositivo che scalda il nastro per operare il trasferimento dell'inchiostro

sulla carta e quindi sono anch‟esse molto silenziose. Hanno tuttavia un costo di uso elevato perché il nastro

può essere utilizzato una volta sola in quanto si opera un trasferimento completo di parte del nastro sulla

carta; al contrario, un nastro inchiostrato per una stampante ad aghi può essere utilizzato più volte, anche se,

di volta in volta, con una peggiore qualità di stampa.

39

Le stampanti laser adottano una tecnica di stampa uguale a quella delle fotocopiatrici: utilizzano un rullo

fotosensibile che, quando viene colpito da un raggio luminoso, si carica elettrostaticamente ed attira

particelle molto fini di inchiostro, che vengono poi trasferite sulla carta che viene fatta scorrere su di esso.

Mentre nelle fotocopiatrici meno recenti il rullo è impressionato da un fascio di luce generato da un sistema

di lenti, nelle stampanti laser e nelle fotocopiatrici più recenti il raggio che attiva il rullo è generato da un

laser. Queste stampanti hanno un'ottima risoluzione (tipicamente 600 punti per pollice fino ad oltre 1200) e

consentono alte velocità di stampa (da 8 ad oltre 16 pagine al minuto se si tratta di testi). Permettono quindi

di stampare anche grafici ad alta risoluzione: la qualità delle immagini è limitata dal fatto di poter disporre di

due soli livelli (bianco/nero), come accade per le fotocopie. Il costo di una stampante laser dipende dalla

velocità e dalla risoluzione a cui opera, dalla presenza o meno di memoria e di un processore dedicato a

bordo, oltre che dalla disponibilità di alcuni accessori, come ad esempio il cassetto per stampare in doppia

faccia, cioè su entrambi i lati del foglio. Esso può variare da circa 100 Euro ad alcune migliaia di Euro.

Esistono anche stampanti laser a colori, che possono essere anche relativamente economiche (da circa 200

euro in su) in cui tuttavia il costo dell‟inchiostro (4 cartucce, nero + 3 colori fondamentali) è piuttosto

elevato, pari circa al costo della stampante stessa, oltre ad avere una qualità di stampa inferiore alle

stampanti a getto di inchiostro per quello che riguarda le immagini di tipo fotografico, almeno a parità di

categoria di prezzo.

Le stampanti laser senza processore sono praticamente costituite solo dall‟elemento di stampa. In questo

caso, la formazione della rappresentazione digitale dell‟immagine che dovrà poi essere trasferita su carta,

viene delegata al processore e alla memoria del computer. Sono pertanto decisamente più economiche, ma

sfruttano le risorse del computer cui sono collegate e quindi ne limitano il funzionamento sia in termini di

velocità di elaborazione che di disponibilità di memoria.

Le stampanti a getto di inchiostro, infine, hanno gradualmente soppiantato quelle ad aghi come alternativa

economica (costano da poche decine a qualche centianio di euro) alle stampanti laser, di cui avvicinano

(quando non superano) le prestazioni in termini di risoluzione. Il funzionamento è basato su un testina che,

analogamente a quelle ad aghi, si sposta orizzontalmente sul foglio. La stampa avviene per mezzo di una

matrice composta da numerosissimi ugelli microscopici che formano la testina e spruzzano, ad alta

pressione, inchiostro sul foglio posto a contatto con essa. Sono quindi equivalenti a stampanti ad aghi con un

numero elevatissimo di aghi. Hanno il vantaggio di essere silenziose, ma sono piuttosto lente (le più

economiche hanno velocità inferiori rispetto a quelle ad aghi). Inoltre, il costo delle cartucce di inchiostro di

ricambio (che sono spesso formate sia dal serbatoio dell‟inchiostro che dalla testina di stampa) è piuttosto

elevato e, se devono essere usate per stampare un numero elevato di documenti, hanno un costo per pagina

decisamente superiore alle stampanti laser. Attualmente sono economicamente vantaggiose, per il loro

prezzo limitato, se si stampano poche pagine al giorno, oppure se si devono fare stampe a colori, in quanto,

come detto, il prezzo di acquisto delle stampanti laser a colori è tuttora piuttosto elevato e la qualità

cromatica inferiore.

PLOTTER

Il plotter ha una risoluzione teoricamente infinita, in quanto, almeno nella versione più tradizionale, traccia il

disegno per mezzo di una penna che scorre sul foglio. Il limite della risoluzione del plotter è quindi dato dal

passo del motorino che muove la penna e dalle dimensioni della punta della penna stessa. E' possibile

disporre di più penne che possono essere usate per generare disegni a colori. I due tipi di plotter più comuni

sono i plotter a rullo e i plotter X-Y. Il primo tipo può essere utilizzato anche con fogli di carta di dimensioni

notevoli, ponendo vincoli solo sulla larghezza del foglio, che dovrà essere ovviamente minore o uguale della

lunghezza del rullo. E‟ costituito da un rullo su cui scorre la carta e da una penna che può muoversi solo in

orizzontale sul foglio, in modo analogo a quanto avviene per la testina di una stampante ad aghi o a getto di

inchiostro.

40

Nei plotter X-Y è invece presente un braccetto portapenna con due gradi di libertà che si può spostare sia in

orizzontale che in verticale su un piano su cui viene posato il foglio; quindi nei PLOTTER X-Y il foglio è

fisso e può avere dimensioni massime pari a quelle del piano del plotter. Attualmente i sistemi di scrittura a

penna sono in via di sostituzione con sistemi a getto di inchiostro di grandi dimensioni.

INTERFACCE

Quando si parla di dispositivi di Input/Output (I/O) o, in generale, di periferiche, si sente parlare anche delle

cosiddette interfacce. Interfaccia è tutto ciò che si interpone fra due entità non in diretto contatto fra loro e si

trova in contatto con entrambe. Il calcolatore e i dispositivi di Input/Output sono di solito progettati

separatamente e il loro hardware può avere caratteristiche elettriche e meccaniche diverse. Si rende quindi

necessario un dispositivo che faccia colloquiare il calcolatore con questi sistemi, per rendere “comprensibili”

al dispositivo di I/O i segnali provenienti dal calcolatore e viceversa. Sono stati stabiliti degli standard

industriali che impongono che verso l'esterno il calcolatore e i dispositivi di I/O si comportino secondo

„regole‟ predefinite, cioè che emettano segnali di controllo predefiniti e riconosciuti da entrambi in

corrispondenza di determinate situazioni. Per ottenere la conversione tra i segnali elettrici interni ai

dispositivi, che dipendono dai criteri di progetto che sono stati seguiti, e gli standard che devono essere

rispettati, vengono pertanto creati appositi circuiti, detti interfacce, che si interpongono tra il calcolatore e il

mondo esterno. All'interno il calcolatore o la periferica di I/O possono essere progettati secondo qualsiasi

criterio scelto dal costruttore, mentre verso l'esterno si devono rendere disponibili delle linee che hanno un

preciso significato, stabilito dallo standard. Le interfacce possono essere normalmente di due tipi: seriale o

parallelo. Nelle interfacce di tipo seriale i dati che vengono trasmessi dal calcolatore al dispositivo e

viceversa sono trasmessi un bit dopo l'altro su una stessa connessione (cavo): quindi nella versione più

semplice con tre cavi si può realizzare un collegamento con il quale si può trasmettere e ricevere qualunque

tipo di dato (vedi Figura 12) in modo bidirezionale, sia dal calcolatore verso il dispositivo di I/O che

viceversa.

L‟interfaccia USB (Universal Serial Bus) che ha ormai soppiantato la tradizionale interfaccia seriale RS232

è di fatto una interfaccia seriale ad elevate prestazioni.

Nel caso dell'interfaccia parallela (vedi Figura 13), i diversi bit appartenenti ai dati vengono invece trasmessi

contemporaneamente e quindi, per un sistema ad 8 bit, si hanno 8 linee per i dati più una serie di linee di

controllo, ciascuna con un proprio significato, corrispondenti ai segnali che vengono inviati dal dispositivo

di I/O al calcolatore e viceversa.

Figura 12

Disp.

I/O

PC

41

L'architettura è quindi più complicata rispetto ad una interfaccia seriale, poiché ci sono più linee. E‟ più

costosa ma la trasmissione è più veloce, perché nel tempo in cui su una singola linea viene trasmesso un bit,

sulle 8 linee dati si può trasmettere un intero byte. Anche un‟interfaccia seriale dispone di più linee rispetto

alle 3 necessarie nella sua configurazione di base, riservate ai segnali di controllo, ma la trasmissione dei dati

avviene comunque su una singola linea.

Figura 13

TECNICHE DI INPUT/OUTPUT

Accenniamo ora al meccanismo di sincronizzazione tra il calcolatore e il dispositivo di I/O.

I dispositivi di ingresso/uscita sono in generale molto più lenti rispetto alla velocità a cui opera la CPU;

quindi se, nel corso di una elaborazione, si devono trasferire dei dati verso un dispositivo di I/O, è inutile

attendere che il dispositivo abbia finito di stampare o di memorizzare ciò che gli è stato trasmesso, prima di

riprendere l‟elaborazione. Supponiamo, ad esempio, di disporre di una stampante che in un secondo può

stampare una riga di caratteri; il calcolatore per trasmettere alla stampante quella riga di caratteri non

richiede che qualche frazione di secondo (supponiamo 1 millisecondo). Una volta che il calcolatore ha

trasmesso alla stampante la riga da stampare, per i restanti 999 millisecondi resta in attesa che la stampante

comunichi di aver finito e di essere pronta a ricevere nuovi dati. Per gestire questa situazione di estrema

inefficienza del sistema di calcolo si usa normalmente la tecnica degli interrupt (vedi figura 14).

Figura 14

Il dispositivo di I/O e il calcolatore si scambiano (handshaking) due segnali, un segnale di interrupt generato

dal dispositivo di Input/Output e un segnale, detto Signal Busy, generato dal calcolatore. In questo caso,

schematicamente, avviene il seguente processo: il calcolatore, nel momento in cui è necessario stampare una

linea di testo, invia un segnale di Busy alla stampante, indicando che è pronto a trasmettere i dati, e pone sul

Bus i dati da stampare. Fatto ciò, il calcolatore può passare ad eseguire un altro programma. Nel momento in

42

cui la stampante ha finito di stampare i dati inviatigli dal calcolatore, essa trasmette il segnale di Interrupt,

che provoca una interruzione, cioè una sospensione delle attività del calcolatore. Il calcolatore arresta la

propria attività corrente, memorizza la situazione in cui si trova (in pratica memorizza il contenuto dei

registri della CPU in una opportuna zona della memoria), effettua una nuova trasmissione, cioè manda un

nuovo segnale di Busy e dei nuovi dati verso la stampante, e poi riprende ad eseguire il suo programma

ripartendo dalla situazione immediatamente precedente al segnale di Interrupt.

Questa tecnica è utilizzata in particolare per le stampanti ma anche in qualunque altro caso in cui sia

necessario gestire eventi le cui occorrenze non siano prevedibili; ad es. la pressione del tasto su una tastiera:

anche il meccanismo con cui la tastiera indica al calcolatore che ha un dato da trasferire, è infatti un

meccanismo di Interrupt. Mentre il calcolatore sta eseguendo una qualunque operazione, se viene premuto

un tasto sulla tastiera viene generato un segnale di interrupt che blocca l'attività e attiva un programma,

specificamente associato a questo segnale, che gestisce l'operazione relativa alla pressione del tasto ed

all‟invio verso la CPU del codice corrispondente. Siccome non c'è un unico dispositivo che utilizza la

tecnica di interrupt, ma tale tecnica è condivisa da quasi tutti i dispositivi di Input/Output, è necessario

disporre di più linee di interrupt: a ciascuna linea viene assegnato un certo dispositivo ed una certa priorità.

Può capitare, ad esempio, che il calcolatore debba scrivere un dato su un disco e contemporaneamente un

altro dato debba essere anche trasferito verso la stampante: le due azioni sono ovviamente incompatibili,

quindi bisogna stabilire una priorità secondo la quale si dà più importanza all'uscita sulla stampante o alla

scrittura su disco. Se si deve cioè accedere a risorse comuni, vi sono dispositivi che hanno una più alta

priorità (precedenza) rispetto ad altri per quanto riguarda l'accesso a tali risorse.

ASSEMBLAGGIO DI UN PC

Vediamo ora le diverse parti con cui è possibile assemblare un calcolatore a partire da

alcune parti fondamentali che si possono trovare direttamente in commercio.

Il componente di base del calcolatore è la motherboard (scheda madre), che è tipicamente alloggiata

all'interno di un mobiletto metallico (cabinet) che può essere di varie dimensioni, a seconda del livello di

espandibilità desiderato, cioè in funzione di quanti dispositivi accessori si pensa di dover alloggiare al suo

interno. La motherboard è un grosso circuito stampato su cui sono montate (anche) la CPU e la memoria

centrale con i suoi eventuali alloggiamenti di espansione; inoltre, per collegare queste due strutture vi sarà un

bus, il quale dovrà essere reso disponibile anche verso l'esterno, per collegare, ad es., una stampante tramite

una opportuna interfaccia. Sulla motherboard vi saranno quindi anche degli slot (fessure), alloggiamenti in

cui possono essere inserite schede di espansione, interfacce, o altre schede utili al funzionamento del

calcolatore.

Integrate nella motherboard o sotto forma di schede esterne da inserire negli slot si possono trovare delle

interfacce, parallele o seriali, oppure controllori per dispositivi di input/output. La tendenza attuale è

comunque verso l‟integrazione di questi dispositivi direttamente sulla motherboard; il controllore per i dischi

consiste in pratica in un'interfaccia parallela veloce in grado di trasmettere e ricevere i segnali di controllo

per i lettori di dischi. Di solito sono divise in due „famiglie‟: IDE o EIDE (Extended IDE, con prestazioni più

elevate) e SCSI (Small Computer System Interface), più costose e che permettono di raggiungere transfer

rate più elevati. Le interfacce parallele normalmente sono di tipo Centronics, utilizzate per le stampanti, o di

tipo IEEE488, utilizzate per gestire dispositivi di acquisizione dati. Le interfacce seriali sono di solito di tipo

RS232 o RS422; la RS232 contiene un sottoinsieme delle linee di controllo presenti nella RS422. Le

interfacce USB (Universal Serial Bus), più recenti, sono delle interfacce seriali basate su un protocollo che

consente di trasmettere dati ad una velocità molto superiore alle interfacce RS232/422 e hanno ormai

soppiantato sia le interfacce seriali che parallele tradizionali.

Le schede video, che pilotano il monitor, possono essere utilizzate per la sola visualizzazione, cioè

esclusivamente per generare immagini verso l'esterno, oppure, nel caso dei cosiddetti Frame Grabber, anche

43

per collegare una telecamera e acquisire immagini dall'esterno. Talvolta il frame grabber è dotato anche di un

sintonizzatore televisivo e quindi viene a costituire una cosiddetta scheda TV, che permette di guardare

programmi televisivi sul monitor del PC.

Infine vi è l'alimentatore, che, a partire dalla tensione di rete di 220V in corrente alternata fornisce tensioni

continue di 3V, 5V e 12V; 5V (talvolta 3V) è la tensione a cui tipicamente operano i circuiti logici (e quindi

anche la CPU), mentre gli altri dispositivi contenuti nel mobile dei calcolatore (i dischi rigidi, i lettori di

floppy disk, CD-ROM e DVD o i masterizzatori) vengono normalmente alimentati a 12V. Un alimentatore è

quindi costituito da uno o più trasformatori e da stabilizzatori di tensione che eliminano le fluttuazioni della

tensione di rete; di solito sono presenti anche delle prese di corrente ausiliare per collegare eventuali

periferiche oltre, ovviamente, ad un interruttore per l‟accensione e lo spegnimento della macchina.