Sei sulla pagina 1di 20

Gestione della memoria centrale

Un programma per essere eseguito deve


risiedere in memoria principale e lo stesso vale
per i dati su cui esso opera
In un sistema multitasking molti processi
vengono eseguiti contemporaneamente:
contemporaneamente si
dovr trovare un meccanismo per permettere a
questi processi di condividere l'uso della
memoria principale
Gestione della memoria centrale
Esistono due tecniche fondamentali per la
gestione della memoria principale:
tecniche non virtuali (memoria reale):
tutta limmagine* di un processo attivo deve essere caricata
in memoria principale

tecniche virtuali (memoria virtuale):


un processo attivo pu avere solo una parte della sua
immagine caricata in memoria principale

*immagine di un processo: copia del programma che e in RAM


Tecniche non virtuali

Problema: come dobbiamo allocare la RAM ai


processi che devono essere eseguiti?
Anche nel caso di un sistema mono-
programmato, in cui in ogni istante esiste un
solo processo di utente, la memoria non e
tutta a disposizione del processo in quanto
una sua parte deve essere destinata ai
processi di sistema, cioe alla parte residente
del sistema operativo.
Sistema mono programmato
La memoria divisa in due partizioni:
partizioni una destinata al
SO; l altra al processo utente
Di solito si sceglie di destinare al sistema operativo le
prime o le ultime celle della memoria

0 Sistema Operativo
X S.O.
X+1
processo
utente
N
Tecniche non virtuali
In un sistema multi-programmato in cui pi
programmi utente P1, P2Pn sono eseguiti
contemporaneamente,
contemporaneamente ognuno di questi
processi deve avere in memoria principale il
programma ed i dati da elaborare

la memoria non occupata dal SO deve essere


suddivisa in n partizioni: una per ciascuno degli
n processi
Tecniche non virtuali
Nel caso di un sistema con partizioni di memoria
multiple sorgono nuovi problemi di gestione per il
sistema operativo
Quante partizioni creare e di quali dimensioni?
Le partizioni sono create una volta per tutte al momento
della configurazione del sistema o possono essere
modificate a seconda delle necessit correnti?
Come si sceglie la partizione in cui caricare l'immagine
di un processo?
Come si tiene traccia di dove sono stati caricati i
processi?
Come si proteggono i programmi tra di loro?
Tecniche non virtuali
Per tener traccia delle zone di memoria in cui sono stati
caricati i programmi sufficiente mantenere nel
descrittore di ciascun processo l'indirizzo iniziale della
partizione in cui esso caricato
Quando si hanno pi processi in memoria si deve fare in
modo che nessuno di essi possa operare in una zona di
memoria destinata ad un altro
Ad ogni processo deve essere consentito di leggere e
scrivere solo all'interno della sua partizione in modo da
non danneggiare l'esecuzione degli altri
Tecniche non virtuali
Si possono utilizzare due registri per delimitare la
partizione di memoria del processo in esecuzione e,
ogni volta che il processo deve fare un accesso in
memoria, si dovr controllare che lindirizzo prodotto sia
valido, cio allinterno della partizione in cui caricata
limmagine del processo

Sistema Operativo
Indirizzo iniziale partizione S.O.

processo
Indirizzo finale partizione utente
Tecniche non virtuali
Suddivisione della memoria in
partizioni fisse
partizioni variabili

S.O. S.O. S.O.


50 KB
200KB
area libera area libera
100KB 400 KB 350 KB
100KB
Tecniche non virtuali
Le tecniche di partizioni (sia fisse che variabili)
provocano uno spreco di spazio di memoria, noto con il
nome di frammentazione:
frammentazione

Con le partizioni fisse, allinterno di ogni partizione ci


sara uno spazio non utilizzato (difficilmente un
programma ha le stesse dimensioni di una partizione):
frammentazione interna

Con le partizioni variabili, dopo un certo numero di


allocazione e deallocazione di processi, si formeranno
un certo numero di porzioni di memoria libere (buchi),
di dimensioni insufficienti a contenere un processo:
frammentazione esterna
Tecniche virtuali
Uno degli obiettivi di un sistema operativo multi-
programmato, in particolare in ambiente multi-
utente, quello di nascondere il pi possibile a
ciascun processo (a ciascun utente) la
presenza degli altri processi (utenti) che stanno
condividendo le risorse di calcolo
Compito del sistema operativo quello di
fornire ad ogni singolo processo una visione
astratta in cui esso ha una macchina virtuale
interamente a sua disposizione
Tecniche virtuali
Nel caso della gestione del processore la tecnica di
alternare l'esecuzione fa s che ogni utente abbia
l'impressione che il suo programma sia sempre in
esecuzione
Per quanto riguarda la gestione della memoria, il
problema pi complesso. Si vuole che ogni utente
possa, almeno in linea di principio, scrivere programmi
grandi almeno quanto la memoria reale e che questi
programmi possano essere eseguiti
contemporaneamente ad altri
Tecniche virtuali
In alcuni casi si vogliono addirittura nascondere
agli utenti le dimensioni della memoria fisica e
fare in modo che essi possano scrivere dei
programmi di dimensione qualunque, anche
molto pi grandi dello spazio di memoria
effettivamente esistente sulla macchina
hardware
In questo modo, tra l'altro, possibile che un
utente esegua i suoi programmi su macchine
differenti, senza doversi preoccupare delle
dimensioni delle loro memorie centrali
Tecniche virtuali
Questa visione astratta della memoria prende
il nome di memoria virtuale e i programmi di
sistema che la realizzano prendono il nome di
gestori della memoria virtuale
La tecnica fondamentale per la gestione della
memoria virtuale consiste nel caricare le
immagini dei processi nella memoria centrale
a pezzi
Tecniche virtuali
Supponiamo di avere a disposizione una
memoria principale (spazio utente) di 1 MByte
e di voler eseguire simultaneamente due
programmi che richiedono entrambi 1 Mbyte
Le tecniche di gestione della memoria a
partizioni fisse o variabili non ci permettono di
eseguire contemporaneamente questi due
programmi perch le loro immagini non
possono essere caricate entrambe nella
memoria principale
Tecniche virtuali
Per eseguire un processo non necessario caricare
completamente in memoria la sua immagine
sufficiente caricare in memoria principale solo quelle
parti del programma e dei dati che servono durante
una certa fase dell'elaborazione; le altre parti possono
essere tenute su un supporto di memoria secondaria
In questo modo la memoria potr essere condivisa da
pi processi in quanto, in ogni istante, solo una parte di
ognuno di essi risieder in memoria
Tecniche virtuali
Per gestire la memoria in modo virtuale,
necessario avere:
La memoria principale in cui tenere solo i
programmi, o i pezzi di programmi, che servono in
un certo istante.
Un supporto di memoria secondaria in cui
mantenere tutte le immagini dei processi che
verranno caricate di volta in volta nella memoria
principale (solitamente si utilizzano come supporti di
memoria secondaria i dischi rigidi perch sono necessari dei
supporti veloci e con accesso diretto, per fare in modo che il
tempo richiesto per caricare programmi dalla memoria
secondaria a quella principale non sia troppo alto)
Tecniche virtuali
Si possono tenere in memoria solo alcune parti delle
immagini dei processi, purch si sia sempre in grado
di caricare le altre parti quando servono. Questa
proprio l'idea che sta alla base delle tecniche di
gestione a pezzi e, in particolare, della tecnica di
paginazione a richiesta (demand paging)
Nella paginazione l'immagine di un processo viene
suddivisa in blocchi (pagine), tutte della stessa
dimensione, che vengono caricate in memoria
principale in modo indipendente, anche in posizioni
non contigue.
La contiguita del processo viene realizzata da una
Tabella delle Pagine che memorizza per ogni pagina
del processo la sua posizione in RAM (se e caricata).
Tecniche virtuali
Se durante lesecuzione del processo, la CPU fa
riferimento ad un indirizzo che appartiene ad una
pagina non caricata in RAM, il SO provvede a
mettere il processo in stato dattesa e a far partire il
caricamento della pagina richiesta, dopo di che il
processo puo riprendere la sua esecuzione.
Nella paginazione a domanda, esiste ancora il
problema della frammentazione,
frammentazione che e pero limitato
al fatto che lultima pagina di ogni processo e solo
parzialmente occupata (mediamente si puo
considerare uno spreco pari a circa pagina per ogni
processo).
Tecniche virtuali
Per avere un sistema di gestione della memoria
basato sul demand paging anche la memoria
principale dell'elaboratore deve essere suddivisa in un
certo numero di blocchi, tutti delle stesse dimensioni
(uguali alla dimensione della pagina)

RAM

P1/2 P3/1
P2/1 P1/1
P3/2
P2/2 P1/2
P1/3 P1/3 P2/1
P3/1 P2/2
P2/3