Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
1
1
Il Livello di Sistema Operativo:la memoria virtuale
A cura di:Donatella Sciuto*, Luca Breveglieri*,
Giacomo Buonanno#, Giuseppe Pozzi*
*Dipartimento di Elettronica e Informazione, Politecnico di Milano
#LIUC, Castellanza (Va)
sciuto/brevegli/[email protected]@liuc.it
2
Sistema operativo
• Livello di astrazione superiore rispetto al livello ISA della macchina
• Mette a disposizione del programmatore una maggior varietà di funzionalità e istruzioni.
• L’insieme di “istruzioni” messo a disposizione dal livello del sistema operativo corrisponde all’insieme di “istruzioni” disponibili al programmatore delle applicazioni
4
7
Overlays
• Il programmatore era responsabile della creazione degli overlays, della loro posizione nella memoria secondaria, e caricando direttamente gli overlay in memoria
• Gestione completa degli overlays svolta manualmente dal programmatore
• Nel 1961 proposta di un metodo di gestione automatica del processo di overlays, in modo trasparente al programmatore: la memoria virtuale
8
Il concetto di memoria virtuale• Separare il concetto di spazio di
indirizzamento e locazioni di memoria• Spazio di indirizzamento = numero di parole
indirizzabili � Dipende esclusivamente dal numero di bit
dell’indirizzo e non dal numero di parole di memoria effettivamente disponibile
� Se la dimensione della memoria principale è minore dello spazio indirizzabile, prima dell’esistenza della memoria virtuale una parte degli indirizzi non sarebbe ststa utilizzabile a causa della corrispondenza uno a uno tra indirizzi e locazioni di memoria.
5
9
Spazio di indirizzamento
• Separazione tra spazio di indirizzamento e locazioni di memoria
• Esempio: � 16 bit di indirizzo, memoria principale di
4K parole� In ogni istante di tempo è possibile
accedere a sole 4096 parole di memoria, ma non necessariamente corrispondenti agli indirizzi 0-4095.
10
Traduzione degli indirizzi
Quando si accede all’indirizzo 4096, questo viene automaticamente tradotto nell’indirizzo 0 della memoria principale, 4097 nell’indirizzo 1 .....8191 in 4095.
Spazio di indirizzamento
0
4096
8191
Memoria principale
Mapping4K parole
0
4095
6
11
Memoria virtuale• Cosa succede se un programma chiede di
saltare dall’indirizzo 2500 all’indirizzo 8190?• Con il meccanismo di memoria virtuale:
� I contenuti della memoria principale vengono salvati su disco
� Le parole agli indirizzi da 4096 a 8191 vengono copiate in memoria principale tra gli indirizzi 0 e 4095
� L’esecuzione del programma prosegue come se non fosse successo nulla
• Meccanismo di overlay automatico: paginazione
12
Paginazione
• Blocchi di dimensione fissa (es. 4K) trasferiti tra memoria principale e memoria secondaria: pagine
• Oggi: metodo più sofisticato per la traduzione dello spazio di indirizzamento sugli indirizzi di memoria reali
7
13
Memoria virtuale• Indirizzi a cui fa riferimento il programma in
esecuzione: indirizzi virtuali• Indirizzi di memoria centrale: indirizzi fisici• Meccanismo di traduzione automatico degli
indirizzi virtuali in indirizzi fisici• Con la memoria virtuale, la CPU produce un
indirizzo virtuale, che viene tradotto da una combinazione di elementi hardware e software in un indirizzo fisico, che può essere utilizzato per accedere alla memoria principale: traduzione dell’indirizzo (memory mapping)
14
Obiettivi della memoria virtuale
• consentire una condivisione efficiente della memoria da parte di più programmi
• rimuovere il carico di lavoro del programmatore provocato dalla limitata quantità di memoria disponibile� La paginazione è trasparente al programmatore� Il programmatore può scrivere i propri programmi
pensando di avere a disposizione l’intero spazio di indirizzamento virtuale indipendentemente dalle dimensioni effettive della memoria centrale
8
15
Rilocazione
• Meccanismo per la fase di caricamento di un programma prima dell’esecuzione: gli indirizzi virtuali utilizzati dal programma vengono tradotti in indirizzi fisici diversi prima che possano essere utilizzati per accedere alla memoria.
• Questa traduzione consente il caricamento del programma in una qualsiasi locazione della memoria fisica.
16
Rilocazione
• Tutti i meccanismi di gestione della memoria virtuale rilocano il programma come un insieme di blocchi di dimensione fissa (pagine), eliminando così la necessità di individuare un blocco di memoria contigua sufficientemente ampio da potervi caricare il programma;
• Il sistema operativo ha solo bisogno di trovare un numero sufficiente di pagine disponibili nella memoria fisica.
9
17
Implementazione della paginazione
• Lo spazio di indirizzamento virtuale è suddiviso in un numero intero di pagine di dimensione fissa
• Dimensioni di pagina tipici: da 512 byte a 64 Kbyte
• Dimensione della pagina: sempre una potenza di 2.
18
Implementazione della paginazione
• Lo spazio di indirizzamento fisico (ossia della memoria centrale) viene suddiviso in un numero intero di pagine di uguale dimensione di quelle utilizzate per lo spazio di indirizzamento virtuale.
• Ogni pagina della memoria può quindi contenere esattamente una pagina dello spazio di indirizzamento virtuale.
• Pagina della memoria: page frame
10
19
Memoria virtuale Indirizzi fisici
Indirizzi di disco
IndirizziIndirizzi virtuali
Page frame
20
Esempio
• Spazio di indirizzamento virtuale: indirizzi da 32 bit � 232 indirizzi diversi
• Dimensione di pagina: 4K parole � 212 indirizzi• Numero di pagine dello spazio di
indirizzamento virtuale = 232 / 212 = 220 pagine• Spazio di indirizzamento fisico: 4M parole �
222 indirizzi • Numero di pagine dello spazio di
indirizzamento fisico = 222 / 212 = 210 pagine
11
21
Traduzione dell’indirizzo virtuale in indirizzo fisico
Traduzione
Spiazzamento pagina Numero di pagina virtuale
11 10 9 8 …… 3 2 1 0 31 30 29 28 27 ………… 15 14 13 12
Indirizzo fisico
Indirizzo virtuale
Spiazzamento pagina Numero di pagina fisica
11 10 9 8 …… 3 2 1 0 21 20 ………… 15 14 13 12
22
Memory Management Unit
• La traduzione del numero di pagina virtuale nel corrispondente numero di pagina fisica avviene mediante un dispositivo, la Memory Management Unit (MMU)
• Può essere posizionata nel chip della CPU, o in un chip separato
12
23
Tabella delle pagine
• La MMU contiene una tabella delle pagine, con una riga per ogni pagina dello spazio di indirizzamento virtuale
• Ogni riga è identificata dal numero di pagina virtuale e contiene due campi:� 1 bit VALIDO che indica se la pagina
corrispondente è presente/assente in memoria
� Il numero di pagina fisica corrispondente
24
Costruzione dell’indirizzo fisico
Spiazzamento pagina Registro della tabella delle pagine
Numero di pagina virtuale
Se è 0 allora la pagina non è presente in memoria
Numero di pagina fisica Valido
11 10 9 8 …… 3 2 1 0 31 30 29 28 27 ………… 15 14 13 12Indirizzo virtuale
Indirizzo fisico
Tabella delle pagine
Spiazzamento pagina Numero di pagina fisico
1220
18
11 10 9 8 …… 3 2 1 0 21 20 …… 15 14 13 12
13
25
Procedura di calcolo dell’indirizzo fisico
1. MMU riceve l’indirizzo virtuale da 32 bit
2. Separa i 12 bit meno significativi che rappresentano lo spiazzamento all’interno della pagina di 4K
3. I 20 bit più significativi rappresentano il numero di pagina virtuale
4. Il numero di pagina virtuale identifica la riga della tabella delle pagine
26
Procedura di calcolo dell’indirizzo fisico
5. La MMU verifica se la pagina richiesta è presente in memoria centrale esaminando il bit di VALIDO.
6. Se il bit=1 la pagina è presente in memoria� Legge il valore contenuto nella tabella che
rappresenta il numero di pagina fisica e lo affianca come bit più significativi all’offset ottenendo l’indirizzo fisico di memoria da cercare.
7. Else si verifica un errore di pagina (page fault)
14
27
Errore di pagina• Si verifica quando il bit di validità per una pagina
virtuale è = 0: il controllo deve essere passato al sistema operativo con il meccanismo dell’eccezione.
• Una volta che il sistema operativo ha ottenuto il controllo, deve rintracciare la pagina nel livello inferiore della gerarchia (di solito un disco magnetico) e decidere dove, nella memoria fisica, deve mettere la pagina richiesta.
• Per individuare la posizione della pagina sul disco ènecessaria una struttura dati che ne registra la posizione
28
Errore di pagina
• Deve inserire la corrispondenza tra indirizzo di pagina virtuale e di pagina fisica nella tabella delle pagine
• Ripetere l’esecuzione dell’istruzione che aveva causato l’errore di pagina
15
29
Tabella delle pagine
Memorizzazione su disco
Tabella delle pagine Memoria fisica
11
Valido Pagina fisica o indirizzo su disco
11
10
01
11
10
Numero dellapagina virtuale
30
Traduzione degli indirizzi
Processore
Spazio ind. virtuale
TraduzioneIndirizzi
Gestione errore di pagina
MemoriaPrincipale
MemoriaSecondaria
a
aa'
0
Errore di pagina
Indirizzo fisico Trasferimento gestito dal SO
V = {0, 1, . . . , n - 1} spazio indirizzi virtualiM = {0, 1, . . . , m - 1} spazio indirizzi fisici
MAP: V --> M U {Ø} f. traduzione degli indirizzi
n > m
MAP(a) = a' se il dato all’ind. virtuale a è presente all’ind. fisico a' e a' in M
= Ø se il dato all’ind. virtuale a non è presente in M
16
31
Progetto di un sistema di memoria virtuale
• Problemi principali:� Dimensione delle pagine (unità trasferita tra
memoria principale e memoria secondaria)� Strategia di caricamento delle pagine (su
richiesta/working set)� Politica di sostituzione: nel caso di errore di
pagina, se la memoria centrale non ha page frame disponibile come scegliere la pagina da sostituire per far posto alla nuova pagina
� Politica di posizionamento delle pagine in memoria centrale
32
Paginazione su richiesta• Esecuzione di un nuovo programma
� La tabella delle pagine viene invalidata per indicare che nessuna pagina si trova in memoria
� Quando la CPU cerca di accedere alla prima istruzione si verifica un errore di pagina e la prima pagina viene portata in memoria e registrata nella tabelle delle pagine
� Ogni volta che si identifica un indirizzo in una pagina non ancora in memoria, si verifica un errore di pagina
• Metodo chiamato di paginazione su richiesta (demand paging): pagine caricate solo quando necessarie
17
33
Working set• Metodo alternativo basato sul principio di
località� La maggior parte dei programmi non accede al
suo spazio di indirizzamento in modo uniforme ma gli accessi tendono a raggrupparsi in un numero limitato di pagine
• Working set: insieme di pagine che ad ogni istante t rappresentano le pagine a cui hanno fatto accesso le ultime k richieste alla memoria
• All’inizio dell’esecuzione di un programma è possibile caricare il working set in memoria
34
Politica di sostituzione delle pagine
• Idealmente si mantiene in memoria il working set per ridurre il numero di errori di pagina
• Problema: identificazione del working set in ogni istante di tempo deve essere svolta dal SO in modo dinamico
• Informazione utile per identificare la pagina da sostituire in caso di errore di pagina
18
35
Politica di sostituzione
• Definizione di un algoritmo di sostituzione� Casuale� Least recently used (LRU): il SO cerca di
identificare la pagina meno utile nel prossimo futuro, ossia quella utilizzata meno di recente (principio di località) che ha bassa probabilità di appartenere al working set attuale
� FIFO (First In First Out): si sostituisce sempre la pagina caricata meno di recente, indipendentemente da quando si è fatto riferimento a questa pagina
36
Algoritmo LRU
• Buone prestazioni in media• Esistono situazioni particolari in cui l’algoritmo
ha prestazioni pessime• Esempio:
� Esecuzione di un ciclo che si estende su 9 pagine virtuali
� La memoria può contenere solo 8 pagine� Si assuma che le prime 8 pagine virtuali (da 0 a
7) siano in memoria.� Al termine dell’esecuzione della pagina 7 è
necessario caricare pagina 8.
19
37
Algoritmo LRU: esempio
• Scelta della pagina da sostituire mediante algoritmo LRU
• La pagina meno utilizzata di recente è la pagina 0 �viene sostituita con la pagina 8
• Al termine dell’esecuzione delle istruzioni che appartengono alla pagina 8 è necessario ricominciare l’esecuzione del ciclo da pagina 0, ossia la pagina appena sostituita � errore di pagina!
• La pagina 0 andrà a sostituire la pagina 1, utilizzata meno di recente: ma questa sarà la pagina da ricaricare subito dopo!!
38
Fallimento dell’algoritmo LRU
Pagina virtuale 0Pagina virtuale 1Pagina virtuale 2Pagina virtuale 3Pagina virtuale 4
Pagina virtuale 5
Pagina virtuale 7Pagina virtuale 6
Pagina virtuale 8
Memoria centrale
Al termine dell’esecuzione delleistruzioni di pagina 7 è necessariocaricare pagina 8 sostituendo la pagina utilizzata meno di recente, ossia pagina 0
20
39
Fallimento dell’algoritmo LRU
Pagina virtuale 8Pagina virtuale 1Pagina virtuale 2Pagina virtuale 3Pagina virtuale 4
Pagina virtuale 5
Pagina virtuale 7Pagina virtuale 6
Pagina virtuale 0
Memoria centrale
Al termine dell’esecuzione delleistruzioni di pagina 8 è necessariocaricare pagina 0 sostituendo la pagina utilizzata meno di recente, ossia pagina 1
40
Fallimento dell’algoritmo LRU
Pagina virtuale 8Pagina virtuale 0Pagina virtuale 2Pagina virtuale 3Pagina virtuale 4
Pagina virtuale 5
Pagina virtuale 7Pagina virtuale 6
Pagina virtuale 1
Memoria centrale
Al termine dell’esecuzione delleistruzioni di pagina 0 è necessariocaricare nuovamente pagina 1 sostituendo la pagina utilizzata meno di recente, ossia pagina 2
E così via.....
21
41
Algoritmo LRU
• Fallisce quando il working set è di poco maggiore della memoria centrale disponibile
• Nel caso in esempio il working set è di una pagina superiore al numero di pagine disponibili in memoria
• Se l’accesso alle pagine è sequenziale, in questo caso si sostituisce sempre la pagina che verrà richiesta subito dopo
42
Algoritmo di sostituzione FIFO
• Si mantiene l’informazione del momento in cui è stata caricata la pagina
• Si associa un contatore ad ogni page frame• Inizialmente i contatori sono = 0• Al termine della gestione di un errore di
pagina i contatori dei page frame non modificati sono incrementati di 1
• Il contatore della pagina appena caricata viene posto a 0
22
43
Algoritmo di sostituzione FIFO
• In caso di errore di pagina la pagina da sostituire è quella con il valore del contatore più alto.
• Il valore di contatore più alto significa che si tratta della pagina che ha visto piiù errori di pagina e quindi si trova in memoria da più tempo rispetto alle altre� ha più probabilità di non essere
necessaria nel prossimo futuro (principio di località)
44
Algoritmi di sostituzione
• L’algoritmo FIFO non ha un buon comportamento nel caso in cui il working set è di poco maggiore del numero di pagine disponibili in memoria
• Non ci sono algoritmi che danno buoni risultati in questo caso
• Un programma che genera errori di pagina frequenti si dice in thrashing(situazione poco auspicabile)
23
45
Scrittura in memoria
• Nel caso di scrittura in memoria la modifica avviene solo nelle pagine in memoria e non riportata immediatamente sulle pagine su disco
• Motivazione: tempi di accesso al disco molto elevati rispetto ai tempi di accesso alla memoria
• In caso di errore di pagina è necessario individuare se la pagina in memoria è stata o meno modificata
46
Scrittura in memoria
• Se la pagina è stata modificata è necessario di copiarla su disco prima di sostituirla
• Le pagine contenenti istruzioni non possono essere modificate quindi non devono essere copiate su disco
• Nella MMU si associa un bit ad ogni page frame per indicare se la pagina che contiene è stata o meno modificata
• Quando una pagina deve essere sostituita il SO verifica il bit di scrittura per stabilire se la pagina debba essere copiata su disco
24
47
Frammentazione della memoria
• Ad un programma e ai suoi dati vengono assegnati un numero intero di pagine
• Non sempre un programma e i suoi dati riempiono un numero intero di pagine� spreco della memoria
• Esempio: programma + dati = 26.000 Byte e pagine di 4kByte (4096 Byte)
• Numero di pagine: 26000/4096 ≈ 6.34� sono necessarie 7 pagine, ma l’ultima pagina è
occupata per 1424 Byte e verranno sprecati 2672 Byte
48
Frammentazione della memoria
• Per pagine di n Byte la quantità media di spazio di memoria sprecato nell’ultima pagina sarà di n/2 Byte� ridurre le dimensioni della pagina per
minimizzare lo spreco• Pagine piccole � � numero di pagine �� dimensioni della tabella delle pagine�� dimensioni della MMU
25
49
Dimensionamento delle pagine
• Pagine piccole riducono l’efficienza dei trasferimenti dal disco:� Pagine più piccole richiedono più trasferimenti � Tempo di ricerca della pagina su disco + ritardo
di rotazione ≈ 10 msec� Tempo di trasferimento di una pagina di 1KByte a
10MB/sec richiede circa 0.1 msec � Il peso del trasferimento è di due ordini di
grandezza inferiore al tempo di ricerca
50
Dimensionamento delle pagine• Pagine piccole portano a meno thrashing se il
programma lavora su regioni piccole e separate all’interno dello spazio di indirizzamento
• Esempio: matrice di 10.000×10.000 elementi memorizzata per colonne, ogni elemento richiede 8 Byte.
• Gli elementi della riga 1 sono a distanza di 80.000 Byte l’uno dall’altro.
• Elaborazione su una riga intera: per avere tutti gli elementi in memoria:� Con pagine da 8KB sono necessari 80MB � Con pagine da 1KB sono necessari 10MB� Se memoria disponibile è di 32 MB il programma andrebbe
in thrashing con pagine da 8KB.
26
51
Spazio di indirizzamento di un programma
• Fino ad ora si è considerato un unico spazio di indirizzamento lineare
• In alcuni casi potrebbe essere più utile avere spazi di indirizzamento diversi per diverse tipologie di informazione
• Il compilatore crea strutture dati diverse durante la fase di compilazione di un programma
52
Tipologie di informazioni
1. Tabella dei simboli che contiene nomi e caratteristiche delle variabili
2. Codice del programma3. Tabella delle costanti4. Albero sintattico del programma5. Stack utilizzato per le chiamate a procedura
Prime 4 tabelle crescono al crescere della compilazione mentre lo stack cresce in modo non prevedibile in base alle chiamate
27
53
Spazio di indirizzamentoSuddivisione dello spazio di indirizzamento lineare in parti adiacenti, una per ogni tabella
Tabella dei simboli
Codice sorgente
Tabella costanti
Stack
Albero sintattico
Spazio di indirizzamento stack Possibili problemi
di disponibilità di memoria per i singoli spazi adiacenti
54
Segmenti
• Soluzione: definire spazi di indirizzamento indipendenti, chiamati segmenti.
• Ogni segmento composto da una sequenza lineare di indirizzi.
• Segmenti possono avere lunghezze diverse sia in fase di compilazione sia in fase di esecuzione (ad esempio lo stack o i dati dinamici)
28
55
Segmenti
• Entità logiche note al programmatore• Per specificare un indirizzo nella memoria
segmentata è necessario fornire un numero di segmento e un indirizzo al suo interno, da 0 a un massimo consentito
• Memoria bidimensionale• Ogni segmento rappresenta uno spazio di
indirizzamento separato e può crescere indipendentemente, senza creare problemi ad altri segmenti
56
Memoria a segmenti
Tabella dei simboli
Codice sorgente
Tabella costanti
Alberosintattico
Stack
Segmento 0 Segmento 1 Segmento 2 Segmento 4Segmento 3
0
16K
4K
8K
20K
12K
29
57
Segmento
• Entità logica singola• Ogni segmento contiene una tipologia
di informazioni singola: procedure, stack, matrici, collezione di dati scalari....
58
Vantaggi della memoria a segmenti
• Semplifica la gestione delle strutture di dati dinamici che possono crescere o decrescere senza problemi
• Semplifica la gestione del collegamento di procedure compilate separatamente, ognuna in un segmento separato� Ogni procedura potrà essere chiamata
indirizzando il segmento k che la contiene e la parola 0, (k,0)
30
59
Vantaggi della memoria a segmenti
• La segmentazione facilita la condivisione di procedure o dati tra programmi� Evita di dover fornire una copia fisica separata di
procedure di libreria a più programmi in memoria che ne fanno uso, dato che vengono poste in segmenti diversi a quello del programma
• Segmenti diversi possono avere tipi di protezione diversa (lettura, scrittura, esecuzione) decisa dal programmatore
• La protezione non ha senso nella paginazione� Ogni pagina può contenere informazioni di tipo
diverso in modo trasparente al programmatore
60
Confronto tra paginazione e segmentazione
Fornire spazi multipli di indirizzamento
Simulare memorie molto grandi
Motivo della tecnica?
SINOGestione di spazi di dimensioni variabili
SISISpazio virtuale > spazio fisico di memoria?
Molti1Spazi di indirizzamento
SINOVisibilità al programmatore
SegmentazionePaginazione
31
61
Implementazione della segmentazione
Swapping• I segmenti vengono caricati e scaricati dalla
memoria in base alla necessità• Tecnica simile alla paginazione su richiesta
con la differenza che i segmenti hanno dimensioni variabili� Problema: frammentazione della memoria dovuta
a zone di memoria di dimensioni non utili per contenere segmenti (frammentazione esterna)
� Spreco di memoria!
62
Swapping: esempio
• INSERIRE FIG 6.10
32
63
Swapping: frammentazione esterna
• Per evitare la frammentazione esterna:� Ogni volta che compare uno spazio libero tra un
segmento e un altro è sufficiente spostare i segmenti che seguono verso l’alto, eliminando lo spazio libero in modo da lasciare uno spazio di memoria libero in fondo
� Compattazione richiede tempo� Se il tempo necessario per la compattazione
riduce troppo le prestazioni e serve un algoritmo per determinare quale spazio libero usare per un segmento da caricare in memoria
64
Swapping: gestione della frammentazione
• Gestione degli spazi liberi di memoria richiede la gestione di una lista di indirizzi e dimensioni di tutti gli spazi liberi
• Algoritmo best fit� Sceglie la zona più piccola in cui il
segmento può stare in modo da ottimizzare l’utilizzo dello spazio libero
� Complessità elevata
33
65
Swapping: gestione della frammentazione
• Algoritmo first fit� Controlla in modo circolare la lista delle zone
libere e sceglie la prima zona di dimensioni tali da contenere il segmento da caricare
� Algoritmo non ottimo ma che richiede un tempo minore per scegliere l’allocazione
• First fit è migliore di best fit in termini di prestazioni� Best fit tende a generare molte zone piccole
inutilizzabili� Zone libere adiacenti possono essere riunite in un
unico spazio
66
Implementazione della segmentazione
Paginazione• Suddivisione di ogni segmento in pagine
di dimensioni fisse • Si applica la paginazione su richiesta• Per gestire i segmenti serve una tabella
delle pagine separata per ogni segmento
34
67
Memoria virtuale in UNIX
• Memoria segmentata con tre tipi di segmenti: codice, dati e stack
• Segmenti suddivisi in pagine di dimensioni fisse, gestita su richiesta
• Esiste la possibilità di far crescere dinamicamente le dimensioni dei segmenti dati e stack
68
Segmentazione in UNIX
Spazio libero per crescita dati e stack
stack
dati
codice
Spazio diindirizzamento di un programmain esecuzione
0
max
35
69
Memoria virtuale: Pentium II
• Sistema di memoria virtuale sofisticato: paginazione su richiesta, segmentazione pura, segmentazione con paginazione
• Basata su due tabelle� Local Descriptor Table (LDT): una per
ogni programma, descrive i suoi segmenti stack, dati, codice ....
� Global Descriptor Table (GDT): unica, condivisa tra tutti i programmi, descrive i segmenti di sistema
70
Memoria virtuale: Pentium II
• Ogni segmento ha associato un selettore di 16 bit
• Il selettore viene caricato in un registro di segmento (CS per codice e DS per dati)
• Indice specifica l’elemento della LDT e della GDT (massimo 8K descrittori di segmenti)
INDICE (13 bit)
Livello di privilegio (0-3)2 bit
GDT: 0LDT: 1
36
71
Memoria virtuale: Pentium II
• Quando viene caricato un selettore in un registro di segmenti, il descrittore corrispondente viene prelevato da LDT o GDT e memorizzato in registri interni della MMU per accedervi rapidamente
• Descrittore composto da 8 byte:� indirizzo di base del segmento,� dimensioni (in pagine o in byte), � altre informazioni: tipo di segmento e protezione,
livello di privilegio, presenza in memoria....
72
Memoria virtuale: Pentium II
Conversione di (selettore, offset) in indirizzo lineare
selettore
Indirizzo di base
Limite
Altri campi
offset
+
Indirizzo lineare 32 bit
37
73
Memoria virtuale: Pentium II
• Se la paginazione è disattivata l’indirizzo lineare viene interpretato come indirizzo fisico e mandato in memoria (segmentazione pura)
• In caso di paginazione l’indirizzo lineare corrisponde all’indirizzo virtuale e viene mappato nell’indirizzo fisico utilizzando la tabella delle pagine
74
Paginazione: Pentium II
• Ogni programma in esecuzione ha associato un direttorio delle pagine: 1024 elementi di 32 bit� Si trova a un indirizzo indicato da un
registro globale� Ogni elemento del direttorio punta a una
tabelle delle pagine di 1024 elementi di 32 bit
� Gli elementi della tabella delle pagine puntano alle pagine in memoria (4Kbyte)
38
75
Paginazione: Pentium IIIndirizzo lineare
DIR (10 bit) PAGE (10 bit) OFFSET (12 bit)
DIR
PAGE
OFFSET
Parola selezionata
Direttorio di pagina
Tabella delle pagine Pagina
76
Paginazione: Pentium II
• Elementi della tabella delle pagine: 32 bit� 20 bit: numero di pagina� 12 bit: bit di servizio gestiti dell’hardware per conto del SO
(bit di protezione, dirty bit per indicare se una pagina in memoria è stata modificata,.....)
• Due livelli di paginazione permette di ridurre lo spreco di memoria
• La MMU è dotata di speciali funzionalità hw per cercare velocemente le combinazioni DIR-PAGE usate più di recente e mapparle sull’indirizzo fisico, evitando molti accessi alla memoria
39
77
Livelli di protezione nel Pentium II
• 4 livelli di protezione individuati da 2 bit del PSW (Program Status Word):� Livello 3: programmi utente� Livello 2: librerie condivise� Livello 1: chiamate di sistema� Livello 0: kernel del SO
• L’accesso a livelli più bassi di quello del programma in esecuzione sono illegali e causano trap
• Si possono richiedere procedure a livelli inferiori in modo controllato fornendo alla chiamata un selettore (non un indirizzo)� Selettore designa un descrittore (call gate) che identifica
l’indirizzo della procedura chiamata
78
Memoria virtuale: UltraSPARC II
• Macchina di 64 bit dotata di memoria virtuale paginata che si basa su indirizzi virtuali di 64 bit
• Spazio di indirizzamento per i programmi: 44 bit (1.8 × 1013 byte) diviso in due zone ognuna di 243 byte, una in cima allo spazio di indirizzamento una in fondo
• Memoria fisica massima: 241 byte, circa 2200 GB
• Pagine: 8 KB, 64 KB, 512 KB, 4 MB
40
79
Memoria virtuale: UltraSPARC II
• MMU contiene una tabella hw chiamata Translation Lookaside Buffer (TLB) che mappa le pagine virtuali in pagine fisiche
• TLB contiene solo gli indici delle 64 pagine virtuali usate più di recente e l’indice della corrispondente pagina fisica
80
Memoria virtuale: UltraSPARC II
• Quando la MMU riceve dal programma in esecuzione il suo identificatore e un indirizzo virtuale confronta in modo hw l’indice della pagina virtuale con tutti gli elementi della TLB associati a quell’identificatore di programma
• Se corrispondono l’indice di pagina fisica viene associato con l’offset preso dall’indirizzo virtuale per formare un indirizzo fisico di 41 bit
41
81
Memoria virtuale: UltraSPARC II
• Se non si trovano corrispondenze nella TLB si verifica un miss che causa una trap al SO
• Il SO mantiene una cache software per gli elementi della TLB usati spesso in una tabella: Translation Storage Buffer (TSB)
• TSB organizzata come una cache direct mapped che contiene riferimenti a pagine virtuali
• Nel caso di TLB miss il SO controlla se l’elemento corrispondente nel TSB contiene la pagina virtuale richiesta: se è presente si sostituisce un elemento del TLB con l’elemento del TSB usando un algoritmo LRU
82
Memoria virtuale: UltraSPARC II
• Se la pagina virtuale non si trova nel TSB, il SO utilizza un’altra tabella per verificare se la pagina cercata è in memoria: tabella di traduzione
• UltraSPARC II non utilizza la segmentazione
42
83
Memoria virtuale e caching
CPU Traduzione Cache Memoria
centrale
IV IF miss
hitdata
E’ necessario un ciclo di memoria aggiuntivo per tradurre l’indirizzo virtuale (IV) nell’indirizzo fisico (IF) per l’accesso alla cache
Cache non usa indirizzi virtuali per problemi di aliasing
Concettualmente cache e gestione della memoria virtuale sono identici ma lavorano a diversi livelli della gerarchia
Cache miss gestiti dall’hardware mentre page fault gestiti dal sistema operativo
84
Conclusioni
• La memoria virtuale è stata inventata come un livello aggiuntivo della gerarchia di memoria per evitare che i programmatori dovessero gestire manualmente l’utilizzo della memoria centrale, più piccola della dimensione dei programmi
• Oggi, con l’incremento esponenziale delle dimensioni delle DRAM nell’ultimo decennio il problema è diverso
43
85
Conclusioni
• Oggi, la funzione principale della memoria virtuale è permettere la condivisione della memoria centrale tra più processi in modo da non dover trasferire i processi non in esecuzione su disco.
• La memoria virtuale quindi fornisce la protezione della memoria
• La tecnica più comune utilizzata è la paginazione, traducendo l’indirizzo virtuale in indirizzo fisico mediante una tabella delle pagine
86
Conclusioni
• Tecnica di segmentazione inventata per gestire spazi di indirizzamento indipendenti nel programma e permettere la crescita dinamica dei dati
• Segmentazione e paginazione possono essere combinati