Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

LA GESTIONE DELLA MEMORIA

informatica



LA GESTIONE DELLA MEMORIA


Le tecniche che sono state studiate fino ad oggi per la gestione della memoria possono essere raggruppate in due grandi classi:

1) Tecniche che richiedono che il codice e i dati di un processo siano integralmente contenuti nella memoria RAM;

2)Tecniche che richi 424h74e edono che il codice e i dati di un processo siano solo in parte contenuti nella RAM.

Quando il processo è running, è necessario in ogni caso che tutti i sui dati e tutte le sue istruzioni siano presenti in uno spazio di memoria ad esso visibile indicato come memoria centrale. Nel caso 1, quindi, la memoria centrale coincide con la RAM; quando invece è sufficiente che solo parte dei dati e delle istruzioni siano in RAM, la memoria centrale non coincide interamente con la RAM, ma il suo ruolo è rivestito dall'insieme di memoria RAM e memoria di massa e si parla in questo caso anche di MEMORIA VIRTUALE.




Alcuni dei concetti fondamentali riguardanti la gestione della memoria dovrebbero esserci già noti. Ricordiamo in particolare che, al momento dell'esecuzione di un programma, se viene richiesta la lettura o la scrittura di un dato o di una istruzione contenuti nella RAM, è necessario inviare a quest'ultima un indirizzo assoluto. Nei fatti, l'indirizzo fisico assoluto mandato verso la RAM può essere generato in fase di:

1) compilazione;

2) collegamento;

3) caricamento in memoria;

4) esecuzione.

L'indirizzo delle istruzioni e dei dati del processo (ovvero la sua posizione nella memoria centrale) possono essere conosciuti o determinati in una delle prime tre fasi, e in tal caso viene generato quello che si chiama codice assoluto del processo. Qualora gli indirizzi vengano invece generati in tutto o in parte in fase di esecuzione, nel codice del processo figureranno indirizzi di riferimento ad uno spazio logico, anziché fisico, di memoria.

Si intende con il nome di BINDING l'operazione di trasformazione dell'indirizzo (di dati e istruzioni) dalla forma logica alla forma fisica. Essa può essere effettuata in una qualunque delle quattro fasi succitate: ciò dipende dalla risposta alla domanda: in quale fase si può conoscere l'indirizzo esatto di istruzioni e dati? La situazione limite è quella in cui l'associazione indirizzo logico - indirizzo fisico sia possibile solo in fase di esecuzione e in tal caso il BINDING è eseguito dinamicamente. Si rifletta sulle conseguenze che questo comporta: se un programma (e quindi la sua area codice, la sua area dati etc.) risiede in memoria ad indirizzi assoluti, non è possibile modificare la sua posizione, ovvero far 'migrare' i codici da un segmento all'altro della memoria. Questo è invece possibile se si fa riferimento ad uno spazio logico. Se ad esempio la regola di binding utilizzata è quella che indicheremo qui di seguito, basterà modificare a run time la base [1] .


Il sistema più banale e conosciuto di binding (trasformazione da indirizzi logici a fisici) è quello della base e della costante di spiazzamento, illustrato nella figura 1.





figura 1


Per ricavare l'indirizzo fisico, ovvero quello di memoria, occorre sommare al contenuto del registro BASE (o REGISTRO DI RILOCAZIONE) quello del registro SPIAZZAMENTO (che rappresenta l'indirizzo logico). Questa procedura si chiama associazione dinamica degli indirizzi e può essere realizzata solo su di una macchina che abbia una speciale, apposita struttura HW; in particolare essa deve provvedere uno o più registri contenenti la o le basi (non è detto infatti che un programma faccia riferimento ad un unico spazio logico).


Immaginando ad esempio di avere in memoria, a valle del caricamento, un programma che presenti la situazione descritta in figura 2.










cod op | add


Dati


Stack







Z



figura 2




AI


AD

X

AS


figura 3


Vi sarà cioè uno spazio logico di istruzioni (che va dall'indirizzo logico 0 all'indirizzo 20000), uno spazio logico di dati (indirizzi da 0 a 10000) e un'area stack (indirizzi da 0 a z). Nel programma utente gli indirizzi di istruzioni e dati sono espressi sempre in forma logica, dato che questo semplifica non poco la programmazione. Quindi in questo caso abbiamo bisogno  di almeno tre registri base. Nulla vieta che all'atto di caricare il programma in memoria il caricatore provveda a raccogliere i tre spazi in un solo spazio logico, come illustrato in figura 3. In questo modo il processore nell'andare a ricercare in memoria dati e istruzioni da eseguire può fare riferimento ad un unico spazio logico, delimitato dagli indirizzi 0 e X, nel quale trovano posto, nell'ordine, l'area istruzioni, quindi l'area dati e infine l'area stack. Di conseguenza saranno necessari solo un registro - base ed un registro destinato a contenere la costante di spiazzamento.


Per fare un esempio pratico, l'ormai vetusto processore UNIVAC 1100 era progettato in modo da 'vedere' due spazi logici: uno per le istruzioni e uno per i dati. L'appartenenza di un indirizzo logico all'uno o all'altro spazio era determinata in base al suo primo bit. Se il bit maggiore dell'indirizzo logico era zero, esso faceva riferimento allo spazio logico delle istruzioni; se era uno, allo spazio dei dati. Di conseguenza a seconda del valore del primo bit veniva selezionato uno fra due diversi registri base, a cui veniva poi sommato l'indirizzo logico.

In genere si presenta la necessità di gestire un certo numero di registri base (è questo il caso del processore INTEL, in cui i registri base sono quattro). Ogniqualvolta si verifica un cambio di contesto (si salta da un processo all'altro) il contenuto di tali registri viene generalmente ridefinito. Infatti questi registri di macchina contengono informazioni relative al processo attualmente in fase di running, e quando quest'ultimo viene rimpiazzato da un altro processo essi vanno reinizializzati. Affinché allora non si perda memoria di quella che era situazione della CPU al momento del cambio di contesto, è indispensabile che il contenuto dei registri macchina venga salvati da qualche parte, e come ormai dovremmo sapere, tale salvataggio viene fatto all'interno del descrittore del processo sospeso.


Il BINDING è uno dei due compiti fondamentali di cui deve occuparsi il GESTORE DELLA MEMORIA. L'altro è costituito dall'evitare che i processi in memoria si sovrappongano l'uno all'altro.












figura 4


Il meccanismo classico di prevenzione di questo problema consiste nell'effettuare, prima di utilizzare l'indirizzo logico, una comparazione tra l'indirizzo logico ed un limite logico precedentemente stabilito (cfr. figura 4) (si tratta naturalmente di un limite superiore, essendo sempre zero il limite inferiore per un indirizzo logico). Se l'indirizzo logico risulta maggiore, si verifica un trap. Ad ogni cambiamento di contesto vengono definiti, fra i vari registri di macchina, anche i registri limiti di memoria relativi al nuovo processo running.




Negli appunti presi in classe al posto della parola 'base' compare qui e nel seguito 'costante di spiazzamento', il che è chiaramente e notevolmente errato (ad esempio: che senso avrebbe un processore con un solo registro base e più registri di spiazzamento?!?).






Privacy




Articolo informazione


Hits: 2568
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024