Gestione_Memoria_Centrale - Sistemi e reti di computer

Gestione_Memoria_Centrale
Il compito principale del gestore della memoria è portare i programmi i memoria centrale perché il
processore li esegua. Una di queste tecniche, il partizionamento, è stata usata con diverse variazioni,
in alcuni sistemi operativi ora obsoleti. Le altre due tecniche sono la paginazione e la
segmentazione.
Partizionamento fisso
La memoria è partizionata in regioni con confini prefissati.
Sistema operativo
Sistema Operativo
4 Mbyte
16 MByte
8 Mbyte
16 MByte
8 Mbyte
16 MByte
16 Mbyte
16 Mbyte
16 Mbyte
Partizioni di uguali dimensioni
Partizioni di diverse dimensioni
Sono due le difficoltà che si presentano usando partizioni fisse della stessa dimensione.
 Il programma può essere troppo grande per risiedere in una partizione. In questo caso il
programmatore deve progettare il programma con l’uso di overlay, in modo da averne solo
una porzione residente in memoria principale.
 L’utilizzazione della memoria è estremamente inefficiente: infatti qualunque programma,
indipendentemente dalla sua dimesnsione, occupa un’intera partizione.
Entrambi questi problemi possono essere minimizzati, sebbene non risolti, usando partizioni con
diversa dimensione.
Partizionamento dinamico
Con il partizionamento dinamico si usano partizioni in numero e lunghezza variabile; quando un
processo è caricato in memoria gli è allocata tanta memoria quanta richiesta. Se un processo termina
o non è più Ready il sistema operativo libera la porzione di memoria assegnatagli.
Questo metodo comincia bene ma, prima o poi porta ad avere tanti piccoli buchi in memoria.
Questo fenomeno è chiamato frammentazione esterna.
Rilocazione
Quando si usa lo schema i partizionamento fisso, si può ritenere che un processo sia sempre
assegnato alla stessa partizione. In questo caso si può usare una tecnica di caricamento con
rilocazione . Quando un processo è caricato in memoria tutti gli indirizzi relativi presenti nel
codice, sono sostituiti dagli indirizzi assoluti della memoria principale, determinati dall’indirizzo
base del processo caricato.
Le locazioni ( delle istruzioni e dei dati) cui un processo fa riferimento non sono fisse, ma
cambieranno ogni volta che un processo è caricato in memoria o spostato. Si distinguono diversi tipi
di indirizzo: un indirizzo logico è un riferimento a una locazione di memoria indipendente
dall’assegnazione attuale dei dati in memoria. Un indirizzo relativo è un caso particolare di
indirizzo logico espresso in riferimento ad un punto conosciuto, solitamente l’inizio del programma.
Un indirizzo fisico o indirizzo assoluto, è una locazione effettiva nella memoria principale.
Utilizzando un caricamento dinamico dei processi a tempo di esecuzione è necessario utilizzare gli
indirizzi relativi. Si utilizza a questo scopo un registro base .
Registro base
Indirizzo relativo
Programma
sommatore
Indirizzo assoluto
Dati
Stack
Immagine di processo nella memoria principale
Swapping
Un processo per poter essere eseguito deve essere presente nella memoria centrale, ma può essere
temporaneamente scambiato (swapped) con un altro spostandolo dalla memoria centrale a una
memoria secondaria per poi riportarlo nuovamente in memoria centrale. Ad esempio, supponiamo
di essere in un ambiente multiprogrammabile con un algoritmo di schedulazione della CPU roundrobin. Quando terminerà il quanto di tempo di un processo, il gestore della memoria centrale
comincerà ad eliminare tale processo e caricherà un altro processo sfruttando lo spazio di memoria
centrale che è stato liberato. Questa tecnica è detta swapping.
Il tempo del cambiamento di contesto in tale scambio è piuttosto alto. Supponiamo che il processo
abbia le dimensioni di 1 MB e venga utilizzato un disco rigido dotato di una velocità di
trasferimento di 5 MB al secondo.
sistema
operativo
scaricamento
processo
P1
processo
P2
caricamento
Spazio
utente
Il trasferimento del processo di 1 MB da o nella memoria centrale impiega:
1000 KB / 5000 KB al secondo = 1/5 secondo = 200 millisecondi
Supponendo che vi sia uno stato latente medio di 8 millisecondi, il tempo di swap è di 208 ms.
Poiché si deve eseguire lo swap due volte, una per l’ingresso e una per l’uscita dalla memoria
centrale, il tempo totale è di 416 ms.
Paginazione
La paginazione è uno schema di gestione della memoria che consente allo spazio di indirizzi fisici
di essere non contiguo. Il metodo prevede la suddivisione della memoria fisica in blocchi di
dimensione fissa chiamati frame ( o pagine fisiche) e il frazionamento della memoria logica in
blocchi delle stesse dimensioni chiamate pagine ( o pagine logiche). Quando deve essere eseguito
un processo, le sue pagine sono caricate in tutti i frame di memoria centrale disponibili.
f
CPU
indirizzo logico
indirizzo fisico
d
P
d
f
Tabella delle pagine
d
memoria fisica
La dimensione della pagina logica ( uguale alla dimensione della pagina fisica) è definita
dall’hardware. La dimensione di una pagina è tipicamente una potenza di 2 e varia da 512 byte in su
a seconda dell’architettura del computer. La scelta di una potenza di 2 come dimensione della
pagina rende particolarmente facile la traduzione di un indirizzo logico in un numero di pagina e
nello piazzamento nella pagina: se la dimensione di un indirizzo logico è 2m e la dimensione della
pagina è 2n (byte o parole) con m>n, allora i bit di ordine più basso indicano lo piazzamento nella
pagina.
Numero di pagina
P
m-n bit
Spiazzamento nella pagina
d
n bit
Se si usa la paginazione non si ha frammentazione esterna. Si può avere una certa frammentazione
interna in quanto, quasi sicuramente, l’ultima pagina di un processo non sarà completamente
utlizzata.
Un aspetto importante della paginazione è la chiara separazione tra la visione della memoria
centrale da parte dell’utente e la memoria fisica attuale. L’utente vede la memoria centrale come un
unico singolo spazio, contenente soltanto il programma, ma in realtà il programma è sparpagliato
nella memoria fisica, che contiene anche altri programmi. Gli indirizzi logici sono tradotti in
indirizzi fisici, con una trasformazione che è nascosta all’utente ed è controllata dal sistema
operativo. Il sistema operativo deve essere al corrente di quali frame sono allocati, quali sono
disponibili, quanti sono i frame totali. Queste informazioni sono mantenute generalmente in una
struttura dati chiamata tabella dei frame. La tabella dei frame ha un elemento per ogni frame, che
indica se questo è libero o allocato, a quale pagina di quale processo.
Il sistema operativo mantiene, per ogni processo , una copia della tabella delle pagine per tradurre
gli indirizzi. La paginazione di conseguenza aumenta il tempo di cambiamento di contesto.
Supporto hardware alla paginazione
L’implemetazione hardware della tabella delle pagine avviene nel caso più semplice come gruppo
di registri dedicati. Il DEC PDP-11 è un esempio di tale architettura: l’indirizzo è a 16 bit e il
formato della pagina 8 Kbyte. La tabella delle pagine consiste in otto elementi conservati in registri
veloci. La maggior parte dei computer odierni, tuttavia permette che la tabella sia molto grande ( ad
esempio un milione di elementi. La tabella è mantenuta in memoria centrale e il registro base della
tabella delle pagine punta alla tabella. Con questo metodo il problema risulta essere il tempo
richiesto per accedere a una locazione di memoria centrale.
La soluzione standard a questo problema consiste nell’usare una speciale, piccola cache hardware
per l’indicizzazione veloce detta memoria associativa TLB (Translation LookAside Buffer).
Potrebbero occorrere 20 nanosecondi per cercare nella TLB e 100 nanonesondi per accedere alla
memoria centrale.
indirizzo logico
CPU
p
d
n° pagina n° frame
TLB hit
f
TLB
d
indirizzo fisico
p
TLB miss
f
memoria fisica
tabella delle pagine