Ddattica.net

Corsi formazione di informatica

Argomenti » Fondamenti di Informatica » Unità di misura di memoria

Scegli un argomento:

Unità di misura di memoria

fabio ghidini — ghidini@ddattica.net

Premessa: i prefissi metrici standard

Il sistema di misura internazionale (SI) utilizza la notazione in base 10. Per esprimere misure di peso, lunghezza, capacità, etc., si utilizzano dei prefissi che rappresentano potenze di 10, o, meglio, potenze di 103. Ad esempio

1 kg = 1000 g, cioè 1 kg = 103 g

Da questo si evince che 1 kilo- = 103.

Di seguito sono riportati i prefissi standard utilizzati:

Prefissi metrici standard
Prefisso Etimologia Potenza Valore
kilo- dal greco khiloi = mille 103 1 con 3 zeri (mille)
mega- dal greco megas = grande, 'magno' (103)2 = 106 1 con 6 zeri (un milione)
giga- dal latino gigas = gigante (103)3= 109 1 con 9 zeri (un miliardo)
tera- dal greco teras = mostro (103)4= 1012 1 con 12 zeri (mille miliardi)
peta- dal greco pente = cinque, quinto- (103)5= 1015 1 con 15 zeri (un milione di miliardi)
exa- dal greco hex = sei, sesto- (103)6= 1018 1 con 18 zeri (un miliardo di miliardi)
zetta- dal latino, ultima lettera dell'alfabeto? (103)7= 1021 1 con 21 zeri (mille miliardi di miliardi)
yotta- dal latino, penultima lettera dell'alfabeto? (103)8= 1024 1 con 24 zeri (un milione di miliardi di miliardi)
Unità di misura di memoria in informatica
Introduzione

I computer devono memorizzare delle informazioni, e per farlo utilizzano tutta una serie distinta di componenti:

  • hard disk (disco fisso, un disco in cui memorizzare in modo permanente le informazioni)
  • memoria RAM (si tratta della memoria principale del computer, molto veloce ma temporanea: quando si spegne il computer viene cancellata)
  • dischi e supporti rimovibili (floppy, cd-rom, dvd-rom, dischi zip, cartucce nastro di backup, etc.), che possono essere estratti facilmente dal computer
  • memorie ROM, PROM, EPROM, etc.

Tutti questi sono componenti elettronici o supporti molto diversi tra loro per costruzione e funzionamento, ma hanno tutti lo stesso scopo: memorizzare le informazioni.

Ma cosa si intende col termine informazioni? Per informazioni si intendono i dati o i programmi che servono al funzionamento del computer. Ad esempio i dati potrebbero essere una lettera scritta, un libro, una serie di dati numerici che rappresentano una fattura, delle immagini, etc etc.

Sia che si tratti di dati che di programmi, sia che vengano memorizzati su un componente/supporto piuttosto che su un altro, essi devono essere memorizzati in un qualche genere di memoria, ed esistono delle unità di misura specifiche per misurare la memoria dei vari componenti/supporti (e per misurare la "quantità di informazione"). E' utile ribadire che tali unità di misura si applicano a tutti i componenti/supporti che memorizzano informazioni, anche se in realtà questi componenti funzionano in modi e con tecnologie molto diverse.

Il bit

L'unità di misura base in informatica è il bit (dall'inglese binary digit, cifra binaria). Il bit è un numero binario costituito da una sola cifra, uno 0 o un 1. Nel calcolatore il valore del bit sarà rappresentato da due distinte tensioni di funzionamento dei circuiti elettronici.
Cosa è possibile memorizzare in 1 bit? Molte cose:

  • il numero 0 o il numero 1
  • il valore falso o il valore vero
  • on o off
  • maschio o femmina
  • antonio o stefano

In realtà è chiaro che in un bit è possibile memorizzare ben poca informazione. E in più bit? Supponiamo di avere una serie di 4 bit: nel primo potremmo memorizzare il valore on o off, nel secondo il valore maschio o femmina, nel terzo di nuovo maschio o femmina e nel quarto 0 o 1. Si noti infatti che ogni bit potrebbe avere diversi significati e quindi rappresentare diversi tipi di valori. E' il calcolatore che si incarica di 'risalire' al significato di ogni bit.

Il byte

Un byte è costituito da una sequenza di 8 bit. Ad esempio 1101 1000bin è un byte.

Cosa è possibile memorizzare in un byte? Ad esempio:

  • una sequenza di 8 bit (vero/falso, 0/1, maschio/femmina, on/off, etc etc.)
  • un numero positivo con range da 0000 0000bin a 1111 1111bin> cioè da 0dec a 255dec
  • un numero relativo con range da -128dec a +127dec (come già premesso, in questi documenti non verrà trattata la codifica di numeri negativi e/o razionali).
  • un singolo carattere di testo, ad esempio una a, oppure una s, o una virgola ( , ), etc. (si veda...)
Word e double word

Un word è costituito da 16 bit, cioè da2 byte.

Un double word è costituito da 32 bit, cioè da 4 byte. Cosa è possibile memorizzare in un double word?

  • un numero positivo con range da 0000 0000 0000 0000bin a 1111 1111 1111 1111bin cioè da 0dec a 4.294.967.295dec
  • un numero relativo con range da -2.147.438.648dec a +2.147.438.647dec
  • un numero floating point.
  • un indirizzo (o una parte di indirizzo) della memoria del calcolatore (si veda...)
  • un qualsiasi dato (o parte di dati) che richieda 32 bit
I multipli del byte

Utilizzando i prefissi metrici standard del Sistema Internazionale saremmo portati a pensare che 1.000 byte corrispondano ad 1 KB (kilobyte):

1.000 byte = 1 KB ?

In realtà le cose stanno un po' diversamente. Come abbiamo visto, nel sistema binario si utilizzano le potenze di 2, e 1.000dec non è una potenza di 2! Ma se proviamo a calcolare le potenze di 2 scopriamo che:

210= 1.024dec

In informatica i prefissi metrici assumono sempre i valori di potenze di 2:

Prefissi metrici binari
Prefisso Potenza di 2 Potenza di 1024 Valoredec
kilo- 210 1.024 1.024
mega- 220 = 210x210 1.0242 1.048.576
giga- 230 = 210x220 1.0243 1.073.741.824
tera- 240 = 210x230 1.0244 1.099.511.627.776
peta- 250 = 210x240 1.0245 1.125.899.906.842.624
exa- 260 = 210x250 1.0246 1.152.921.504.606.846.976
zetta- 270 = 210x260 1.0247 1.180.591.620.717.411.303.424
yotta- 280 = 210x270 1.0248 1.208.925.819.614.629.174.706.176

 Attualmente tali prefissi non sono usati, ma lo saranno probabilmente in futuro quando i dispositivi di memorizzazione raggiungeranno capacità superiori.

Applicati al byte, si ottiene che:

Le unità di misura in informatica
Unità di misura Potenza di 2 Valoredec
1 bit    
1 byte 8 bit  
1 kilobyte (KB) 210 byte 1.024 byte
1 megabyte (MB) 220 byte 1.048.576 byte (1 milione di byte)
1 gigabyte (GB) 230 byte 1024 MB (1 miliardo di byte o mille milioni di byte)
1 terabyte (TB) 240 byte 1024 GB (mille miliardi di byte o mille GB)
1 petabyte (PB) 250 byte 1024 TB (mille TB)
1 exabyte (EB) 260 byte 1024 PB (mille PB)
1 zettabyte (ZB) 270 byte 1024 EB (mille EB)
1 yottabyte (YB) 280 byte 1024 ZB (mille ZB)

Si noti quindi che, ad esempio,

1 MB = 1.000.000 byte

bensì è

1 MB = 1.048.576 byte

In realtà in prima approssimazione è consuetudine considerare che 1 MB corrisponde a 1 milione di byte.

Ed a quanti bit corrisponde 1 MB?

1 MB = 1.048.576 byte = 8x1.048.576 bit = 8.388.608 bit

Analogamente si possono fare tutte le possibili equivalenze tra bit, byte e multipli di byte. Ad esempio:

3 Mb = 3 x 1.048.576 bit = 3 x 1.048.576 / 8 byte = 393.216 byte

Si noti che, dovendo fare moltiplicazioni e divisioni (tipicamente tra potenze di 2) è possibile utilizzare le proprietà delle potenze per facilitare i calcoli manuali. Ad esempio:

5 Mb = 5 x 220 bit = 5 x 220 / 8 byte

ma sapendo che 8 = 23 ed applicando le proprietà delle potenze ottengo che...

= 5 x 220 / 23 byte = 5 x 220-3 byte = 5 x 217 byte = 5 x 27 x 210 byte = 640 KB = 640 x 1.024 byte = 655.360 byte

Perchè solo multipli di 2?

ATTENZIONE: questa non è una trattazione rigorosa e tecnicamente corretta dell'argomento, ma solo una spiegazione concettuale.

La domanda è lecita... perchè 1 KB sono 1.024 byte e non 1.000? Perchè la memoria (ad esempio la RAM) è venduta in moduli multipli di 2 (4-8-32-64-128-256 MB)? Perchè questa inutile complicazione? La risposta deriva da alcuni motivi tecnologico-matematici.

Esempio

Supponiamo di avere un calcolatore a 16 bit, con 128 KB di memoria RAM. Vogliamo calcolare la somma 6548dec + 187dec.

Che significa avere un calcolatore a 16 bit? Significa che il processore del computer è in grado di elaborare, per ogni ciclo di funzionamento, 16 bit alla volta (cioè 2 byte). Ad esempio può fare direttamente la somma di 2 numeri, ciascuno memorizzato in 16 bit.

Che range di valori può avere un numero memorizzato in 16 bit? Come visto precedentemente, il range (per un numero positivo) memorizzato in 16 bit va da 0dec a (216-1=65.535)dec. In altri termini un processore a 16 bit potrebbe, ad esempio, sommare direttamente 2 numeri positivi il cui valore può andare a 0dec a 65.535dec.
Quindi, dal momento che vogliamo sommare 6548dec + 187dec (essendo entrambi compresi nel range), ciascuno di questi 2 numeri potrà essere memorizzato in 16 bit.

Concentriamoci ora sulla memoria RAM. Il nostro calcolatore ne ha 128 KB, cioè 27 x 210 byte. Possiamo considerare la RAM come suddivisa in una serie di 'celle' di 16 bit ciascuna (cioè 2 byte): cominciando a numerarle da 0, c'è la cella 0 (costituita da 16 bit), la cella 1 (costituita da 16 bit), la cella 2, e così via. Il numero delle celle viene chiamato indirizzo.

Quante celle avremo in totale? Poichè la memoria è di 128 KB e le celle di 16 bit (2 byte) ciascuna, avremo 27 x 210 / 2 celle, cioè 26 x 210 celle, 64 x 210 celle (65.536 celle).

Il nostro esempio: un calcolatore a 16 bit
Processore 16 bit Può elaborare contemporaneamente 16 bit per ciclo
Memoria 128 KB La memoria è suddivisa in 65.536dec celle da 16 bit ciascuna
Cella di memoria 16 bit 65.536 celle da 16 bit ciascuna, numerate da 0dec a 65.535dec. Ciascuna cella può memorizzare un numero nel range da 0dec a 65.535dec.

Si noti l'ultima riga della precedente tabella:

  • i 128 KB di memoria sono suddivisi in 65.536dec celle (indirizzi da 0dec a 65.535dec) da 16 bit
  • in ogni cella è possibile memorizzare un numero nel range da 0dec a 65.535dec.

E' una coincidenza il fatto che il range di valori che è possibile memorizzare in ogni cella (di 16 bit) coincide con il range di indirizzi delle celle di memoria? No, non lo è!

Il nostro esempio: suddivisione della memoria in celle (128 KB)
(indirizzo cella)dec (indirizzo cella)bin dimensione
0 0000 0000 0000 0000 16 bit
1 0000 0000 0000 0001 16 bit
2 0000 0000 0000 0010 16 bit
65.535 1111 1111 1111 1111 16 bit

Come fa il processore a recuperare dalla memoria i 2 numeri (6548dec e 187dec) su cui effettuare la somma? Ovviamente questi numeri saranno memorizzati da qualche parte nella RAM, cioè saranno memorizzati in 2 delle 65.536 celle di 16 bit, supponiamo rispettivamente nella cella di indirizzo 32dec e in quella di indirizzo 245dec.

Il fatto è che, in una cella di memoria (di 16 bit), possono essere memorizzati:

  • dei numeri (tra i quali i 2 che ci interessano), oppure…
  • numeri, lettere, etc. (altri dati in generale), oppure…
  • dei frammenti dei programmi (software), oppure (e questo è importante ai fini del nostro discorso)…
  • degli indirizzi che rappresentano il numero di celle di memoria!

In altri termini, per recuperare i 2 numeri su cui effettuare la somma, il processore utilizza 2 celle di memoria (ovviamente diverse da quelle in cui sono inseriti i 2 numeri cercati) contenenti il numero 32dec e il numero 5.342dec, contenenti cioè gli indirizzi delle celle di memoria in cui ci sono i numeri voluti. Il processore tratterà questi 2 numeri come indirizzi, per accedere rispettivamente alle celle contenenti i numeri da sommare.

Il nostro esempio: contenuto della memoria (128 KB)
(indirizzo cella)dec (indirizzo cella)bin dimensione (contenuto)dec
0 0000 0000 0000 0000 16 bit ?
1 0000 0000 0000 0001 16 bit ?
2 0000 0000 0000 0010 16 bit ?
32
32 0000 0000 0010 0000 16 bit 6548
245 0000 0000 1111 0101 16 bit 187
245
65.535 1111 1111 1111 1111 16 bit ?

Riassumendo:

  • ogni cella di memoria può contenere un dato, un frammento di programma o un indirizzo che fa riferimento ad un altra cella.
  • dal momento che ogni cella di memoria ha 16 bit, è possibile memorizzarvi un numero positivo nel range da 0dec a (216-1=65.535)dec.
  • dal momento che abbiamo 128 KB di memoria, suddivisa in 65.536 celle da 16 bit (indirizzi da 0dec a 65.535dec), i 16 bit di ogni cella sono perfetti anche per indirizzare (fare riferimento a) ciascuna delle 65.356 celle di memoria!

Torniamo alla domanda di partenza: perchè 1 KB sono 1.024 byte e non 1.000? Perchè la memoria (ad esempio la RAM) è venduta in moduli multipli di 2 (4-8-32-64-128-256 MB)? Nel nostro esempio, perchè il nostro calcolatore a 16 bit ha 128 KB di memoria, e non ad esempio 100 KB?

Supponiamo che il nostro processore abbia 100 KB di RAM, suddivise in celle da 16 bit. Ogni cella potrebbe sempre memorizzare un numero nel range da 0dec a 65.535dec, ma in 100 KB di memoria ci sarebbero meno celle, cioè 51.200dec. In questo caso, quindi, ci sarebbe uno spreco di spazio inaccettabile: con 16 bit potrei memorizzare indirizzi da 0dec a 65.535dec, me avendo solo 51.200dec celle gli indirizzi da 51.200dec a 65.535dec sarebbero del tutto inutilizzati. Inoltre 51.200dec in binario non corrisponde a nessuna configurazione di bit particolare (tutti 0 tranne pochi 1, tutti 1, o configurazioni simili). In questo modo avrei tutte le celle che contengono indirizzi che non vengono sfruttate al massimo.

E' questo il motivo per cui la memoria viene costruita in moduli di capacità multipla di 2, proprio per sfruttare al massimo la capacità di indirizzamento di ogni cella di memoria. Anche avendo 16 bit e installando, ad esempio, 64 KB di memoria (multiplo di 2, 32.768dec celle di memoria), potremmo indirizzare tutte le celle con i primi 15 bit (lasciando il 16o a sinistra per altri scopi), avendo una configurazione di bit "comoda". Lo stesso si avrebbe con tutti i moduli di memoria di capacità multipla di 2.

Si noti quindi che c'è uno strettissimo legame tra

sistema binario ⇔ potenze di 2 ⇔ dimensioni delle celle di memoria ⇔ range di valori memorizzabili ⇔ indirizzi di memoria ⇔ dimensioni della RAM
copyright © 2004 ddattica.net — tutti i diritti riservatiprivacy
top | xhtml | CSS | webmaster