Gestione della Memoria Principalewpage.unina.it/fasolino/so/materiale/8-GestioneMemoria.pdf1 1...

Preview:

Citation preview

1

1

Gestione della Memoria Principale

• Requisiti della Gestione della Memoria.• Gestione a Partizioni Fisse.• Partizionamento dinamico.

• Paginazione.• Segmentazione.

2

Gestione della Memoria

• In un sistema multiprogrammato la parte ‘utente’ della memoria deve essere suddivisa per ospitare più processi.

• La memoria deve essere allocata efficientemente per immettervi più processi possibili.

2

3

Requisiti della Gestione della Memoria

• Rilocazione– Un programmatore non sa in anticipo dove il

programma sarà allocato in memoria durante l’esecuzione.

– Durante l’esecuzione, il programma potrà essere trasferito sul disco (Swappato) e poi riportato in Memoria Centrale in una diversa posizione (Rilocato).

– I riferimenti alla memoria trovati nel codice del programma devono essere tradotti in indirizzi fisici effettivi di memoria.

3

5

Requisiti della Gestione della Memoria

• Protezione– I processi non devono referenziare le locazioni di

memoria di altri processi senza permesso.– Siccome il programma potrebbe essere rilocato, è

impossibile controllare gli indirizzi assoluti a tempo di compilazione, quindi…

– I riferimenti alla memoria devono essere controllati durante l’esecuzione.

• E’ in genere compito del Processore (Hardware) giacchè il sistema operativo non può anticipare tutti i riferimenti alla memoria che un programma farà.

6

Requisiti della Gestione della Memoria

• Condivisione– Permette a più processi di accedere alla stessa

porzione di memoria condivisa, senza compromettere la protezione.

– E’ preferibile che ciascun processo acceda ad una stessa copia del programma, piuttosto che darne a ciascuno una copia separata.

4

7

Requisiti della Gestione della Memoria

• Organizzazione Logica– La memoria principale è organizzata come spazio di

indirizzamento lineare, mentre i programmi sono generalmente organizzati in moduli (R/W/X).

– Sistema operativo e hardware devono trattare programmi utente e dati come moduli, permettendo che:

• I moduli possono essere scritti e compilati indipendentemente, ed i riferimenti vengono risolti a tempo di esecuzione.

• Differenti gradi di protezione possono essere attribuiti ai vari moduli (read-only, execute-only)

• Condivisione dei moduli

8

Requisiti della Gestione della Memoria

• Organizzazione Fisica– Si ricorre generalmente a schemi di gestione della

memoria a due livelli, dove il flusso di dati tra memoria principale e secondaria è compito fondamentale del sistema.

– Assegnare il compito al programmatore non è pratico perché:

• Usando gli Overlay, il programmatore deve gestire l’alternanza di vari moduli nello stesso spazio di memoria.

• Il programmatore non sa quanto e quale spazio sarà disponibile.

5

9

Gestione a Partizioni Fisse

• Partizioni Uguali– Ogni processo con dimensioni minori o uguali a

quelle di una partizione potrà essere allocato in una partizione disponibile.

– Se tutte le partizioni sono occupate, il S.O. può sottoporre un processo a swap out.

– Un programma può essere più grande di una partizione. In tal caso, il programmatore dovrà far uso degli Overlay.

10

Gestione a Partizioni Fisse

• Svantaggi delle Partizioni Fisse.

• Uso inefficiente della memoria e Frammentazione Interna: ogni programma occupa un’intera partizione, indipendentemente dalla sua dimensione, con conseguente spreco di memoria.

• Il problema può essere minimizzato usando partizioni fisse ma a dimensioni variabili

6

12

Algoritmi di allocazione

• Partizioni Fisse– Viene assegnata una qualsiasi partizione libera

• Partizioni Variabili– Viene assegnato il processo alla più piccola

partizione sufficientemente grande. – E’ necessaria una coda di schedulazione per ogni

partizione.– I processi sono assegnati in modo da minimizzare

lo spreco di memoria interno alla partizione.– In alternativa… unica coda di schedulazione…

7

14

Partizionamento dinamico

• Partizioni in numero e lunghezza variabili.• Al processo viene assegnata esattamente la memoria

necessaria.• Il metodo produce piccoli buchi in memoria: è il

fenomeno della Frammentazione Esterna• Necessarie tecniche di Compattazione per spostare i

processi e renderli contigui, e riunire tutta la memoria libera in un unico blocco.– La compattazione ha elevato costo computazionale– Richiede capacità di rilocazione

8

Effetti del Partizionamento Dinamico

Effetti del Partizionamento Dinamico

9

17

Algoritmi di allocazione per il partizionamento dinamico

• Il S.O. decide quale blocco libero assegnare ad un processo.

• Algoritmo Best-fit– Sceglie il blocco che è più vicino in dimensione

alla richiesta.– Ha le peggiori prestazioni, in quanto cercando il

blocco più piccolo, lascia sempre frammenti piccoli e scarsamente utilizzabili.

– È necessaria la compattazione di memoria più frequentemente.

18

Algoritmi di allocazione per il partizionamento dinamico

• Algoritmo First-fit– È il più semplice e veloce: sceglie il primo blocco

disponibile sufficientemente grande.– Ha lo svantaggio che tende a riempire la parte

iniziale della memoria, lasciando piccole partizioni libere che devono essere esaminate ad ogni passo dell’algoritmo.

10

19

Algoritmi di allocazione per il partizionamento dinamico

• Algoritmo Next-fit– Scandisce la memoria partendo dall’ultimo blocco

allocato, e sceglie il primo blocco disponibile successivo sufficientemente grande.

– Ha prestazioni leggermente peggiori del first-fit – Il più grande blocco di memoria libera

(solitamente alla fine) è rapidamente ridotto in piccoli frammenti, richiedendo la compattazione più frequentemente.

Blocco di 16 KB da allocare

11

21

Alcuni limiti della gestione a Partizioni

• Partizioni fisse:– Limita il numero di processi attivi – Usa inefficientemente la memoria se c’è poca

corrispondenza fra dimensioni del processo e della partizione disponibile.

• Partizionamento dinamico:– Più complesso da gestire e maggiori costi realizzativi per

la necessità di compattazione.

• Un metodo alternativo per superare alcuni inconvenienti… il Buddy System (usato per alcuni sistemi paralleli e nell’allocazione del kernel di UNIX).

22

Buddy System

• L’intero spazio disponibile viene trattato come un unico blocco di dimensione 2U

• Data una richiesta con dimensione s tale che 2U-1 < s <= 2U, l’intero blocco viene allocato.– Altrimenti il blocco è diviso in due ‘compagni’ di

uguale dimensione 2U-1 .– Il processo di divisione continua finché viene

generato il più piccolo blocco con dimensioni maggiori o uguali ad s.

– Quando una coppia di compagni si libera, si ricrea un unico blocco con dimensione doppia.

12

13

25

Dettagli del Buddy System

• Il sistema mantiene una lista di blocchi liberi per ciascuna dimensione 2i

• Un blocco viene rimosso dalla lista i+1 esima dividendolo a metà e creando due compagni di dimensione 2i che verranno inseriti nella lista i-esima

• Ogni volta che si libera una coppia di compagni dalla lista i-esima, questi sono riunificati e spostati nella lista i+1-esima

• Ad ogni nuova richiesta di memoria si può impiegare un algoritmo ricorsivo per cercare un blocco libero

26

Rilocazione

• Quando un processo è caricato in memoria, gli Indirizzi Logici presenti nel codice sono sostituiti dagli Indirizzi Assoluti (o Fisici) della memoria principale.

• Durante l’esecuzione, a seguito dello swapping, un processo può occupare partizioni differenti, con indirizzi assoluti differenti.

• Anche la Compattazione porterà un processo ad occupare differenti partizioni ed indirizzi.

• Concetti validi sia per la gestione a partizioni fisse che per l’allocazione dinamica

14

27

Indirizzi di memoria

• Logico– Riferimento ad una locazione di memoria indipendente

dall’allocazione effettiva in memoria fisica.– Richiede la traduzione in indirizzo fisico.

• Relativo– è un caso particolare di Indirizzo Logico, in cui l’indirizzo

è espresso come una locazione relativa ad un punto prefissato.

• Fisico– (o Indirizzo assoluto) è una locazione effettiva in memoria

principale.

15

29

Registri usati durante l’Esecuzione

• Registro Base – Indirizzo di partenza del processo in memoria

principale.

• Registro Limite– Indirizzo finale del programma.

• Questi valori sono impostati quando il processo è caricato in memoria, e quando è sottoposto a swap in dal disco.

30

Registri usati durante l’Esecuzione

• Il valore del Registro Base viene addizionato all’indirizzo relativo per produrre l’indirizzo assoluto.

• L’indirizzo risultante è confrontato col valore del Registro limite.

• Se l’indirizzo è fuori dal limite, è generato un interrupt per il S.O.

16

31

Paginazione

• La memoria principale è partizionata in blocchi relativamente piccoli (es. 4K ) della stessa misura (frames)

• Ogni processo è diviso in pacchetti della stessa dimensione (pagine)

• Il S.O. mantiene una Tabella delle Pagine per ciascun processo– La Tabella contiene l’indirizzo dei frame associati

alle pagine del processo.– All’interno del programma ogni indirizzo di memoria

è composto da un numero di pagina e da un offset interno alla pagina.

17

Esempio: le Tabelle delle pagine all’istante (f)

18

35

Paginazione

• Il S.O. mantiene anche la lista dei frame liberi.• La dimensione della pagina è in genere potenza

di 2 per semplificare l’hardware per la paginazione.

• Esempio (indirizzo a 16-bit, pagine di 1K)• 010101 011011010 • Primi 6 bits (010101)= numero di pagina• Ultimi 10 bits (011011010) = offset interno alla pagina

– Dimensioni tipiche della pagina: 512 bytes, 1K, 4K

36

Paginazione

• Elimina il problema della frammentazione esterna: un processo può occupare anche pagine non contigue.

• Resta la frammentazione interna: lo spreco di memoria nell’ultima pagina dipende dalla dimensione della pagina.

• La scelta della dimensione della pagina influisce sulla dimensione della Tabella delle Pagine.

19

37

Realizzazione della Tabella delle Pagine

• Attraverso un insieme di Registri Dedicati: traduzione veloce degli indirizzi ma soluzione costosa (specie con tabelle grandi).

• La Tabella è salvata in Memoria Principale ed un Registro Base punta ad essa.– Soluzione inefficiente: per accedere ad ogni locazione

di memoria sono necessari due accessi in memoria!• Soluzione con Registri associativi (Cache):

– Accesso più veloce ma l’hardware è costoso

38

Segmentazione

• Un processo è diviso in un certo numero di segmenti, non tutti della stessa lunghezza

• Il programmatore scompone il programma in segmenti e deve badare a non superare la lunghezza massima consentita per il segmento

• Un indirizzo sarà composto dal numero del segmento e da un offset

• Esiste una tabella dei segmenti le cui entry forniscono sia l’indirizzo iniziale del segmento, sia la sua lunghezza

• La traduzione dell’indirizzo logico si ottiene sommando l’offset all’indirizzo fisico iniziale del segmento

20

39

Segmentazione

• Giacchè la lunghezza dei segmenti non è la stessa, la segmentazione è simile al partizionamento dinamico, ma non ha il vincolo della contiguità

• Quindi la segmentazione elimina la frammentazione interna, ma presenta frammentazione esterna

Recommended