# Memoria principale

![main memory](https://101303421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lt57nGdw2_dU_934rTg%2F-M6-8qKKz36vPX2Bja3u%2F-M6-9WWbzFvYOf9QaQn-%2Fmemoria.PNG?alt=media\&token=803a08d0-7cac-49e3-85d6-20060cc53af1)

La memoria principale (anche detta centrale) o **RAM** (Random Access Memory - Memoria ad accesso casuale) è di tipo **volatile**, in quando i valori immessi si perdono allo spegnimento del sistema, mentre altre memorie come il disco fisso sono memorie **non volatili**, che conservano i loro valori anche in assenza di alimentazione elettrica.

Il modello usuale di una memoria principale è lineare; in tale modello la memoria è costituita di parole o celle numerate da 0 fino al valore massimo. Il numero che identifica ogni cella è detto **indirizzo**.

La dimensione di ogni cella indirizzabile dipende dal tipo di calcolatore comunque multipli di un byte, tipo due byte o quattro byte (32 bit o 64 bit rispettivamente).

E' opportuno distinguere la **dimensione** (effettiva) di una memoria dal suo spazio di indirizzamento: lo **spazio di indirizzamento** è il numero massimo di indirizzi possibili della memoria e dipende dalla lunghezza dell'indirizzo, cioè dal numero di bit che costituiscono l'indirizzo; se N è il numero di bit che costituiscono l'indirizzo di una memoria allora il suo spazio di indirizzamento è 2 ^ N (due elevato alla N).

La dimensione della memoria è il numero di byte che la costituiscono effettivamente; ovviamente, dato che tutti i byte devono essere indirizzabili **la dimensione della memoria è sempre minore o uguale allo spazio di indirizzamento**.&#x20;

Ad esempio, quando si installa nuova memoria su un calcolatore si aumentano le dimensioni della memoria, restando dentro i limiti dello spazio di indirizzamento.

La dimensione della memoria sono generalmente espresse in _Kbyte_ (_Kilobyte_), _Mbyte_ (_Megabyte_), _Gbyte_ (_Gigabyte_) , _Tbyte_ (_Terabyte_), queste unità corrispondono rispettivamente a `2^10`, `2^20`, `2^30`, `2^40` byte. Dato che quasi sempre la misura è espressa come numero di byte, la parola byte viene omessa, noi scriveremo 10M per indicare 10 Megabyte.

Tabella unità di misura della memoria:

|         |           |                                                     |
| ------- | --------- | --------------------------------------------------- |
| 1 Kbyte | 2^10 byte |  = 1024 byte (un po' più di 1.000 byte)             |
| 1 Mbyte | 2^20 byte | = 1024 Kbyte (un po' più di 1 milione di byte)      |
| 1 Gbyte | 2^30 byte | = 1024 Mbyte (un po' più di 1 miliardo di byte)     |
| 1 Tbyte | 2^40 byte | = 1024 Gbyte (un po' più di 1.000 miliardi di byte) |

Esempio: nei Personal Computer Intel in cui l'indirizzo è di 32 bit e quindi lo spazio di indirizzamento è di 2 ^ 32 byte (4 Giga byte).

Attualmente la maggior parte dei processori sono a 64 bit, sigla **x64**, mentre la sigla **x86**, indicano oramai quelli a 32 bit.

### Come determinare se Windows OS è 32-bit (x86) o 64-bit (x64)

Apriamo il _Power User menu_. Premi il tasto _`Windows key`_ + `X` per aprire questo menù. Clicca sulla voce _System_.

![](https://101303421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lt57nGdw2_dU_934rTg%2F-M5J84lu3y-U-tOGpOSz%2F-M5LDLUDWbDXd-ekC9RR%2Fx64.png?alt=media\&token=b798657d-8501-4655-94a2-5c1e86fa8ca6)

C'è un altro modo per capire se il tuo PC ha una versione 64-bit di Windows, probabilmente avrai una directory  '_Program Files (x86)'_ sul tuo hard disk. Contiene i programmi a  32-bit, mentre la directory '_Program Files_' contiene tutti i programmi a 64-bit installati.

Altre informazioni che si vedono da System è la velocità del processore specificata in **GHz**. Un GHz è equivalente a 10^9 **Hz** (un miliardo di **hertz**). Gli **hertz** misurano il numero di volte che un evento periodico si svolge in un secondo. Quindi un GHz vuol dire un miliardo di volte al secondo.

### Tempi di accesso e dimensioni delle diverse memorie

| Unità di misura tempi                                                             |
| --------------------------------------------------------------------------------- |
| 1 **ns** (**nanosecondo**) = 1/ 1.000.000.000 di secondi = 10 ^ -9 secondi        |
| 1 **μs** o **us** (**microsecondo**) = 1 / 1.000.000 di secondi = 10 ^ -6 secondi |
| 1 **ms** (**millisecondo**) = 1 /1.000 di secondo = 10 ^ -3 secondi               |

![](https://101303421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lt57nGdw2_dU_934rTg%2F-M6--uLMRdwKDtw8_n1Y%2F-M6-6wR6U7BZRp5ouZ21%2Ftempi_memorie.PNG?alt=media\&token=29289554-dc5d-407c-9923-ac26959cb35b)

L'altra memoria importante è come abbiamo già detto hard disk (**memoria secondaria**), non volatile (cioè l'informazione permane anche quando viene spento il computer), molto più capiente ma anche molto più lenta. Sopra una figura con i tempi di accesso alle diverse memorie.

