2 - Organizzazione Dei Sistemi Di Calcolo
2 - Organizzazione Dei Sistemi Di Calcolo
2 - Organizzazione Dei Sistemi Di Calcolo
Il percorso dati (data path) di una tipica CPU di von Neumann è composta dai
registri (da 1 a 32), dalla ALU e da alcuni bus che connettono fra loro le diverse
parti.
I registri alimentano due registri di input della ALU che mantengono i dati di
ingresso della ALU mentre questa è occupata nell’esecuzione di alcune computazioni.
La ALU esegue alcune semplici operazioni sui suoi input, come addizioni,
sottrazioni e altre semplici operazioni, generando un risultato che viene
memorizzato in un suo apposito registro di output.
Questo valore può essere successivamente immagazzinato in uno dei registri della
CPU che, volendo, può essere copiato in memoria in un secondo momento.
La maggior parte delle istruzioni può essere divisa in due categorie principali:
- istruzioni registro-memoria (necessita di una fase di caricamento delle parole[1]
della memoria nei registri): permettono di prelevare parole di memoria per portarle
all’interno dei registri (o viceversa), dove sono utilizzabili, per esempio, come
input della ALU per effettuare istruzioni successive.
- istruzioni registro-registro (gli operandi sono già pronti nei registri): preleva
due operandi dai registri, li porta all’interno dei registri di input della ALU,
esegue su di loro una qualche operazione e ne memorizza il risultato in uno dei
registri.
________________
Esecuzione dell’istruzione
Pipelining
Affinché le due istruzioni possano essere eseguite in parallelo, non devono però
esserci conflitti nell’uso delle risorse (cioè i registri) e nessuna delle due
istruzioni deve dipendere dal risultato dell’altra.
Inoltre, non tutte le istruzioni possono essere svolte in parallelo (l’input di una
istruzione può dipendere dal risultato della precedente) e sarebbero necessarie
troppe componenti hardware per le varie unità che andrebbero poi sincronizzate.
________________
Architetture superscalari
Multiprocessori
Multicomputer
Multiprocessori con molte CPU sono difficili da realizzare, per via del problema
delle connessioni di ciascuna CPU verso la memoria comune.
I progettisti hanno superato il problema abbandonando il concetto di memoria comune
e realizzando un elevato numero di CPU interconnesse, ciascuna con la propria
memoria privata.
Le CPU in un multicomputer sono accoppiate in modo lasco (loosely coupled) e
comunicano attraverso scambi di messaggi.
In architetture grandi la completa interconnessione non è fattibile così sono
utilizzate topologie differenti come la griglia, l’albero o l’anello.
________________
Memoria principale
La memoria è quella parte del calcolatore in cui sono depositati programmi e dati.
Bit
L’unità base della memoria è il bit (BInary digiT): una variabile che assume solo
due stati (0 o 1).
1 byte = 8 bit.
Indirizzi di memoria
I byte in una parola possono essere scritti da sinistra a destra (big endian)
oppure da destra a sinistra (little endian).
Esempio: il numero 0A1FH può essere scritto come sequenza big endian F1A0H oppure
come sequenza little endian così come è scritto.
________________
Codici correttori
Occasionalmente le memorie dei calcolatori possono commettere degli errori per via
di picchi di tensione sulle linee di alimentazione o per altre cause. Per
proteggersi da tali errori, alcune memorie utilizzano dei codici di rilevazione e/o
di correzione degli errori. Quando si impiegano questi codici vengono aggiunti dei
bit extra a ogni parola di memoria secondo una modalità particolare. Quando una
parola viene letta dalla memoria, si controllano questi bit aggiuntivi per vedere
se si è verificato un errore.
Supponiamo che una parola di memoria consista di m bit di dati ai quali aggiungiamo
r bit di controllo; sia quindi n = m + r la lunghezza totale. Un’unità di n bit
contenente m bit di dati e r bit di controllo è spesso chiamata parola di codice
(codeword) a n bit.
Con una parola di memoria a m bit tutte le 2m combinazioni di bit sono legali, ma,
per via del modo in cui sono calcolati i bit di controllo, solo 2m delle 2n parole
di codice sono valide. Se una lettura da memoria restituisce una parola di codice
non valida, il calcolatore sa che è avvenuto un errore di memoria. Conoscendo
l’algoritmo che calcola i bit di controllo è possibile costruire una lista completa
delle parole di codice lecite e, da questa lista, trovare le due parole di codice
la cui distanza di Hamming è minima; questa distanza è la distanza di Hamming
dell’intero codice.
Aggiungiamo poi un bit di parità a ciascuna delle tre regioni vuote per ottenere al
loro interno una parità pari, come illustrato nella Figura 2.14(b).
Per costruzione la somma dei bit in ciascuno dei tre cerchi, A, B e C, è ora un
numero pari. Nel cerchio A abbiamo i quattro numeri 0, 0, 1 e 1, la cui somma fa 2,
un numero pari. Nel cerchio B i numeri sono 1, 1, 0 e 0, che sommati fanno ancora
2, un numero pari. Infine nel cerchio C abbiamo nuovamente la stessa situazione. In
questo esempio tutti i cerchi hanno la stessa somma, ma, in altre situazioni, è
possibile ottenere somme diverse, come 0 e 4. Questa figura corrisponde a una
parola di codice con 4 bit di dati e 3 bit di parità.
Supponiamo ora che il bit nella regione AC diventi errato, passando dal valore 0 al
valore 1, come mostrato nella Figura 2.14(c). A questo punto il calcolatore può
vedere che i cerchi A e C hanno la parità errata (dispari). L’unico cambiamento di
un singolo bit che li può correggere corrisponde a riportare AC al valore 0; questa
modifica corregge correttamente l’errore. Seguendo questa strategia il calcolatore
può riparare automaticamente gli errori di memoria che coinvolgono un solo bit.
Vediamo ora come l’algoritmo di Hamming può essere usato per costruire codici a
correzione di errore per parole di memoria dalla dimensione arbitraria. In un
codice di Hamming gli r bit di parità sono aggiunti a una parola a m bit, formando
una nuova parola di lunghezza m + r bit. I bit sono numerati a partire da 1, non 0,
con il bit 1 nella posizione più a sinistra (più significativa). Tutti i bit la cui
posizione è una potenza di 2 sono bit di parità; quelli restanti sono usati invece
per i dati. Per esempio, con una parola a 16 bit, vengono aggiunti 5 bit di parità
nelle posizioni 1, 2, 4, 8 e 16, mentre le altre contengono bit di dati.
In totale la parola di memoria diventa di 21 bit (16 di dati, 5 di parità). In
questo esempio useremo (arbitrariamente) la parità pari.
Ciascun bit di parità controlla alcune posizioni dei bit specifiche ed è impostato
in modo che sia pari il numero totale di bit che hanno valore 1 nelle posizioni
controllate. Ogni bit di parità controlla le seguenti posizioni:
il bit 1 controlla i bit 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21
il bit 2 controlla i bit 2, 3, 6, 7, 10, 11, 14, 15, 18, 19
il bit 4 controlla i bit 4, 5, 6, 7, 12, 13, 14, 15, 20, 21
il bit 8 controlla i bit 8, 9, 10, 11, 12, 13, 14, 15
il bit 16 controlla i bit 16, 17, 18, 19, 20, 21.
In generale il bit di posto b è controllato dai bit b1, b2, … bn tali che b1 + b2 +
... + bn = b.
Per esempio il bit 5 è controllato dai bit 1 e 4 dato che 1 + 4 = 5. Il bit 6 è
controllato dai bit 2 e 4 in quanto 2 + 4 = 6, e così via.
Il bit di parità 4 è errato, il che significa che uno fra i bit 4, 5, 6, 7, 12, 13,
14, 15, 20 e 21 non è corretto. L’errore deve essere uno dei bit presenti in
entrambe le liste, cioè il bit 5, 7, 13, 15 oppure 21. Tuttavia il bit 2 è corretto
e quindi i bit 7 e 15 sono eliminati. Analogamente il bit 8 è corretto, eliminando
così il bit 13. Infine, dato che anche il bit 16 è corretto, va eliminato pure il
21. Il solo bit rimasto è il bit 5, che è quindi quello in cui si è verificato
l’errore; dato che è stato letto come 1, esso deve assumere il valore 0. Questa
successione di considerazioni consente di correggere gli errori.
Un semplice metodo per trovare i bit errati consiste nel calcolare inizialmente
tutti i bit di parità. Se sono tutti corretti allora non si è verificato alcun
errore (oppure più di uno).
Successivamente si sommano tutti i bit di parità errati, contando 1 per il bit 1, 2
per il bit 2, 4 per il bit 4, e così via, e la somma risultante corrisponde alla
posizione del bit errato.
Se per esempio i bit di parità 1 e 4 sono errati, ma 2, 8 e 16 sono corretti,
significa che il
bit 5 (1 + 4) è stato invertito.
________________
Memoria cache
Le CPU sono sempre state più veloci delle memorie. Questa differenza di prestazioni
si nota quando la CPU lancia una richiesta alla memoria, ma non otterrà la parola
desiderata se non dopo molti cicli di CPU. Più lenta è la memoria, più cicli dovrà
attendere la CPU .
Da anni si sa che i programmi non accedono alle loro memorie in modo completamente
casuale.
Se ad un certo istante la memoria fa un riferimento all’indirizzo A è molto
probabile che il successivo riferimento alla memoria si troverà nelle vicinanze di
A (principio di località spaziale).
Analogamente, nell’arco temporale di esecuzione del programma, si accede molto
spesso alle stesse zone del programma (principio di località temporale).
L’idea generale, quindi, prevede che quando una parola viene referenziata, la
parola stessa e alcune parole vicine sono portate dalla grande e lenta memoria
all’interno della cache, in modo che sia possibile accedervi velocemente in un
secondo momento.
Per disporre sistemi di memoria più sofisticati, è possibile avere anche tre o più
livelli di cache.
Il chip stesso della CPU contiene una piccola cache (L1) per le istruzioni e una
piccola cache per i dati (L1), le cui dimensioni sono comprese tra i 16 e i 64 KB.
Dopo questa piccola memoria c’è una cache di secondo livello (L2), che non si trova
nel chip del processore, ma che può essere inclusa all’interno del suo involucro;
questa cache, di solito è unificata (contiene sia dati che istruzioni) e la sua
dimensione può variare dai 512 KB a 1 MB.
La cache di terzo livello (L3) si trova sulla scheda del processore ed è costituita
da alcuni MB.
Di solito le cache sono annidate, nel senso che l’intero contenuto della cache di
primo livello è compreso nella cache di secondo livello e tutto il contenuto di
quest’ultima è compreso in quella di terzo livello.
________________
Memoria secondaria
Gerarchie di memoria
La soluzione che viene tradizionalmente adottata per memorizzare una gran mole di
dati consiste nell’organizzare gerarchicamente la memoria.
Nella parte alta della gerarchia si trovano i registri della CPU, ai quali si può
accedere alla stessa velocità della CPU.
Successivamente vi è la memoria cache, la cui dimensione può variare da 32 KB fino
ad alcuni megabyte.
La memoria centrale è il passo successivo e la sua dimensione è compresa tra 16 MB
per i sistemi più economici fino a decine di gigabyte per quelli professionali.
Successivamente troviamo i dischi magnetici, la vera forza lavoro per quanto
riguarda la memorizzazione permanente.
Infine ci sono i nastri magnetici e i dischi ottici utilizzati per l’archiviazione.
Dischi magnetici
Dischi IDE
Le unità IDE evolsero successivamente nelle unità EIDE (“Extended IDE”), che
supportavano anche un secondo schema di indirizzamento chiamato LBA
(“indirizzamento logico dei blocchi”). Ciò permette di superare il limite di 504
MB.
Il suo successore fu chiamato ATA-3 e ancora il successore chiamato ATAPI-4 con
velocità aumentata a 33 MB/s (ATAPI-5 -> 66 MB/s).
ATAPI-7 rappresenta una rottura con il passato in quanto usa, a differenza dei
precedenti, un’interfaccia chiama serial ATA per trasferire 150 MB/s.
Dischi SCSI
Nel corso degli anni sono state sviluppate varie versioni, aumentando man mano in
velocità (Fast, Ultra, Ultra2, Ultra3, Ultra4, ciascuna di esse aveva una versione
Wide).
Per via della velocità di trasferimento più elevata, i dischi SCSI sono lo standard
dei PC Intel di fascia alta, soprattutto nel caso dei server di rete.
SCSI non è soltanto un’interfaccia per hard disk, ma è anche un bus al quale
possono essere collegati un controllore e sette dispositivi. Questi possono
comprendere uno o più hard disk SCSI, CD-ROM, masterizzatori, scanner, unità a
nastro e altre periferiche SCSI.
RAID
La differenza tra le prestazioni della CPU e quella dei dischi è aumentata con il
tempo in modo considerevole.
Come già visto, spesso si utilizza l’elaborazione parallela per velocizzare le
prestazioni delle CPU. Quindi anche l’I/O parallelo è sembrato ad alcuni una buona
idea.
Questa idea fu adottata velocemente dal mercato e portò a una nuova classe di
dispositivi di I/O chiamata RAID (Redundant Array of Inexpensive Disks, “insieme
ridondante di dischi economici”).
Diversamente dai livelli 0 e 1 che lavorano con strip di settori, il RAID livello 2
funziona sulla base di una parola o, in alcuni casi, anche sulla base di un byte.
Questa organizzazione presenta però alcuni difetti: la rotazione dei dischi deve
essere sincronizzata e lo schema ha senso soltanto se si utilizza un numero
significativo di unità (anche con 32 dischi di dati e 6 dischi di parità l’overhead
è del 19%).
Il RAID livello 3, mostrato nella Figura 2.23(d), è una versione semplificata del
RAID livello 2. Il bit di parità viene calcolato per ogni parola di dati e poi
scritto su un apposito disco. Dato che le parole di dati sono distribuite su più
unità, anche in questo caso, come per il RAID livello 2, i dischi devono essere
sincronizzati.
Il RAID livello 4, illustrato nella Figura 2.23(e), è come il RAID livello 0, con
una parità strip-per-strip scritta su un disco aggiuntivo. Se un disco si guasta è
possibile ricalcolare i byte persi grazie al disco di parità. Questo schema
protegge dalla perdita di un disco, ma ha prestazioni scarse quando si aggiornano
piccole quantità di dati. II disco di parità può inoltre diventare un collo di
bottiglia, a causa del grande carico di lavoro che pesa su di esso.
________________
Sono dischi basati su memoria flash non volatile e si sono diffusi come alternativa
ad altà velocità ai tradizionali dischi magnetici.
I dischi flash sono fatti di celle di memoria flash a stato solido. Queste celle
sono costituite da un singolo transistor flash speciale.
La figura 2.24 mostra una cella di memoria flash. Per programmare il bit flash, si
applica alla porta di controllo una tensione elevata che accelera il processo di
iniezione a caldo nella porta flottante. Gli elettroni vengono intrappolati nella
porta flottante, portando così una carica negativa interna al transistor flash. La
carica negativa aumenta la tensione necessaria ad accendere il transistor flash e,
testando se il canale si accende con una tensione alta o bassa, è possibile
determinare se porta floattante è carica oppure no, con conseguente valore di 0 o 1
della cella flash.
Poiché gli SSD sono essenzialmente memorie, hanno prestazioni superiori ai dischi a
rotazione e il tempo di ricerca risulta pari a zero. Un SSD può operare due o tre
volte più velocemente.
Il rovescio della medaglia è il maggiore costo e una maggiore percentuale di
fallimento. Una tipica cella flash può essere scritta solo 100.000 volte prima di
smettere definitivamente di funzionare.
________________
CD-ROM
I dischi ottici, grazie alla loro grande capacità e al basso costo, sono ampiamente
utilizzati per distribuire software, libri, film e dati di tutti i tipi, nonché per
creare copie di backup degli hard disk.
Nel 1980 la Philips sviluppò insieme alla Sony il CD (Compact Disc), che sostituì
rapidamente il disco in vinile per la registrazione della musica.
Per la lettura, un diodo laser a bassa potenza invia sui pit e sui land luce
infrarossa. Dato che il laser si trova sul lato del policarbonato i pit sporgono
nella sua direzione come rilievi sulla superficie altrimenti piatta. Dato che i pit
hanno un’altezza pari a un quarto della lunghezza d’onda della luce del laser, la
luce riflessa da un pit viene sfasata di mezza lunghezza d’onda rispetto alla luce
riflessa sulla superficie circostante. Il risultato è che le due parti
interferiscono in modo distruttivo e restituiscono al fotorilevatore del lettore
meno luce di quanta viene riflessa in corrispondenza dei land. In questo modo il
lettore può distinguere un pit da un land. Si codificano i valori 1 e 0 come la
presenza o l’assenza di una transizione pit/land o land/pit.
Nel 1984 Philips e Sony compresero il potenziale dell’uso dei CD per memorizzare i
dati dei calcolatori e pubblicarono così un preciso standard per quelli che ora
vengono chiamati CD-ROM (Compact Disc-Read Only Memory).
________________
CD-Registrabili
Dal punto di vista fisico i CD-R sono simili ai CD-ROM, tranne per il fatto che
contengono una scanalatura larga 0,6 mm che serve a guidare il laser nella fase di
scrittura.
Diversamente dai CD-ROM, sui quali vi sono delle vere scanalature fisiche, le
diverse proprietà riflettenti dei pit e dei land devono essere simulate.
Per scrivere sul CD-R la potenza del laser viene portata a un valore alto.
Quando il fascio colpisce una regione del pigmento, esso lo scalda al punto da
rompere un legame chimico e questo cambiamento della struttura molecolare crea una
regione scura.
In fase di lettura il fotorilevatore vede una differenza tra le regioni scure in
cui il pigmento è stato colpito e le aree trasparenti dove è ancora intatto.
Quando il disco è letto da un normale lettore CD-ROM questa differenza è
interpretata allo stesso modo di quella che vi è tra i pit e i land.
CD-Riscrivibili
Alla potenza più elevata il laser scioglie la lega portandola dallo stato
cristallino altamente riflettente a quello amorfo, dotato di una riflettività
minore e che rappresenta un pit.
Alla potenza più bassa è possibile rilevare lo stato del materiale (per operazioni
di lettura), senza però indurre alcuna trasformazione.
I CD-RW vergini sono molto più costosi dei CD-R vergini e per questo non li hanno
sostituiti completamente. Inoltre il fatto che, una volta scritto, un CD-R non
possa essere cancellato accidentalmente, rappresenta un gran vantaggio per il
backup dei dischi.
________________
DVD
I DVD sono progettati in modo simile ai CD: si inietta policarbonato in uno stampo
e sulla superficie si possono distinguere pit e land che vengono illuminati da un
diodo laser e letti da un fotorilevatore. Le novità riguardano l’uso di:
1) pit più piccoli;
2) una spirale più stretta;
3) un laser rosso.
Insieme, questi miglioramenti permettono una capacità sette volte maggiore, che
arriva fino a 4,7 GB. Un DVD 1x ha una velocità di 1,4 M B/s (contro i 150 KB/s dei
CD).
Per ciò che concerne la capacità sono stati definiti quattro formati:
1) singolo lato, singolo strato (4,7 GB);
2) singolo lato, doppio strato (8,5 GB);
3) doppio lato, singolo strato (9,4 GB);
4) doppio lato, doppio strato (17 GB).
La tecnologia a doppio strato ha uno strato riflettente nella parte bassa, coperto
da uno semiriflettente. A seconda del punto in cui il laser è messo a fuoco, esso
rimbalza su un livello oppure sull’altro. Il livello più basso richiede che i pit e
i land siano leggermente più grandi per essere leggibili in modo affidabile, e per
questo motivo la sua capacità è leggermente inferiore rispetto a quella dello
strato superiore.
I dischi a doppio lato sono creati prendendo due dischi a singolo lato e
incollandoli l’uno contro l’altro, cioè “schiena contro schiena”.
Input/Output
Bus
Terminali
Tastiere
Monitor piatti
Entrambi i tipi di schermo vengono ridisegnati dalle 60 alle 100 volte al secondo,
accedendo alla RAM della scheda video (Video RAM), situata sulla scheda del
controllore dello schermo. Questa memoria ha una o più bitmap che rappresentano lo
schermo; su uno schermo di 1600 x 1200 pixel (picture element, “elemento
d’immagine”) la RAM della scheda video deve contenere 1600 x 1200 valori, uno per
ogni pixel.
Su uno schermo di fascia alta ogni pixel dovrebbe essere rappresentato da un valore
RGB (da Red, Green e Blue) composto da 3 byte, uno per l’intensità di ciascun
componente.
Una RAM della scheda video con 1600 x 1200 pixel e 3 byte per pixel richiede circa
5.5 MB per memorizzare l’immagine e una quantità non indifferente di tempo di CPU
per operare su di essa.
Nel caso di video in movimento (full-motion) sono necessari almeno 25 fotogrammi al
secondo, che corrispondono a una velocità totale di trasferimento dati di 155MB/s.
A partire dal Pentium II Intel ha cominciato a impiegare un nuovo bus verso la RAM
video, chiamato bus AGP (Accelerated Graphics Port, “porta per la grafica veloce”),
che può trasferire 32 bit a una frequenza di 66 MHz fornendo così una velocità di
trasferimento dati di 252 MB/s. Sono state prodotte versioni successive del bus
(fino a 8 volte più veloce) per mettere a disposizione una larghezza di banda
adatta alla grafica altamente interattiva senza sovraccaricare il bus PCI
principale.
Mouse
Il mouse è dispositivo I/O posto a fianco della tastiera, che al singolo movimento
un puntatore sullo schermo si muove in corrispondenza, permettendo agli utenti di
interfacciarsi più facilmente con l’aiuto dei due o tre pulsanti presenti su di
esso.
Esistono tre tipi di mouse: meccanici, ottici e opto-meccanici.
Il primo mouse aveva sul fondo due rotelle di gomma sporgenti con degli assi
disposti perpendicolarmente, in tal modo quando il mouse veniva spostato
parallelamente a uno degli assi principali, ruotava soltanto una rotella.
Il secondo tipo di mouse è quello ottico che ha sul fondo un LED (Light Emitting
Diode, “diodo luminescente”) e un fotorilevatore. Viene utilizzato su uno speciale
tappetino sul quale c’è una griglia di linee molto vicine fra loro; quando il mouse
si muove il fotorilevatore riconosce l’incrocio tra due linee rilevando un
cambiamento nella quantità di luce generata dal LED che viene riflessa.
Il terzo tipo di mouse è quello opto-meccanico, anch’esso dotato di una pallina che
fa ruotare due cilindretti perpendicolari tra loro. Questi sono collegati a
codificatori che hanno una serie di fori attraverso i quali può passare la luce;
quando il mouse si sposta, i cilindretti ruotano e la luce colpisce il rilevatore
ogni volta che un foro si trova allineato con il LED e il suo fotorilevatore. Il
numero di impulsi che vengono rilevati è proporzionale allo spostamento effettuato.
In genere un mouse spedisce al calcolatore una sequenza di 3 byte, chiamata in
alcuni casi mickey. Il primo byte contiene la distanza della x effettuata
dall’ultimo movimento, mentre il secondo byte fornisce la stessa informazione per
la y e il terzo byte contiene lo stato dei pulsanti del mouse.
________________
Stampanti
Stampanti laser
Una stampante laser può stampare in bianco e nero ma non può riprodurne le
sfumature. Per riprodurre la scala dei grigi la tecnica più comune è quella dei
mezzitoni. A seconda dei valori del grigio diverse celle vengono riempite di nero
in maniera tale che l’occhio le percepisca come fosse del grigio.
________________
Stampanti a colori
Stampanti speciali
Modem
Una linea telefonica permette la comunicazione fisica tra due sistemi ma non è
adatta a trasmettere i segnali di un calcolatore, che quindi vengono convertiti.
La maggior parte dei fornitori di servizi alloca l’80%-90% della larghezza di banda
al canale in entrata. A questa scelta si deve la lettera “A” nell’acronimo ADSL.
Sparse per la città esistono delle stazioni di testa connesse alla sede principale
da fibre ottiche o da cavi con un’alta larghezza di banda.
Da queste scatole partono dei cavi, con una larghezza di banda di circa 750 MHz, ai
quali si connettono i clienti che vivono vicino al suo passaggio.
La condivisione del cavo pone il problema di determinare chi può spedire dati,
quando e a quale frequenza. Per capirne il funzionamento occorre descriverne quello
della TV. In Europa la banda parte da 65 MHz e ogni canale occupa tra i 6 e gli 8
MHz. La parte inferiore della banda non è utilizzata per la trasmissione
televisiva.
I cavi moderni funzionano bene anche oltre i 750 MHz. I canali in uscita (cioè
dall’utente alla stazione di testa) sono collocati nella banda compresa tra 5 e 42
MHz (leggermente più alta in Europa), mentre il traffico in entrata (cioè dalla
stazione di testa all’utente) utilizza la parte alta della banda totale.
I modem via cavo, come quelli ADSL, sono sempre attivi: stabiliscono una
connessione non appena la macchina viene accesa e la mantengono finché non viene
spenta.
Codifica dei caratteri
ASCII
UNICODE
Lo standard ASCII è adatto alla lingua inglese, ma meno per altre lingue. I
francesi hanno bisogno degli accenti (per esempio, système), i tedeschi dei segni
diacritici (per esempio, für), e così via. Altre lingue hanno alfabeti
completamente differenti (per esempio, il russo o l’arabo) e alcune lingue
addirittura non hanno alfabeto (per esempio, il cinese).
Utilizzando simboli a 16 bit, UNICODE ha 65.536 code point. Dato che le lingue di
tutto il mondo usano complessivamente circa 200.000 simboli, i code point sono una
risorsa scarsa che deve essere allocata con molta attenzione. Circa metà dei code
point sono già stati assegnati e il consorzio UNICODE valuta in continuazione nuove
proposte per i rimanenti. Per far sì che il codice UNICODE fosse accettato più
velocemente, il consorzio ha deciso intelligentemente di utilizzare Latin-1 per i
code point compresi tra 0 e 255, rendendo più facile la conversione era ASCII e
UNICODE. Inoltre, per evitare uno spreco eccessivo di code point, ogni segno
diacritico ha il suo proprio code point e spetta al software combinarlo con la
lettera vicina per formare un nuovo carattere.
A ciascun alfabeto principale è assegnata una sequenza di zone consecutive.
I code point, oltre alle lettere di questi alfabeti, sono stati assegnati anche ai
segni diacritici (112), ai simboli di punteggiatura (112), ai caratteri
soprascritti e sottoscritti (48), ai simboli matematici (256), alle forme
geometriche (96) e ai simboli ornamentali (192).
Dopo questi code point ci sono i simboli richiesti dal cinese, dal giapponese e dal
coreano.
6400 code point sono inoltre stati allocati per uso locale, di modo che gli utenti
possano definire caratteri speciali per usi particolari.
Un altro problema è che con il tempo continuano ad apparire nuove parole. 50 anni
fa nessuno parlava di applet, cyberspazio, gigabyte, laser, modem, smiley o
videocassette. Se in inglese l’aggiunta di nuove parole non richiede nuovi code
point, in giapponese sì.
Oltre a nuove parole tecniche, c’è la richiesta di aggiungere almeno 20.000 nuovi
nomi personali (soprattutto cinesi) e di luoghi. I non vedenti ritengono che il
linguaggio Braille dovrebbe far parte di UNICODE, così come altri gruppi con
particolari interessi (di tutti i tipi) vorrebbero che ciò che percepiscono fosse
codificato, di loro diritto, in code point. Il consorzio UNICODE analizza e valuta
tutte le nuove proposte.
UNICODE utilizza lo stesso code point per i caratteri che, in giapponese e cinese,
hanno un aspetto simile, ma un significato differente o una scrittura leggermente
diversa (come se gli elaboratori di testo inglesi scrivessero "blue” come “blew"
solo perché suonano allo stesso modo). Alcune persone interpretano questo fatto
come un’ottimizzazione dovuta alla scarsità di code point, altri come un esempio di
imperialismo culturale anglosassone.
Per rendere la cosa ancora peggiore si pensi che un dizionario giapponese completo
contiene 50.000 kanji (nomi esclusi); avendo a disposizione soltanto 20.992 code
point per gli ideogrammi Han, è necessario compiere delle scelte. Non tutti i
giapponesi ritengono che un consorzio di produttori di calcolatori, anche se alcuni
sono giapponesi, sia il foro ideale per prendere queste decisioni.
UTF-8
Alla fine anche UNICODE ha esaurito i code point e inoltre utilizza 16 bit per
carattere per rappresentare testo ASCII puro, il che è uno spreco.
Per rispondere a questi problemi, è stato introdotto il sistema UTF-8 UCS
Transformation Format. I codici UTF-8 sono di lunghezza variabile, da 1 a 4 byte, e
possono codificare circa due miliardi di caratteri.
Uno dei vantaggi di UTF-8 è che i codici da 0 a 127 corrispondono ai caratteri
ASCII, che possono essere espressi in 1 byte.
Sono utilizzati in tutto sei formati differenti, come illustrato nella Figura 2.45.
I bit contrassegnati con “d” sono bit di dati.
Un altro vantaggio di UTF-8 è il fatto che il primo byte di ogni carattere UTF-8
determina univocamente il numero di byte nel carattere.
Inoltre, i byte successivi al primo in un carattere UTF-8 iniziano sempre con 10,
cosa mai vera per il byte iniziale, rendendo il codice auto sincronizzante. Cioè,
in caso di errore di comunicazione o di memoria, è sempre possibile andare avanti e
trovare l’inizio del carattere successivo.
________________
[1] unità di dati che vengono spostate tra la memoria e i registri