20
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.

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

  • Upload
    lehuong

  • View
    224

  • Download
    0

Embed Size (px)

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