51
Silberschatz, Galvin and Gagne ©2009 perating System Concepts – 8 th Edition Memoria Centrale

Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

Embed Size (px)

Citation preview

Page 1: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Memoria Centrale

Page 2: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.2 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Outline

Introduzione

Swapping

Allocazione contigua

Paginazione

Struttura della tabella delle pagine

Segmentazione

Page 3: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.3 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Outline

Introduzione

Swapping

Allocazione contigua

Paginazione

Struttura della tabella delle pagine

Segmentazione

Page 4: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.4 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Introduzione

Nei moderni Sistemi Operativi la gestione della memoria è un aspetto fondamentale per la realizzazione della multiprogrammazione poiché più processi attivi devono essere presenti in memoria

Un programma per essere eseguito deve trovarsi nella memoria primaria

Lo scopo del Sistema Operativo è di allocare la memoria per i processi da mandare in esecuzione in modo che siano pronti quando la CPU gli viene assegnata

L’allocazione della memoria ai processi è quindi uno dei compiti di un Sistema Operativo

Page 5: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.5 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Associazione degli indirizzi - 1

I programmi utente passano attraverso stadi diversi, con diverse rappresentazioni degli indirizzi, prima di essere eseguiti

Indirizzi simbolici

Gli indirizzi nel programma sorgente

Esempio: count

Indirizzi rilocabili

Indirizzi calcolati rispetto ad un valore di riferimento

Esempio: calcolati a partire dalla prima istruzione del programma che ha indirizzo 0

Indirizzi assoluti

Indirizzi propri della memoria centrale

Esempio 74014

Page 6: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.6 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Associazione degli indirizzi - 2 L’associazione di istruzioni e dati a indirizzi di memoria si può compiere

in diverse fasi

Compilazione - se la posizione in memoria del processo è nota a priori, può essere generato codice assoluto

se la locazione iniziale cambia, è necessario ricompilare il codice

Caricamento - se la posizione in memoria non è nota in fase di compilazione, è necessario generare codice rilocabile

il compilatore genera indirizzi relativi che vengono convertiti in indirizzi assoluti dal loader

se l’indirizzo iniziale cambia, il codice deve essere ricaricato in memoria

Esecuzione

Se il programma durante la sua esecuzione può essere spostato da una parte all’altra della memoria allora l’associazione deve essere fatta a tempo di esecuzione

È necessario un opportuno supporto hardware per il mapping degli indirizzi

I vantaggi principali sono:

Assoluta indipendenza da una locazione di memoria

Possibilità di cambiare il blocco di memoria occupato immediatamente

I Sistemi Operativi moderni supportano questa modalità di associazione

Page 7: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.7 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Spazi di indirizzi logici e fisici

Gli indirizzi utilizzati da una applicazione sono diversi dagli indirizzi realmente utilizzati dall’applicazione in memoria

Indirizzo logico (o indirizzo virtuale): è generato dalla CPU nel momento della compilazione

Indirizzo fisico: è l’indirizzo effettivamente utilizzato dall’applicazione in memoria

Il binding mappa indirizzi logici in indirizzi fisici

Binding statico : a tempo di compilazione o di caricamento

Indirizzi logici = indirizzi fisici

Binding dinamico: a run-time

indirizzi logici (o virtuali) <> indirizzi fisici

Possibilità di spostare processi in memoria all’atto dell’esecuzione

Supporto fondamentale a memoria virtuale e swapping

Page 8: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.8 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Memory-Management Unit (MMU)

L’associazione in fase di esecuzione tra lo spazio degli indirizzi logici e lo spazio di indirizzi virtuali è svolta da unità di gestione della memoria (memory-management unit, MMU)

La MMU possiede un registro di rilocazione che permette immediatamente di convertire un indirizzo logico in indirizzo fisico

Il programma utente tratta sempre indirizzi logici mentre l’architettura di sistema tratta indirizzi fisici

Esempio: se l’applicazione utilizza un range di indirizzi logici da 0 a max ed il registro di locazione contiene il valore r allora il range di indirizzi fisici sarà da 0+r a r+max

Supponiamo che il registro di rilocazione contenga il valore 14000

Qualunque tentativo da parte dell’applicazione di accedere alle locazioni di memoria 0 e 346 si traduce in

0 + 14000 = 14000 346 + 14000 = 14346

Page 9: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.9 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Caricamento dinamico

Un applicazione durante il suo ciclo di esecuzione utilizza delle procedure esterne (librerie di procedure)

Il caricamento dinamico permette di caricare una procedura in memoria solo quando viene richiamata

La memoria viene utilizzata meglio poiché la procedura è caricata solo se effettivamente utilizzata

Anche se l’applicazione è enorme, la memoria occupata è effettivamente solo quella necessaria

Il programmatore deve prestare attenzione progettando l’applicazione in modo da trarre vantaggio dal caricamento dinamico

Page 10: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.10 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Librerie di procedure

Le librerie di procedure possono essere fondamentalmente di due tipi

Librerie statiche - contengono procedure che vengono collegate al codice del programma principale dal compilatore o dal loader e diventano parte dell’eseguibile

Lo svantaggio principale è che se n programmi utilizzano la stessa libreria statica questa sarà incorporata da ogni eseguibile e quindi lo stesso codice sarà caricato più volte in memoria

Oltretutto se l’applicazione una volta mandata in esecuzione non utilizzerà nessuna procedura della libreria occuperà inutilmente spazio in memoria

Librerie dinamiche – non sono collegate al codice e vengono caricate in memoria solo quando l’applicazione chiama una delle sue procedure. La librerie è quindi caricata in memoria a run-time utilizzando un caricamento dinamico

L’applicazione che utilizza una libreria dinamica conterrà all’interno del suo codice il nome della procedura che vuole chiamare

Il vantaggio principale è che il codice di una libreria dinamica può essere condivisa tra più processi evitando inutili duplicazioni in memoria di codice identico

Sotto linux le librerie dinamiche hanno estensione .so

Sotto Windows le librerie dinamiche hanno la “ben nota” estensione .dll

Page 11: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.11 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Outline

Introduzione

Swapping

Allocazione contigua

Paginazione

Struttura della tabella delle pagine

Segmentazione

Page 12: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.12 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Swapping

L’idea dell’avvicendamento dei processi (o swapping) è salvare nella memoria secondaria un processo non in esecuzione (swap out) e ricaricarlo (swap in) appena prima di dargli la CPU

Lo swapping permette di avere più processi attivi di quanti effettivamente possa contenere la RAM

I processi attivi sono mantenuti temporaneamente su un’area del disco fisso ad uso esclusivo del Sistema Operativo chiamata area di swap (o backing store)

Poiché un processo può essere ricaricato in una diversa aria di memoria principale è necessario utilizzare codice dinamicamente rilocabile in fase di esecuzione

Page 13: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.13 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Il cambio di contesto nello swapping

La fase di contex switch utilizzando lo swapping può aumentare significativamente

Ad esempio supponiamo di avere in memoria un processo di 10MB e supponiamo che il disco fisso abbia una velocità di trasferimento di 40MB/sec

Il tempo di trasferimento è pari a:

10.000KB / 40.000KB/sec = ¼ sec = 250 millisecondi

A questo tempo va aggiunto il tempo per posizionare le testine (circa 8 millisecondi) quindi passiamo a:

258 millisecondi

Infine va considerato che l’avvicendamento include una fase di scrittura (swap out) ed una di lettura (swap in) quindi in totale avremo:

516 millisecondi

Quindi un quanto di tempo dovrebbe essere maggiore di 0,516 secondi

Page 14: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.14 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Outline

Introduzione

Swapping

Allocazione contigua

Paginazione

Struttura della tabella delle pagine

Segmentazione

Page 15: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.15 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Allocazione contigua della memoria

La memoria principale è normalmente suddivisa in due parti:

Il Sistema Operativo è caricato nella parte bassa della memoria (a partire dall’indirizzo 0)

I processi utente sono memorizzati nella memoria alta

Ogni processo è contenuto in una singola, contigua sezione di memoria

La memoria può essere allocata utilizzando diverse strategie tra le quali le più note sono:

Partizioni multiple fisse

Partizioni multiple variabili

Page 16: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.16 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Partizioni multiple fisse

Nello schema a partizioni multiple fisse (Multiprogramming with a Fixed number of Tasks, MFT) la memoria è suddivisa in blocchi (non necessariamente tutti uguali) di dimensione fissata a priori e non modificabile

Ogni partizione può contenere un processo

Il numero di partizioni decide il grado di multiprogrammazione

Al termine di un processo, la partizione è libera per contenere un altro processo

Quando un processo viene schedulato, il SO cerca una partizione libera di dimensioni sufficienti ad accoglierlo

Meccanismo dei registri limite e di rilocazione può essere utilizzato per proteggere le varie partizioni …

Page 17: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.17 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Registro limite e di rilocazione

Ogni processo deve avere uno spazio di memoria proprio e separato dal resto dei processi in modo che nessun altro possa accedervi

Una soluzione consiste nell’utilizzare due registri

Registro di rilocazione: contiene il più piccolo indirizzo fisico ammesso

Registro limite: contiene l’intervallo degli indirizzi ammissibili

Solo il Sistema Operativo può accedere a questi registri ed impedisce ai programmi utenti di modificarli

In fase di contex switch il Sistema Operativo Operativo carica:

Nel registro di rilocazione l’indirizzo iniziale della partizione

Nel registro limite la dimensione del processo

rilocazione

Page 18: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.18 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

MFT problemi: frammentazioni

Frammentazione interna

Un processo allocato in una partizione difficilmente ha esattamente la stessa dimensione

La parte che rimane viene sprecata

Ad esempio, nella partizione da 2Mbyte, 512KB vengono sprecati

Frammentazione esterna

Un altro svantaggio sta nel numero di buchi che restano liberi in ogni partizione

Ad esempio: allocando diversi processi in ogni partizione otteniamo uno spreco di512KB+512KB+1MB+2MB = 3MB

Un processo potrebbe essere allocato nel blocco ottenuto sommando i diversi buchi sprecati

Page 19: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.19 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Svantaggi MFT

Frammentazione interna

In un blocco di dimensione fissa la memoria interna ad un partizione è assegnata ma non utilizzata completamente

Frammentazione esterna

Lo spazio di memoria lasciato dai buchi è sufficiente per contenere un altro processo ma non è contigua

Se un processo è più grande della più grande partizione non può essere caricato

Aumentando la dimensione delle partizioni diminuisce il grado di multiprogrammazione ma tende anche ad aumentare la frammentazione interna

Page 20: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.20 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Partizioni multiple variabili

Nella schema a partizioni multiple variabili (Multiprogramming with a Variable number of Tasks, MVT) ogni partizione è allocata dinamicamente e dimensionata in base alla dimensione del processo da allocare

Vantaggi (w.r.t MFT)

Non è più presente la frammentazione interna: ogni partizione è dell’esatta dimensione del processo

Il grado di multiprogrammazione è variabile

La dimensione massima dei processi è limitata dalla disponibilità di spazio fisico

Page 21: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.21 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

MVT problemi: frammentazione esterna

Dopo che diversi processi si sono avvicendati in memoria vengono lasciati diversi buchi

I buchi con il tempo diventano sempre più sparsi e non utilizzabili

Page 22: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.22 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

MVT: Metodi di allocazione

Il Sistema Operativo tiene traccia di tutti i buchi liberi e della loro dimensione

Quando un processo deve essere caricato in memoria il Sistema Operativo deve cercare un buco sufficientemente grande per contenerlo

Le strategie per scegliere un buco libero sono: First-fit: scegli la prima partizione abbastanza grande per poter caricare il processo Best-fit: scegli la più piccola partizione abbastanza grande per poter caricare il processo

È necessario scandire tutta la lista dei buchi (se non è ordinata) Worst-fit: scegli la partizione più grande

È necessario scandire tutta la lista dei buchi (se non è ordinata)

Sperimentalmente il metodo migliore di allocazione risulta essere il First-fit ed il Best-fit in termini di velocità e di impiego di memoria

Page 23: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.23 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Svantaggi MVT

Frammentazione esterna

Con il tempo si formano diversi buchi non contigui che non sono in grado di ospitare un processo

La gravità del problema della frammentazione esterna per allocazione contigua dipende dalla quantità totale di memoria e dalla dimensione media dei processi

Regola del 50%: Con First-fit, per n blocchi assegnati, 0.5n blocchi possono andare “persi” per frammenta-zione

Si può ridurre la frammentazione esterna con la compattazione …

Page 24: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.24 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

MVT: compattazione

La compattazione è la soluzione che si adopera per recuperare i buchi di memoria inutilizzata

L’idea è di spostare le immagini dei processi in maniera da ricavare un buco di memoria contigua sufficientemente grande da permettere di caricare altri processi

Per poter utilizzare la compattazione è necessario che i processi siano rilocabili

Essendo una operazione onerosa che può richiedere molto tempo durante la compattazione il sistema è inutilizzabile

Strategie di compattazione - La compattazione può essere effettuata in diversi modi:

Spostare tutti i processi verso un estremo della memoria (molto costoso)

Spostare i processi in buchi già esistenti verso gli estremi della memoria (statisticamente si sposta meno memoria)

Spostare solo i processi necessari per far entrare un nuovo processo che altrimenti non avrebbe spazio sufficiente

Page 25: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.25 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

MVT: esempi compattazione

Page 26: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.26 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Outline

Introduzione

Swapping

Allocazione contigua

Paginazione

Struttura della tabella delle pagine

Segmentazione

Page 27: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.27 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Paginazione

L’allocazione della memoria presenta diversi problemi per via della frammentazione interna ed esterna

Il problema nasce dall’allocazione contigua della memoria che necessita di trovare buchi in cui allocare il processo intero

La paginazione è un metodo che permette di allocare ai processi una spazio di memoria fisica non necessariamente contiguo

Page 28: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.28 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Paginazione: metodo di base

La memoria fisica è divisa in blocchi di dimensione fissa chiamati frame o pagine fisiche

La dimensione è una potenza di 2, compresa fra 512 byte e 16 MB, ma valori tipici negli elaboratori attuali sono 4KB-8KB

La memoria logica utilizzata dal processo è divisa in blocchi della stessa dimensione chiamati pagine

Il processo è sempre allocato all’interno della memoria logica in uno spazio contiguo

Per eseguire un processo di n pagine è necessario trovare n frame liberi prima di caricare il processo

I frame non devono essere necessariamente contigui

Page 29: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.29 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Schema di traduzione degli indirizzi Ad ogni processo è associata una tabella delle pagine (PT) contenente i numeri dei frame usati per

memorizzare le pagine del processo

Serve per tradurre gli indirizzi logici negli indirizzi fisici corrispondenti

L’indirizzo generato dalla CPU è divisa in due parti:

Numero di pagina (p): è utilizzato come indice nella tabella delle pagine che contiene l’indirizzo base del frame nella memoria fisica

Scostamento (offset) di pagina (d): è combinato con l’indirizzo di pagina fisica per ottenere l’indirizzo effettivo della memoria fisica

Nota:

In fase di contex switch il Sistema Operativo attiva la tabella delle pagine per il processo a cui è stata assegnata la CPU

Il tempo per la fase di contex switch con l’introduzione della paginazione può quindi aumentare in maniera considerevole

Numero di pagina

Scostamento

p d

Page 30: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.30 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Es. di paginazione di memoria logica ememoria fisica

Page 31: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.31 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Es. di paginazione di memoria logica ememoria fisica

Page 32: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.32 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Dimensione delle pagine

La dimensione della pagine è definita dall’architettura del sistema ed è in genere una potenza di 2

La dimensione di una pagina può variare dai 512 byte ai 16MB

La scelta di una potenza di due semplifica notevolmente la traduzione di un indirizzo logico in un indirizzo fisico

Se

lo spazio logico di indirizzamento è 2m

la dimensione di una pagina è 2n

allora abbiamo:

m-n bit per indicizzare le pagine

n bit per lo scostamento (i.e., la grandezza di ogni pagina)Numero di

paginaScostamento

p d

m-n bit n bit

Page 33: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.33 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Esempio

Supponiamo di avere le seguenti condizioni

Dimensione delle pagine di 4 byte

Dimensione totale della memoria 32 byte

n = 2

m = 5

L’indirizzo logico 3 (00011 = #pagina=0, offset=3)corrisponde all’indirizzo fisico(5x4)+3 = 23

L’indirizzo logico 6 (00110 = #pagina=1, offset=2)corrisponde all’indirizzo fisico(6x4)+2 = 26

Page 34: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.34 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Tabella dei frame

Poiché il SO gestisce la memoria fisica, deve essere informato su:

quali frame sono assegnati e a chi

quali e quanti frame sono liberi

Le informazioni sono contenute nella tabella dei frame

Una entry per ciascun frame, per definire se la pagina fisica è libera o assegnata e, nel secondo caso, a quale pagina di quale(/i) processo(/i)

Page 35: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.35 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Paginazione: vantaggi

Con la paginazione è possibile evitare la frammentazione esterna

Ogni frame libero si può assegnare ad un processo che ne abbia bisogno

Però… l’ultimo frame assegnano potrebbe non essere completamente occupato causando quindi frammentazione interna

Il caso peggiore si verifica quando un processo è un multiplo della dimensione della pagina + 1 byte. In questo caso una pagina è completamente sprecata

La dimensione delle pagine è aumentata col tempo, attualmente si usano pagine di 4096, 8192, 16384 byte, fino a 4 Mbyte

Pagine più grandi producono maggiore frammentazione interna, ma permettono di avere tabelle delle pagine più piccole (meno occupazione di memoria)

Page 36: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.36 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Archietteura di paginazione

Com’è implementato il meccanismo di traduzione degli indirizzi?

Poiché ogni indirizzo deve passare attraverso il sistema di paginazione, il meccanismo di traduzione degli indirizzi deve essere molto efficiente

Il collo di bottiglia potrebbe essere l’accesso alla tabella della pagine (PT)

Infatti, ogni indirizzo logico deve essere tradotto in un indirizzo fisico con un accesso alla PT

Se la tabella è di piccole dimensioni può stare nei registri (accesso veloce)

… in realtà negli attuali sistemi la tabella della pagine può avere un numero di elementi troppo grande per essere contenuta all’interno dei registri della CPU

Due sono le possibili soluzioni:

Registro di base della tabella delle pagine (Pagetable base register, PTBR)

Memoria associativa (Translation look-aside buffer, TLB)

Page 37: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.37 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Registro di base della tabella delle pagine

Il registro PTBR punta alla tabella delle pagine che risiede in memoria

In fase di context switch è necessario solo aggiornare questo registro riducendo il tempo del cambio di contesto

Il problema di questa soluzione è che per ogni indirizzo logico, occorrono due accessi alla RAM:

Uno per recuperare il frame (conversione indirizzo logico in fisico)

Uno per recuperare il dato

In definitiva il numero di accessi alla memoria fisica aumenta di un fattore 2

Page 38: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.38 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Memoria associativa (o TLB) - 1

Una memoria associativa (translation look-aside buffer, TLB) è una cache particolarmente veloce

All’interno della memoria associativa abbiamo una coppia del tipo (chiave,valore)

Per ogni chiave passata in input alla memoria associativa, questa viene confrontata contemporaneamente con tutte le chiavi presenti per restituire il valore in output

Il dispositivo è molto veloce e costoso, e le dimensioni di una TLB sono ridotte (dai 64 ai 1024 elementi)

Page 39: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.39 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Memoria associativa (o TLB) - 2

Nella memoria associativa viene caricata una porzione della tabella della pagine (anche tutta se è possibile)

Ad ogni chiave corrisponde un numero di pagina a cui corrisponde un frame

Per ogni indirizzo logico (p,d), il numero di pagina p viene dato in input alla memoria associativa per ottenere il relativo frame

Se la ricerca ha successo (hit) si ha solo una penalizzazione del 10% del tempo di accesso alla memoria senza paginazione

Se la ricerca fallisce (TLB miss) allora occorre usare la tabella delle pagine nella RAM

#pagina (chiave)

#frame

Page 40: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.40 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Architettura di paginazione con TLB

Page 41: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.41 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Hit ratio

Definiamo il tasso di successo (hit ratio) la percentuale di volte che la ricerca nella TLB ha successo Con un hit ratio dell’80% il numero della pagine è trovata nella TLB l’80% delle volte

Supponiamo che un accesso in memoria impiega 100 nanosecondi Se la ricerca nella TLB impiega 20 nanosecondi allora un accesso in memoria impiega:

20 + 100 = 120 nanosecondi Se il numero di pagina non è contenuto nella TLB allora è necessario accedere alla memoria fisica per determinarlo,

quindi un accesso in memoria impiega:

20 + 100 + 100 = 220 nanosecondi

Nel caso in cui la percentuali di hit ratio è dell’80% e di insuccessi è del 20% il tempo medio di accesso alla memoria fisica è:

0.80 x 120 + 0.20 x 220 = 140 nanosecondile prestazioni degradano del 40%

Nel caso in cui la percentuali di hit ratio è dell’95% e di insuccessi è del 2% il tempo medio di accesso alla memoria fisica è:

0.95 x 120 + 0.02 x 220 = 122 nanosecondile prestazioni degradano del 22%

Page 42: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.42 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Pagine condivise

Due processi potrebbero eseguire lo stesso codice

Ad esempio una libreria oppure un editor di testi in un ambiente multiutente

La paginazione permette di condividere facilmente codice tra diversi processi (codice puro o rientrante)

Questa opzione è possibile perché il codice rientrante non cambia durante l’esecuzione del processo

Il codice condiviso deve apparire nella stessa locazione nello spazio degli indirizzi logici di tutti i processi

Page 43: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.43 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Esempio di pagine condivise

Page 44: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.44 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Outline

Introduzione

Swapping

Allocazione contigua

Paginazione

Struttura della tabella delle pagine

Segmentazione

Page 45: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.45 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Segmentation

La segmentazione è uno schema di gestione della memoria che supporta il punto di vista dell’utente I due spazi di indirizzamento non coincidono ma il meccanismo di traduzione permette di collegarli

Normalmente l’utente percepisce un programma come un collezione di “segmenti” separati

Programma principale Procedure Aree dati procedura Programma principale Stack Tabelle dei simboli

Page 46: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.46 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Vista logica della segmentazione

1

3

2

4

1

4

2

3

user space physical memory space

Page 47: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.47 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Indirizzare un elemento del segmento

Un compilatore in fase di compilazione genera automaticamente i segmenti, ad esempio un compilatore C crea i seguenti segmenti:

Il codice

Variabili globali

Heap, da cui si alloca la memoria

Variabili locali statiche di ogni funzione o procedura

Librerie standard del C

Ogni segmento ha lunghezza variabile

Un elemento del segmento (codice o dati) è identificato mediante la coppia (#segmento, offset)

#segmento: numero del segmento a cui l’elemento appartiene

offset: scostamento all’interno del segmento

Page 48: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.48 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Architettura di segmentazione - 1

I segmenti sono allocati all’interno della memoria fisica

Per indicizzare i segmenti abbiamo bisogno di una tabella dei segmenti

Ogni elemento della tabella dei segmenti è formata da una coppia:

Base del segmento: l’indirizzo fisico di partenza del segmento in MP

Limite del segmento: la lunghezza del segmento

Il #segmento nell’indirizzo logico, è l’indice all’interno della tabella contenente la coppia (base, limite) relativa a quel segmento

Page 49: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.49 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Architettura di segmentazione - 2

Page 50: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.50 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Esempio di segmentazione

Page 51: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Memoria Centrale

8.51 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition

Frammentazione

I segmenti di un processo, come nel caso delle pagine, non devono essere contigui nella memoria fisica

I segmenti sono di dimensione diversa, e un qualsiasi “buco” va bene, per cui:

È necessario adottare strategie di allocazione best/first fit

Ci possono essere problemi di frammentazione esterna

Un segmento potrebbe non trovare spazio in ram (anche se lo spazio c’è...)

Tuttavia, la grandezza media dei segmenti è piccola, per cui il loro uso è comunque più vantaggioso dell’allocazione contigua a partizioni variabili