sabato 12 gennaio 2013

Nozioni base sulla memoria (parte II)


Eccoci qui cari signori, come promesso, a continuare la "lezione" sulle nozioni riguardanti la MEMORIA.



SWAP


Quando la RAM è satura di dati operativi,ma il sistema necessita di ulteriore spazio di archiviazione viene utilizzato il disco fisso.
Generalmente il sistema operativo crea un file (nel caso di sistemi Windows) o una partizione (come fa ad esempio Linux) di memoria virtuale da utilizzare come fosse una sorta di RAM aggiuntiva. Questa memoria virtuale è detta SWAP, e la sua dimensione
solitamente è dinamica in base alle necessità.

Con il termine swap si intende, l'estensione della capacità della memoria volatile complessiva del computer, oltre il limite imposto dalla quantità di RAM installata, attraverso l'utilizzo di uno spazio su un altro supporto fisico, ad esempio il disco fisso.
A seconda del S.O. utilizzato è possibile avere file di swap, residenti nel normale file system, o partizioni di swap, cioè sezioni disco dedicate ed inizializzate con un particolare file system.

L'uso della partizione è generalmente migliore dal punto vista delle prestazioni, perché evita che lo swap vada soggetto alla frammentazione tipica di alcuni file system. Per contro, occupa
una delle (poche) partizioni disponibili sul disco fisso.

In pratica, se la memoria RAM libera non è più sufficiente a contenere tutte le informazioni che servono ai programmi, il sistema operativo si farà carico di spostare una certa quantità di dati (i più obsoleti) dalla memoria volatile a quella di massa, liberando una parte della RAM per permettere il corretto funzionamento dei
programmi. Nel momento in cui si rende necessaria tale operazione, le prestazioni del sistema crolleranno bruscamente.



MMU


In un sistema dotato di memoria virtuale, il processore e i programmi si riferiscono alla memoria centrale con indirizzi logici, virtuali, che vengono tradotti in indirizzi fisici reali da
una unità apposita, la MMU o Memory Management Unit che in genere è incorporata nei processori.

La MMU svolge i seguenti compiti:

Traduce l'indirizzo logico in indirizzo fisico
Controlla che l'indirizzo fisico corrisponda a
una zona di memoria fisicamente presente nella memoria centrale
Se invece la zona in questione è nello spazio
di swap, la MMU solleva una eccezione di page fault e il    processore si occupa dimcaricarla in memoria centrale, scartando una pagina già presente.


Questo meccanismo ha un prezzo in termini di prestazioni: la MMU impiega del tempo per tradurre l'indirizzo logico in indirizzo fisico, e
ce ne vuole molto di più per caricare una zona di memoria dallo spazio di swap: in ultima analisi quindi, implementare una memoria virtuale significa sacrificare potenza di calcolo per poter eseguire un maggior numero di processi contemporanei (il famosissimo Multitasking).



Memoria Virtuale


Esistono principalmente due modi di implementare un sistema di memoria virtuale: dividere la memoria in tante pagine identiche,
gestite dall'hardware, oppure lasciare che sia il programmatore e/o il compilatore a "segmentare" il proprio programma in più segmenti indipendenti. Entrambi i metodi presentano vantaggi e svantaggi: in questi ultimi tempi tuttavia il sistema più usato è la memoria paginata.




Memoria Paginata
Memoria Virtuale

Storia


All’inizio dell’era dei calcolatori, le memorie erano piccole e care. Il 650 IBM, il calcolatore scientifico più importante in quei tempi (fine anni ‘50) aveva solo 2000 parole di memoria.
In quei giorni i programmatori passavano il loro tempo cercando di comprimere i programmi in memorie piccolissime. Spesso si sceglieva un algoritmo più lento, ma più piccolo, solo perché il primo non stava in memoria e quindi non poteva essere eseguito.
La soluzione a questo problema era di usare una memoria secondaria, come un disco. Il programmatore divideva il programma in pezzi chiamati overlay ognuno dei quali poteva stare in memoria. Per eseguire il programma si inseriva il primo overlay e lo si
eseguiva; quando era finito, leggeva l’overlay successivo e lo chiamava, ecc.
Il programmatore era responsabile della divisione del programma in overlay, e doveva decidere dove doveva essere tenuto ogni overlay nella memoria secondaria, curare gli spostamenti degli overlay tra memoria centrale e secondaria e in generale gestire tutta l’elaborazione degli overlay senza nessun aiuto dall’elaboratore.

Nel 1961 un gruppo di studiosi di Manchester, proposero un metodo per l’esecuzione automatica della gestione degli overlay, senza
che il programmatore sapesse neppure che cosa stava succedendo.
Questo metodo, ora chiamato memoria virtuale ha l’ovvio vantaggio di liberare il programmatore da un sacco di lavoro
amministrativo.

Memoria Paginata


Con questo schema la memoria viene divisa in pagine tutte della stessa grandezza (4 o 8 KB): i programmi non hanno bisogno di sapere nulla su come è organizzata la memoria e non devono avere nessuna struttura interna particolare; l’esatta ubicazione e disposizione fisica della memoria che occupano non li riguarda e tutto il sistema di memoria virtuale è gestito dalla MMU attraverso un complesso sistema di registri associativi.

L’idea proposta dal gruppo di Manchester fu di separare i concetti di:
➡ Spazio di Indirizzamento
➡ Locazioni di memoria (spazio fisico
disponibile)

Un calcolatore con un campo di indirizzamento (bus) di 16 bit e con 4096 (4 KB) parole (es. byte) di memoria fisica può indirizzare 65536 parole di memoria. La ragione è che esistono 216 = 65536 indirizzi di 16 bit.
Il numero di parole indirizzabile dipende solo dal numero di bit nell’indirizzo e non è in alcuna relazione con la memoria fisica
disponibile.

L’idea di separare lo spazio di indirizzamento e gli indirizzi di memoria, è la seguente. In qualsiasi istante si può accedere direttamente a 4096 parole di memoria, ma queste non corrispondono necessariamente agli indirizzi da 0 a 4095.
Potremmo, per esempio “dire” al calcolatore che da ora in poi , tutte le volte che si dà l’indirizzo 4096, deve essere usata la parola 0; quando si dà il 4097, si deve usare la 1, ecc.



Page Fault


Cosa succede se un programma salta ad un indirizzo tra 8192 e 12287?
Nella macchina senza memoria virtuale il programma provoca una trap per l’errore e termina.
Nella macchina con memoria virtuale si verifica la seguente sequenza di passi:

* i contenuti della memoria centrale sono salvati in una memoria  secondaria;
le parole da 8192 a 12287 sono localizzate nella memoria secondaria;
le parole da 8192 a 12287 sono caricate in memoria centrale;
* la mappa degli indirizzi viene cambiata per rappresentare gli indirizzi da 8192 a 12287 sulle locazioni di memoria da 0 a 4095;
* l’esecuzione continua come nulla fosse.



Memoria Paginata


Questa tecnica per l’esecuzione dell’overlay automatico è chiamata paginazione e i pezzi di programma letti dalla memoria secondaria sono detti pagine.
Chiameremo spazio di indirizzamento virtuale gli indirizzi a cui il programma può fare riferimento e spazio di indirizzamento fisico gli
indirizzi di memoria effettivamente cablati. Una mappa di memoria mette in relazione gli indirizzi virtuali con quelli fisici.
I programmi sono scritti come se ci fosse abbastanza memoria centrale per l’intero spazio di indirizzamento virtuale, anche se ciò
non si verifica. I programmi possono caricare o memorizzare una qualsiasi parola nello spazio di indirizzamento virtuale, o saltare ad
un’istruzione localizzata in un posto qualsiasi entro uno spazio di indirizzamento virtuale, senza preoccuparsi che in realtà non ci sia
abbastanza memoria fisica.



Come funziona


Un requisito essenziale per una memoria virtuale è una memoria secondaria in cui tenere il programma completo. E’ più semplice
se si pensa alla copia del programma nella memoria secondaria come all’originale e ai pezzi portati nella memoria centrale come a delle copie. Naturalmente è importante tenere aggiornato l’originale. Quando si operano combiamenti alla memoria centrale, questi devono prima o poi essere riflessi nell’originale.
Lo spazio di indirizzamento virtuale è diviso in un certo numero di pagine di ugual dimensione, per es. 4 KB. Lo spazio di indirizzamento fisico è diviso in pezzi della stessa dimensione chiamati page frame. Da qui non mi spingo oltre visto la pesantezza dell'argomento.

Quindi cari miei in campana e alla prossima ed ultima parte.
Ciao da Dani!


Nessun commento:

Posta un commento