08/08/2013
M. Malatesta 1-Concetti preliminari-04 1
Modulo T4
1-Concetti preliminari
Corso di Informatica
Prerequisiti
Struttura elementare di un computer
Uso pratico elementare di un sistema operativo
Indirizzi logici e indirizzi fisici
Traduttori di linguaggio
08/08/2013
M. Malatesta 1-Concetti preliminari-04 3
Introduzione
Tra i compiti del SO c’è quello della gestione della memoria. L’efficienza del sistema e la velocità di esecuzione dei programmi dipendono
strettamente dal modo con cui il SO è in grado di gestire la memoria.
Per ora, facciamo riferimento alla sola memoria centrale.
Quali compiti svolge il gestore della memoria?
Come è possibile avere più programmi presenti in RAM?
La gestione della memoria condiziona l’attività di programmazione?
Come viene gestita la memoria in caso di multiutenza?
A queste domande diamo una risposta in questa Unità.
Le necessità dell’utente
L’utente programmatore richiederebbe alla memoria i seguenti requisiti:
spazio illimitato
velocità infinita
costo ridotto
memorizzazione permanente dei dati
Questi requisiti sono in netto contrasto tecnologico e commerciale, per cui in pratica le memorie reali sono un compromesso di queste ambiziose richieste.
08/08/2013
M. Malatesta 1-Concetti preliminari-04 5
Il gestore della memoria
La parte del SO che gestisce la memoria ha almeno i seguenti compiti:
tenere traccia delle parti di memoria in uso e di quelle libere;
allocare uno spazio privato di memoria ai processi che la richiedano;
deallocare la memoria quando un processo muore;
usare meccanismi di protezione
Vedremo alcune tecniche con le quali il SO assolve ai compiti suddetti.
Quando la memoria reale non è sufficiente ad ospitare un programma, si ricorre ad una tecnica dettta memoria virtuale, consistente nell’utilizzare una parte del disco come estensione della memoria reale (oggetto della prossima Unità).
Concetti preliminari
Prima di affrontare lo studio delle tecniche di gestione della memoria, premettiamo alcuni concetti di base:
1. spazio fisico e spazio logico 2. tipi di memoria
3. condivisione del codice
08/08/2013
M. Malatesta 1-Concetti preliminari-04 7
1.Spazio fisico e spazio logico
- spazio fisico (SF)
Con il termine Spazio Fisico (SF) intendiamo lo spazio degli indirizzi fisici delle locazioni della memoria centrale, ossia quegli indirizzi reali effettivamente accessibili.
Tuttavia può essere utile, per il progettista, pensare la memoria con una visione astratta, indipendente dalla effettiva struttura fisica.
In questo modo, la memoria può essere facilmente rappresentata tramite adeguate strutture dati (descrittore di memoria), in modo che sia facile implementare:
le necessarie tecniche di protezione
le tecniche di allocazione e deallocazione per i vari processi
1.Spazio fisico e spazio logico
- spazio logico (SL)
Così facendo, possiamo indicare con il termine Spazio Logico (SL) lo spazio degli indirizzi logici del nostro programma, immaginando che esso inizi sempre dall’indirizzo 0, in cui è collocata la prima istruzione.
08/08/2013
M. Malatesta 1-Concetti preliminari-04 9
1.Spazio fisico e spazio logico
- rilocazione
Ovviamente, le operazioni sullo spazio logico devono corrispondere a quelle sullo spazio fisico, per cui il SO deve disporre di una funzione di traduzione T (mapping) del tipo:
T : SL SF
che trasforma ogni indirizzo logico nel corrispondente indirizzo fisico.
L’azione svolta da T prende il nome di rilocazione semplicemente, rilocazione.
Molto schematicamente, possiamo dire che la rilocazione consiste nel sommare a tutti gli indirizzi logici presenti nel programma un valore (detto offset o spiazzamento) corrispondente all’indirizzo fisico nel quale verrà effettivamente caricato il programma
1.Spazio fisico e spazio logico
- rilocazione
La traduzione T può avvenire in diversi momenti:
a. alla generazione del codice b. al caricamento del codice c. all’esecuzione del codice
08/08/2013
M. Malatesta 1-Concetti preliminari-04 11
1.Spazio fisico e spazio logico
- rilocazione
La traduzione T può avvenire in diversi momenti:
a. alla generazione del codice b. al caricamento del codice c. all’esecuzione del codice
Per vedere come funzionano i vari metodi, supponiamo di considerare il seguente codice con i corrispondenti indirizzi logici
… 0
… 7 300
…
…
…
… 300 101
“ADD”
100
…
…
codice indirizzo
1.Spazio fisico e spazio logico
- rilocazione
Se la rilocazione avviene al momento della generazione del codice (ad esempio, alla compilazione del programma):
è eseguita dal traduttore;
usa indirizzi fisici specifici e prefissati;
necessita di ricompilazione nel caso cambino gli indirizzi di programma.
Questa soluzione:
è detta rilocazione assoluta;
è poco flessibile ed utilizzata solo in casi particolari;
08/08/2013
M. Malatesta 1-Concetti preliminari-04 13
1.Spazio fisico e spazio logico
- rilocazione
Nella figura a fianco, il programma viene caricato all’indirizzo base 60000, per cui l’indirizzo logico 300 viene modificato in 60300.
Qualunque riferimento (v. figura in basso), durante l’esecuzione, all’indirizzo logico 300, corrisponde all’indirizzo fisico 60300.
1.Spazio fisico e spazio logico
- rilocazione
Quando, invece, la rilocazione avviene al momento del caricamento del codice:
gli indirizzi generati dai traduttori, non sono riferiti ad alcuna area della memoria e pertanto, si parla di codice rilocabile;
si dice rilocazione statica.
Il codice prodotto sarà caricabile in una qualunque zona
08/08/2013
M. Malatesta 1-Concetti preliminari-04 15
1.Spazio fisico e spazio logico
- rilocazione
Nella rilocazione statica si copia interamente lo spazio di indirizzamento di un programma da memoria secondaria alla RAM all’inizio
dell’esecuzione.
Una possibile organizzazione della RAM (di dimensione MAX) con più programmi attivi
contemporaneamente
Area riservata, non accessibile in modalità utente
Sistema Operativo Spazio programma 1 MAX - 1
Spazio programma 2 RAM vuota
0
1.Spazio fisico e spazio logico
- rilocazione
Nella rilocazione statica:
non si possono eseguire programmi con spazio di indirizzamento più grande della RAM
spesso si generano spazi non utilizzati (frammentazione della memoria)
Il primo problema viene risolto in modo efficiente con la tecnica della memoria virtuale (descritta nella prossima Unità)
08/08/2013
M. Malatesta 1-Concetti preliminari-04 17
1.Spazio fisico e spazio logico
- rilocazione
Quando la traduzione avviene al momento dell’esecuzione del codice, il codice eseguibile viene caricato in memoria così come è, e la
mappatura degli indirizzi avviene via hardware, mediante un modulo detto MMU (Memory Management Unit) che agisce istruzione per istruzione mediante un registro base.
Questo tipo di traduzione si dice rilocazione dinamica.
1.Spazio fisico e spazio logico
- rilocazione
Durante l’esecuzione, il riferimento all’indirizzo logico 300 viene trasformato, Nella figura in alto, il programma viene caricato mantenendo gli indirizzi logici, alla locazione 60000.
08/08/2013
M. Malatesta 1-Concetti preliminari-04 19
2. Tipi di memoria
Normalmente, nei sistemi attuali, la memoria RAM viene affiancata, per migliorare le prestazioni del sistema, ad altri tipi di memoria:
il problema della capacità viene, come accennato più volte, risolto ricorrendo all’utilizzo di parte della memoria secondaria (detta appunto memoria virtuale), gestendola come se fosse memoria centrale, tecnica della quale ci interessiamo in seguito;
il problema della velocità, viene ormai generalmente risolto mediante interposizione, tra memoria centrale e processore, di una memoria piccola ma veloce, detta cache memory gestita generalmente in modo
microprogrammato.
Entrambe le tecnologie introducono un notevole
miglioramento delle prestazioni e sono del tutto trasparenti all’utente (anche nella programmazione a livello assembly).
3. Condivisione del codice
È frequente, in un ambiente operativo, che più processi nascano dallo stesso programma P(ad esempio, l’utilizzo contemporaneo di un editor o di un compilatore da parte di più utenti).
La soluzione di avere più copie della stessa immagine del programma è evidentemente inefficiente.
In questi casi, è sufficiente consentire la condivisione del codice di P, ossia consentire che ogni utente che usa P, possieda un’area delle sue proprie variabili di P, in modo che gli ambienti dei vari utenti siano mantenuti indipendenti. In questi casi, si dice anche che il codice di P è rientrante.
08/08/2013
M. Malatesta 1-Concetti preliminari-04 21
Argomenti
Le necessità dell’utente
Il gestore della memoria
Concetti preliminari – spazio fisico (SF) – spazio logico (SL) – rilocazione
Tipi di memoria
Condivisione del codice
Altre fonti di informazione
A. Lorenzi, D.Rossi – I fondamenti della programmazione-ATLAS