sei sul sito di Giovanni Fraterno

ATTENZIONE che, per importanza sociale, subito dopo il legame affettivo che si instaura all'interno di una famiglia, viene quello che si instaura fra il professore e i suoi alunni, e che turbare entrambi i rapporti può essere carico di conseguenze (sabato 31° gennaio 2004, il professore).
4) Gestione della memoria
( 1 - 2 - 3 - 4 - 5 - 6 - 7 )

La gestione della memoria è un compito essenziale cui deve assolvere un sistema operativo.

 

I sistemi operativi, infatti, fanno avanzare un processo utilizzando un’area di memoria principale, ed appunto contenente il relativo programma registrato in forma di codice direttamente eseguibile.

 

Si definisce:

- spazio fisico (SF) l’insieme degli indirizzi delle locazioni della memoria principale

- spazio logico (SL) uno spazio astratto di indirizzi di una memoria logica

- processo virtuale un processo che, fatto avanzare, genera indirizzi logici, in tal modo il programmatore può gestire la memoria principale senza porsi il problema di quali siano le aree di memoria effettivamente libere.

 

Ebbene, il compito fondamentale del sistema operativo, ovvero di un componente di quest’ultimo, e cioè del gestore della memoria, è definire quello che viene chiamato mapping, e che consiste in una traduzione T con la quale si fa corrispondere ad ogni indirizzo logico di un processo virtuale, un indirizzo fisico della memoria principale, ovvero:

T :    SL           SF

 

La traduzione T può avvenire secondo 3 modalità:

 

1) all’atto della formazione del programma: in tal caso assemblatori e compilatori danno luogo a programmi direttamente caricati in specifiche porzioni di memoria già previste dal programma

 

2) all’atto del caricamento del programma: in tal caso, al momento in cui il processo chiede di essere caricato, il gestore della memoria comunicherà all’assemblatore o al compilatore, le zone libere della memoria, così che il programma può venire modificato in modo che gli indirizzi siano riferiti alle suddette zone libere

   

3) all’atto dell’esecuzione del programma: in tal caso il programma viene fedelmente copiato nelle zone libere della memoria, ma con la traduzione da indirizzo logico a fisico che però avverrà successivamente, ovvero ad ogni richiesta di indirizzamento da parte della CPU.

 

La traduzione T più applicata fra quelle sopra descritte è la terza.

 

Sono 4 le modalità secondo cui la traduzione T può essere esplicitata, dando così luogo alla gestione della memoria:

- a partizioni fisse

- a partizioni variabili

- a ricoprimenti

- e virtuale.

 

Esplicitazioni di T ovviamente anch’esse di competenza del gestore della memoria.

 

In questa sede esamineremo solo la gestione della memoria a partizioni fisse.

 

Nella gestione della memoria a partizioni fisse la memoria principale è suddivisa in un certo numero di aree, ognuna delle quali ha una prefissata dimensione.

 

Si veda ad esempio la successiva Figura a, e dove ogni area o partizione accoglie o meno un processo, si veda ad esempio la  Figura b, ovvero quella che viene subito dopo.






Il sistema operativo, ovvero il gestore della memoria a partizioni fisse, mantiene una tabella di occupazione, contenente, per ciascuna partizione, le seguenti informazioni:

- l’indirizzo iniziale della partizione

- la dimensione della partizione

- se e quale processo occupa la partizione (ad una partizione vuota corrisponde NIL).

 

Si veda a tal fine la tabella di occupazione di Figura c relativa all’esempio descritto nelle Figure a e b.


 

Se dunque il processo richiedente necessita di uno spazio fisico di memoria di dimensione n, il gestore consulta la tabella per vedere se esiste una partizione libera di dimensione maggiore o uguale ad n.

 

Se la partizione non esiste il processo richiedente dovrà attendere che se ne libera uno.

 

Se la partizione esiste ha luogo l’aggiornamento della tabella, e ciò perché se lo spazio logico è costituito da tutti gli i appartenenti all’intervallo (0, n-1), e se l’indirizzo iniziale o base della partizione libera  è ad esempio A, ha luogo la seguente specifica traduzione T :

T(i) = A + i    (per ogni i).

 

Traduzione specifica che prende il nome di rilocazione.

 

Come si è più su detto, tale traduzione può avvenire all’atto del caricamento del programma, ed in tal caso si parla di rilocazione statica.

 

Se invece tale traduzione avviene all’atto dell’esecuzione del programma si parla rilocazione dinamica.

 

Questa specifica traduzione prende il nome di rilocazione perchè con essa è possibile spostare il programma da una partizione ad un altra, anche dopo che ha avuto inizio la sua implementazione, basterà infatti aggiornare con una nuova base A, il registro base che la contiene, registro base che è anch’esso sotto il controllo del gestore della memoria.



utenti in questo momento connessi alla rete di siti web di Giovanni Fraterno: