Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 1236

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>The Unix and Internet Fundamentals HOWTO: Come fa il computer a immagazzinare le cose in memoria?</TITLE>
 <LINK HREF="Unix-Internet-Fundamentals-HOWTO-11.html" REL=next>
 <LINK HREF="Unix-Internet-Fundamentals-HOWTO-9.html" REL=previous>
 <LINK HREF="Unix-Internet-Fundamentals-HOWTO.html#toc10" REL=contents>
</HEAD>
<BODY>
<A HREF="Unix-Internet-Fundamentals-HOWTO-11.html">Avanti</A>
<A HREF="Unix-Internet-Fundamentals-HOWTO-9.html">Indietro</A>
<A HREF="Unix-Internet-Fundamentals-HOWTO.html#toc10">Indice</A>
<HR>
<H2><A NAME="s10">10. Come fa il computer a immagazzinare le cose in memoria?</A></H2>

<P>Probabilmente saprete che ogni cosa in un computer viene memorizzata
come stringa di bit (binary digit; possiamo immaginarli come molti
piccoli interruttori). Ora vedremo come questi bit vengano impiegati
per rappresentare le lettere e i numeri che il computer manipola.
<P>Prima di poter affrontare questo argomento, &egrave; necessario comprendere
la <EM>dimensione di parola</EM> del computer. Si tratta
della dimensione preferita dal computer per spostare unit&agrave; di
informazioni; tecnicamente &egrave; l'ampiezza dei <EM>registri</EM> dei processore, ovvero le aree che il processore utilizza per
compiere calcoli logici e aritmetici. Quando leggiamo che i computer
hanno dimensione in bit (per esempio ``32-bit'' o ``64-bit'') ecco che
cosa si intende.
<P>La maggior parte dei computer (compresi i PC 386, 486, Pentium e
Pentium II) ha una dimensione di parola di 32 bit. Le vecchie macchine
286 lavoravano a 16. Mainframe vecchio stile spesso hanno parole di 36
bit. Pochi processori (come Alpha di quella che prima era la DEC e ora
&egrave; Compaq) hanno parole di 64 bit. La parola di 64 bit diverr&agrave; pi&ugrave;
comune nei prossimi cinque anni; Intel sta progettando di sostiuire il
Pentium II con un chip a 64 bit chiamato `Merced'.
<P>Il computer vede la memoria core come sequenza di parole numerate da
zero in avanti, fino a valori molto grandi a seconda della dimensione
della memoria. Tale valore &egrave; limitato dalla dimensione della parola,
motivo per cui le vecchie macchine come i 286 dovevano svolgere
complicati contorsionismi per indirizzare grandi quantit&agrave; di memoria.
Non li descriver&ograve; qui; procurano ancora degli incubi ai vecchi
programmatori.
<P>
<H2><A NAME="ss10.1">10.1 Numeri</A>
</H2>

<P>I numeri sono rappresentati come parole o coppie di parole, a seconda
della dimensione di parola del processore. Su macchine a 32 bit, la
parola &egrave; la dimensione pi&ugrave; comune.
<P>L'aritmetica degli interi &egrave; simile ma non &egrave; esattamente identica alla
matematica in base due. Il bit di ordine pi&ugrave; basso &egrave; 1, il successivo
2, poi 4 e cos&igrave; via in notazione binaria. Ma i numeri dotati di segno
sono rappresentati in notazione <EM>complemento a due</EM>.
Il bit di ordine pi&ugrave; alto &egrave; un <EM>bit di segno</EM> che
rende negativa la quantit&agrave; rappresentata, mentre ogni numero negativo
pu&ograve; essere ottenuto dal valore positivo corrispondente invertendo
tutti i bit. &Egrave; per questo motivo che gli interi su una macchina a 32
bit devono essere compresi nell'intervallo tra -2^31 + 1 e 2^31 - 1
(dove ^ &egrave; l'operatore di elevamento a potenza, 2^3 = 8). Il 32-esimo
bit &egrave; usato per il segno.
<P>Alcuni linguaggi di programmazione danno accesso a una <EM>aritmetica senza segno</EM> ovvero una artimetica in base 2 con
solo i numeri positivi e lo zero.
<P>La maggior parte dei processori e alcuni linguaggi possono manipolare
numeri in <EM>virgola mobile</EM> (funzionalit&agrave; incorporata
nel chip di tutti i processori recenti). I numeri in virgola mobile
forniscono un intervallo pi&ugrave; ampio degli interi e consentono di
esprimere le frazioni. I modi in cui questo avviene sono diversi e un
po' troppo complicati per essere affrontati in dettaglio in questa
sede. Tuttavia, l'idea generale &egrave; molto simile alla cosiddetta
`notazione scientifica', dove si pu&ograve; scrivere (per esempio) 1.234 *
10^23; la codifica del numero viene divisa in una <EM>mantissa</EM> (1.234) e in un <EM>esponente</EM> (23) che indica le potenze di
dieci.
<P>
<H2><A NAME="ss10.2">10.2 Caratteri</A>
</H2>

<P>I caratteri sono normalmente rappresentati come stringhe di sette bit,
in una codifica chiamata ASCII (American Standard Code for Information
Interchange). Sulle macchine moderne, ciascuno dei 128 caratteri ASCII
&egrave; dato dai sette bit pi&ugrave; bassi di un <EM>ottetto</EM> a 8
bit; gli ottetti sono riuniti in parole di memoria in modo che (per
esempio) una stringa di sei caratteri occupi solamente due parole di
memoria. Per vedere una mappa dei caratteri ASCII, scrivere `man 7
ascii' al prompt di Unix.
<P>Il paragrafo precedente, per&ograve;, non &egrave; completamente corretto, per due
ragioni. Quella minore &egrave; che il termine `ottetto' &egrave; formalmente
corretto ma raramente utilizzato; la maggior parte delle persone si
riferisce a un ottetto come a un <EM>byte</EM> e ritiene
che i byte siano lunghi otto bit. Per essere corretti, il termine
`byte' &egrave; pi&ugrave; generale; per esempio, ci sono state macchine a 36 bit
con byte di 9 bit (anche se probabilmente non capiter&agrave; pi&ugrave; in futuro).
<P>La ragione principale &egrave;, invece, che non tutto il mondo usa i codici
ASCII. Infatti, molti paesi non possono usarli: mentre i codici ASCII
funzionano bene per l'inglese americano, non contengono molte
accentate e caratteri speciali necessari per le altre lingue. Persino
l'inglese britannico ha il problema della mancanza di un segno per la
sterlina.
<P>Ci sono stati diversi tentativi di risolvere questo problema. Tutti
fanno uso dell'ottavo bit non usato dai codici ASCII, che in questo
modo risultano la met&agrave; inferiore di un set di 256 caratteri. Quello
pi&ugrave; largamente utilizzato &egrave; il set di caratteri `Latin-1' (o pi&ugrave;
formalmente ISO 8859-1). Si tratta del set di caratteri predefinito
per Linux, HTML e X. Microsoft Windows usa una versione mutante di
Latin-1 che aggiunge alcuni caratteri come le virgolette destre e
sinistre, in posizioni lasciate libere da Latin-1 per ragioni storiche
(per una resoconto severo dei problemi che ha provocato, vedere la
pagina 
<A HREF="http://www.fourmilab.ch/webtools/demoroniser/">demoroniser</A>.
<P>Latin-1 gestisce le principali lingue europee, tra cui inglese,
francese, tedesco, spagnolo, italiano, olandese, norvegese, svedese,
danese. Tuttavia non &egrave; ancora sufficiente, per cui esistono altre
serie di set di caratteri da Latin-2 a -9 per rappresentare il greco,
l'arabo, l'ebraico e il serbo-croato. Per maggiori dettagli vedere la
pagina 
<A HREF="http://www.utia.cas.cz/user_data/vs/documents/ISO-8859-X- charsets.html">ISO alphabet soup</A>.
<P>La soluzione definitiva &egrave; uno standard enorme chiamato Unicode (e il
suo gemello identico ISO/IEC 10646-1:1993). Unicode &egrave; identico a
Latin-1 nella 256 posizioni pi&ugrave; basse. Nello spazio successivo dei 16
bit comprende greco, cirillico, armeno, ebraico, arabo, devanagarico,
bengalese, gurmukhi, gujarati, oriya, tamil, telugu, kannada, malese,
tailandese, lao, georgiano, tibetano, giapponese kana, il set completo
del coreano hangul moderno e un set unificato di ideogrammi
cinesi/giapponesi/coreani (CJK). Per maggiori dettagli vedere la 
<A HREF="http://www.unicode.org/">Unicode Home Page</A>.
<P>
<HR>
<A HREF="Unix-Internet-Fundamentals-HOWTO-11.html">Avanti</A>
<A HREF="Unix-Internet-Fundamentals-HOWTO-9.html">Indietro</A>
<A HREF="Unix-Internet-Fundamentals-HOWTO.html#toc10">Indice</A>
</BODY>
</HTML>