# Personal computer/Architettura/Memoria

Personal computer
* Storia dei calcolatoriPersonal computer/Storia
* Architettura del calcolatorePersonal computer/Architettura
** CPUPersonal computer/Architettura/CPU
** MemoriaPersonal computer/Architettura/Memoria
** Input/OutputPersonal computer/Architettura/IO
* Linguaggio MacchinaPersonal computer/Linguaggio Macchina
** DLXPersonal computer/Linguaggio Macchina/DLX
*** Operazioni DLXPersonal computer/Linguaggio Macchina/DLX/Operazioni
*** DLX sequenzialePersonal computer/Linguaggio Macchina/DLX/DLX_sequenziale
*** DLX in pipelinePersonal computer/Linguaggio Macchina/DLX/DLX_pipeline
** 8086-8088Personal computer/Linguaggio Macchina/8086
* Mapping di Memorie ed InterfaccePersonal computer/Mapping
** Integrati NotevoliPersonal computer/Mapping#Caratteristiche_e_funzionamento_degli_integrati_notevoli
*** DriverPersonal computer/Mapping/Driver
*** CPUPersonal computer/Mapping/CPU
*** Memoria PrincipalePersonal computer/Mapping/Memorie
*** Interfacce I/OPersonal computer/Mapping/Interfacce
** Gestione delle interfacce tramite programmaPersonal computer/Mapping#Gestione_delle_interfacce_tramite_programma
* Standard alla base di un personal computerPersonal computer/Standard
* Appendici e RiassuntoPersonal computer/Appendici
Modifica il sommario

## Memoria Principale

La memoria principale di un calcolatore (che va formattata continuamente per delle elevate prestazioni) contiene le istruzioni del programma da eseguire e i risultati delle operazioni svolte.
Come per la CPU anche la memoria principale è divisa in sottoblocchi, più precisamente in diverse unità funzionali simili collegate fra loro in modalità gerarchica. Il principale vantaggio dell'implementazione di una struttura gerarchica è quello di poter avere a disposizione uno spazio di memoria virtualmente infinito con velocità di accesso le più basse possibili. Le memorie più veloci (e più costose) costituiscono una piccola parte del sottosistema di memoria e sono nella parte più alta della gerarchia, subito a ridosso della CPU, implementate in DRAM (dynamic random access memory), costituiscono la cache del processore; le memorie più lente e meno costose si trovano ai livelli gerarchici più bassi e sono realizzate con sia con SRAM (static random access memory) sia con dischi magnetici (il disco magnetico di per se non fa parte del sottosistema di memoria, tuttavia può esserne incluso con tecniche di paging come memoria virtuale).
Il sistema che permette di avere grande quantità di memoria con i tempi di accesso del blocco più veloce è detto di caching. Nella memoria veloce e di ridotte dimensioni vengono caricati soltanto dati ed istruzioni che il programma eseguirà con maggiore probabilità. Se i dati richiesti dal processore sono presenti nel blocco più alto si parla di hit, nel caso in cui ci sia bisogno di accedere ad un livello più basso si parla di miss. In questo modo si può considerare la velocità di accesso alla memoria come la somma tra la velocità di accesso al suo livello più alto e il tempo necessario per calcolare se ci si trova in uno stato di hit o miss, questo tempo è detto hit time. Se da un lato il caching permette di ridurre al minimo i tempi di accesso alla memoria, dall'altro richiede una maggiore complessità per gestire i casi di miss ma soprattutto la logica per consentire di avere la più alta hit ratio possibile, ovvero la frazione di accessi in memoria che finiscono nello strato superiore.
La CPU ovviamente è all'oscuro della tecnologia utilizzata dal sistema di memoria, sarà compito del progettista del calcolatore la disposizione dei vari elementi di memoria all'interno dello spazio di indirizzamento (mapping) e la generazione di quei segnali che permettono alla CPU il corretto accesso alla memoria.

### Elementi di memoria

I dispositivi di memoria sono delle reti combinatorie programmabili in grado di realizzare una qualsiasi funzione di n variabili, il valore assunto dalla funzione viene detto bit di programmazione.
La più semplice realizzazione di memoria in sola lettura è un mux, in base agli n bit in ingresso presenta in uscita una determinata configurazione di 2^n bit. Al crescere del numero di variabili cresce esponenzialmente anche il numero di pin del dispositivo. Si sono quindi sviluppate diverse tecnologie che sostituendo ai pin dei contatti all'interno di un dispositivo permettono di minimizzare il costo del dispositivo.

#### ROM, PROM, EPROM

Una ROM è un dispositivo di memoria in sola lettura ( Read Only Memory ) costituito da una matrice di 2^n righe, decodificate da un decoder ad n bit di ingresso, e k colonne. Una ROM siffatta realizza n funzioni di k variabili ed ogni funzione è determinata dalla presenza o meno di una connessione tra la riga i-esima e la colonne j-esime. Per cui una ROM da 24 pin può realizzare 8 funzioni da 14 variabili oppure una da 21.
Nelle ROM ogni configurazione delle variabili in ingresso può essere vista come l'indirizzo di un dato formato dai bit di programmazione della corrispondente riga della matrice.
Le differenti tecniche per realizzare i contatti tra righe e colonne differenziano le:
* ROM: i contatti vengono realizzati dal costruttore su ordinazione del cliente, presentano quindi dei dati che non cambiano durante l'esecuzione di un programma e rimangono costanti anche quando il sistema non è alimentato, una loro possibile implementazione è per il BIOS di calcolatore.
* PROM: Programmable ROM La programmazione è fatta dall'utente mediante un apposito programmatore che consente selettivamente di bruciare i fusibili all'interno della ROM, sono quindi programmabili una sola volta.
* EPROM: Erasable PROM La programmazione è effettuata ancora dall'utente ma avviene tramite degli impulsi elettrici che provocano un accumulo di carica, e quindi l'attivazione del contatto, su un dispositovo di controllo posto all'intersezione di ogni riga con una colonna. Il dispositivo di controllo può essere scaricato, e quindi riportato alle condizioni di fabbrica, tramite luce ultravioletta convogliata atrtaverso una finestra di quarzo presente sul dispositivo.
* EEPROM: Electrically Erasable PROM Sono delle EPROM riprogrammabili elettricamente byte per byte e possono essere riprogrammate senza rimuovere il chip dalla piastra stampata.
* FLASH-EPROM: Simili all EEPROM si programmano elettricamente direttamente sulla piastra, sono più veloci e programmabili per settori.
Pin-out di una EPROM

#### RAM

Le RAM sono dispositivi di memoria leggibili e scrivibili.
Una RAM ha n indirizzi e m linee dati, per cui sono costituiti da una matrice di 2^n righe ed m colonne. Nell'operazione di lettura vengono letti gli m bit della riga corrispondente a quella dell'indirizzo, i bit dati sono quindi un'uscita della RAM, che, al contrario, nelle operazioni di ingresso costituiscono un ingresso, gli m bit infatti verranno memorizzati nella riga corrispondente all'indirizzo fornito.
Pin-out di una RAM