Sistemi Operativi Giuseppe Prencipe Memoria Gestione della

Commenti

Transcript

Sistemi Operativi Giuseppe Prencipe Memoria Gestione della
Memoria
Sistemi Operativi
Giuseppe Prencipe
 Abbiamo visto varie tecniche per gestire
la memoria
Permettono la presenza contemporanea di
più processi in memoria
Memoria Virtuale
 La memoria virtuale è una tecnica che
permette di eseguire processi che
possono anche non essere
completamente contenuti in RAM
1
2
Memoria virtuale
Gestione della memoria
 Un programma deve essere in memoria per poter
essere eseguito
Caricarlo tutto in RAM
 Overlay e caricamento dinamico aiutano ad attenuare questa
limitazione
 Tipicamente si realizza nella forma di
paginazione su richiesta o segmentazione
su richiesta
Gli algoritmi di sostituzione dei segmenti sono più
difficili da realizzare, dato che i segmenti sono a
dimensione variabile
Caricarne solo una parte
 Le condizioni d’errore in un programma servono raramente
 Anche se c’è bisogno di avere tutto il programma in RAM,
spesso non è necessario caricarlo tutto in una volta
 Con il secondo metodo, il programma non è
vincolato alla quantità di memoria fisica
disponibile. Gli utenti scrivono programmi per uno
spazio degli indirizzi virtuale
3
Paginazione su richiesta
 Quando un processo sta per essere caricato, il paginatore
fa una predizione sul numero di pagine che saranno usate
prima che il processo sia scaricato
 Sono necessari meccanismi per distinguere le pagine
presenti in memoria da quelle nei dischi
Bit di validità
 Non valido significa che


La pagina non appartiene allo spazio logico del processo (accesso illegale),
o
Che la pagina cercata non è in memoria fisica
 Fin quando il processo accede pagine valide, è come se
l’intero processo fosse in memoria
 L’accesso a una pagina marcata come non valida causa
un’eccezione di pagina mancante (page fault trap)
Paginazione su richiesta
 In seguito a un insuccesso nell’accesso a una
pagina, viene eseguita una procedura di gestione
Se il riferimento non era valido perchè illegalesi
termina il processo
Se era non valido semplicemente perchè la pagina non
era stata caricata in memoriaviene caricata




Si individua un blocco di memoria libero (lista dei blocchi liberi)
Si trasferisce la pagina dal disco al blocco designato
Si modifica la tabella delle pagine
Si riprende l’esecuzione del processo (sospeso in seguito alla
trap)
 Fig. 10.4
5
1
4
6
Paginazione su richiesta
Paginazione su richiesta pura

Tabella delle pagine
Memoria ausiliaria (swap)
 È possibile avviare l’esecuzione di un processo
senza che nessuna delle sue pagine sia in memoria
 Cosa accade in questo caso????
 Paginazione su richiesta pura
Per realizzare la paginazione su richiesta, occorrono i
meccanismi necessari alla paginazione




Bisogna porre attenzione a riavviare l’esecuzione
dell’istruzione che ha causato il page fault
Es.: si consideri ADD(A,B)C
Prelievo istruzione ADD
Prelievo A
Prelievo B
Somma A e B
Memorizza in C
Se il page fault avviene con la memorizzazione in C
(perché C si trova in una pagina non in RAM)bisogna
rieseguire l’istruzione dall’inizio dopo aver caricato la
pagina contenente C
Approfondire ulteriori esempi sul testo
7
Paginazione su richiesta
Paginazione su richiesta
 La paginazione su richiesta può avere un effetto rilevante sulle
 Considerando un tempo medio di 25 millisec per gestire il
prestazioni del sistema
page fault e di 100 nanosec per l’accesso in memoria,
abbiamo (in nanosecondi)
 Sia ma il tempo d’accesso in memoria (10—200 nanosec circa)
 Sia p la probabilità che si verifichi un page fault. Abbiamo che il
TAE=(1 - p) x 100 + p x (25 millisec)=
(1 - p) x 100 + p x 25.000.000=
100 + 24.999.900 x p
tempo d’accesso effettivo in memoria (TAE) è
TAE=(1-p)xma+px(tempo gestione fault)
 In seguito a un page fault
 Il TAE è proporzionale alla frequenza dei fault. Se un
Si genera la trap, e si salvano resgistri utente e stato del processo
Si determina la natura della trap (pagina mancante)
Si controlla la correttezza del riferimento e si determina la locazione
della pagina nel disco
Lettura dal discoeventuale scheduling CPU
accesso su 1000 causa faultTAE è di 25 microsecondi
il calcolatore è rallentato di un fattore 250
 Occorre tenere bassa la frequenza dei fault
 Gestione I/O
 Ulteriori attese dovute a (eventuali) code sul dispositivo di I/O
Interrupt I/O
Context switch (se c’è stato scheduling CPU)
Si determina la provenienza dell’interrupt dal disco
Si aggiorna la tebella delle pagine
Si attende che la CPU sia di nuovo assegnata a questo processo
Recupero dello stato del processo
8
Copiare le pagine dal disco all’area di swap (è più veloce gestire
I/O dall’area di swap che dal file system)
Si prendono le pagine dal file system, ma poi si scaricano nell’area
di swap
9
10
Creazione dei processi
Creazione dei processi
 Al momento della duplicazione, bisogna
 Un processo viene creato con una system call....????
 Usando opportunamente la paginazione, si accelera la
trovare una pagina libera
creazione
 Fork
Tipicamente si mantiene un pool di pagine libere
per questo scopo
Queste pagine sono assegnate con azzeramento
su richiesta, cioè la pagina viene rimepita di zeri
prima di essere assegnata
Crea un processo figlio, assegnando una copia dello spazio
d’indirizzi del genitore
Tipicamente, dopo la fork, il figlio esegue una exec, che
sovrascrive lo spazio appena copiato
 Per migliorare le prestazioni si usa la copiatura su
scrittura (copy-on-write)
Inizialmente il figlio condivide le pagine del padre (con la
paginazione condivisa, si realizza semplicemente)
Le pagine che potrebbero essere modificate dal figlio vengono
marcate come pagine da copiare in scrittura
Se il figlio scrive su una di queste pagine, allora il SO provvede a
farne una copia nello spazio d’indirizzi del figlio
11
2
12
Associazione alla memoria
Associazione in memoria
 Quando si effettua un accesso a un file su disco,




bisogna utilizzare chiamate di sistem (open, read,
write, close)
Per accelerare le operazioni di I/O, si considera
l’accesso al file come un ordinario accesso in
memoria (associazione dei file alla memoria)
L’accesso al file avviene tramite la normale
paginazione su richiesta, che determina
(inizialmente) una pagina mancante
A questo punto si carica una (o più) pagina del file
dal disco in memoria
Tutte le operazioni su file sono operazioni in
memoria
 Normalmente, le scritture del file in memoria
non corrispondono a scritture effettive del file
su disco
 Alla chiusura del file, bisogna riportare le
pagine dalla memoria sul disco
 In questo modo si può realizzare la
condivisione di un file
Ogni modifica apportata a una delle pagine del file
in memoria sarà immediatamente visibile a tutti i
processi che condividono quel file
Fig. 10.5
 La coordinazione dell’accesso ai dati condivisi
critici deve avvenire in mutua esclusione
13
Sostituzione delle pagine
 La paginazione su richiesta si basa sul principio che vengono caricate in
RAM solo alcune di tutte le pagine di cui il processo avrà bisogno
 In questo modo si può aumentare il grado di multiprogrammazione,
caricando in RAM alcune pagine di più processi
 Cosa accade se si verifica un page fault?
Il SO verifica che si tratta di una trap dovuta a pagina mancante (e non ad
accesso illegale)
Localizza su disco la pagina da caricare
Sceglie una pagina libera in RAM (dalla lista dei blocchi liberi)
Effettua il caricamento
 Ovviamente, mirando ad aumentare il grado di multiprogrammazione, e
dato che alcune delle pagine sono destinate anche all’I/O, accade che
la lista dei blocchi liberi risulti vuota (non ci sono pagine libere)
 Cosa si fa?
Si può terminare il processo a cui manca la pagina. NO!!!! La paginazione
su richiesta è un tentativo di migliorare le prestazioni. Inoltre la paginazione
deve essere completamente trasparente all’utente
Il SO può scaricare dalla memoria l’intero processo, liberando le sue pagine,
ma riducendo il grado di multiprogrammazione
Oppure sostituisce le pagine
14
Sostituzione pagine
 IDEA: se nessun blocco di memoria è
libero, se ne libera uno attualmente
inutilizzato
 Il blocco si libera scrivendo il suo
contenuto nell’area di swap, e
aggiornando la tabella delle pagine
 Il blocco libero si utilizza per caricare la
pagina che ha causato la trap
15
Sostituzione pagine
Sostituzione pagine
 Quindi, la procedura di servizio dell’eccezione
diventa
S’individua la locazione nel disco della pagina richiesta
Si cerca un blocco libero in memoria
 Se non ci sono blocchi liberi, sono necessari
due trasferimenti di pagine!!
 Per cercare di ridurre questo sovraccarico, si
utilizza il bit di modifica
 Se esiste, viene assegnato
 Altrimenti si seleziona una “pagina vittima” da scaricare
È associato a ogni pagina per determinare se è
stata modificata o meno
 Si scrive la pagina vittima su disco, e si modifica la tabella
delle pagine e la lista dei blocchi liberi
Si scrive la pagina richiesta nel blocco liberato, e si
modificano la tabella delle pagine e la lista dei blocchi
liberi
Si riprende il processo utente
17
3
16
 Per realizzare la paginazione su richiesta
bisogna avere
Algoritmo di assegnazione dei blocchi liberi
 Quanti blocchi assegnare a ogni processo?
Algoritmo di sostituzione dell pagine
18
Sostituzione pagine
Sostituzione FIFO
 Tipicamente un buon algoritmo di sostituzione
delle pagine minimizza la frequenza delle
assenze di pagine
 Un algoritmo si valuta generando una
successione di riferimenti alle pagine
 A ogni pagina si associa il tempo in cui quella
pagina è stata portata in memoria
 Si sostituisce la pagina presente in memoria da
Casuale
Analizzando un sistema reale
più tempo
 Con questa tecnica si possono avere milioni di indirizzi al
secondo
 Per ridurre la mole di dati da analizzare si nota che
 Interessa solo il numero di pagina per ogni accesso e non tutto
l’indirizzo
 Se una pagina è in memoria, tutti gli accessi a quella pagina non
causano fault, quindi la successione di riferimenti è più corta
della successione di indirizzi (pag. 343)
 Inoltre bisogna conoscere anche il numero di
blocchi di memoria
Non è necessario memorizzare il tempo. Infatti, è
sufficiente strutturare le pagine in memoria con una
coda FIFO
 Es. Fi. 10.9:
Successione riferimenti:
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
3 blocchi di memoria
19
Sostituzione FIFO
Sostituzione ottimale
 Non ha sempre buone prestazioni
Infatti, è possibile che una pagine lette
frequentemente vengano sostuituite e quindi
generino eccessivi page fault
Anomalia di Belady
# assenze di pagine
 Si indica con MIN o OPT l’algoritmo che
presenta la minima frequenza di assenza di
pagine e non presenta mai l’anomalia di Belady
 IDEA: si sostituisce la pagina che non si userà
per il periodo di tempo più lungo
 Es. Fig 10.11
 Difficile da realizzare, dato che richiede la
conoscenza futura della successione dei
riferimenti
# blocchi di memoria
 1,2,3,4,1,2,5,1,2,3,4,5
20
16
14
12
10
8
6
4
2
Analogia con quale altro algoritmo del SO????
Si utilizza per studi comparativi
1
2
3
4
5
6
7
21
Sostituzione LRU
Sostituzione LRU
 Cerca di approssimare l’algoritmo ottimo
 FIFO: si utilizza l’istante in cui la pagina
è stata caricata in memoria
 OPT: si utilizza l’istante in cui una pagina
è usata
 LRU: si utilizza come approssimazione di
un futuro vicino un passato recente, e si
sostituisce la pagina che non è stata
usata per il periodo più lungo (least
recently used—LRU)
23
4
22
 Associa ad ogni pagina l’istante in cui è
stata usata per l’ultima volta
 Per sostituire una pagina, l’algoritmo sceglie
quella che non è stata usata per il periodo
più lungo
 Costituisce l’ottimo tra gli algoritmi che
ricercano indietro nel tempo
Infatti, la frequenza di assenze di pagine per
l’algoritmo OPT su una sequenza S è uguale a
quella per LRU sull’inversa di S (e viceversa)
 Fig. 10.12
24
Sostituzione LRU
Sostituzione LRU—contatori
 È di difficile realizzazione
 Come realizzare un ordine per i blocchi di
 Ogni elemento della tabella delle pagine contiene un
campo momento d’uso
 Alla CPU si aggiunge un registro contatore che viene
memoria definito secondo il momento
dell’ultimo uso?
incrementato ad ogni riferimento in memoria
 Ogni volta che si fa riferimento a una pagina, si copia il
valore del registro nel campo momento d’uso nella sua
tabella delle pagine
Contatori
Pila
 Bisogna
fare una ricerca nella tabella delle pagine per trovare la pagina
LRU
Scrivere in memoria (nel campo momento d’uso) per ogni
accesso in memoria
 Possibilità di overflow del registro contatore
25
26
Sostituzione LRU
Sostituzione LRU—pila
 Presenza di un pila dei numeri delle pagine
 Ogni volta che si fa riferimento a una pagina, la si
estrae dalla pila e la si colloca in cima
in cima alla pila si trova la pagina usata più recentemente
in fondo, quella usata meno recentemente
 Alcuni elementi devono essere estratti dal centro
della pila
Realizzazione tramite lista doppiamente concatenata, con
un puntatore all’elemento in cima e uno a quello in fondo
Per estrarre una pagina dalla pila, nel caso peggiore, si
devono modificare pochi puntatori
Per una sostituzione non si devono fare ricerche
 LRU e OPT non presentano l’anomalia di Belady
Algoritmi a pila: classe di algoritmi che non la
presentano
Cioè, si dimostra che l’insieme delle pagine in memoria
per n blocchi è sempre un sottoinsieme dell’insieme
delle pagine che dovrebbero essere in memoria per n+1
blocchi
 Per realizzare LRU è necessario il supporto
dell’architettura
Aggiornamento contatore/pila per ogni accesso in
memoria
Non si può fare con interrupt (e procedure di servizio)!!!!
27
28
Con bit supplementari di riferimento
Approssimazione LRU
 Si registra il bit di riferimento associato a ogni pagina
 I bit registrati si tengono in una stringa di bit in una
 Poche architetture offrono supporto per la
 A intervalli regolari, un interrupt trasferisce il controllo al
tabella in memoria
SO, che scrive il bit di riferimento per ogni pagina nel bit
più significativo della stringa associata a quella pagina,
scartando il bit meno significativo (traslazione a destra)
 Se si usano stringhe di 8 bit,
realizzazione dell’LRU
 Quindi bisogna ricorrere a sue approssimazioni
 Un aiuto è dato dal bit di riferimento
È associato a ogni pagina (nella tabella delle pagine)
Inizialmente tutti i bit sono a 0
Viene impostato a 1 quando una pagina è riferita
(lettura/scrittura)
È possibile stabilire quali pagine sono state riferite o no
Chiaramente non è possibile conoscere l’ordine d’uso delle
pagine (necessario per LRU), ma consente di progettare
algoritmi che approssimano LRU
00000000 significa che la pagina non è riferita da 8 intervalli
11111111 significa che la pagina è stata riferita almeno una
volta in ognuno degli ultimi 8 intervalli
 In questo modo si può stabilire un ordinamento fra le
pagine
 Chiaramente le stringhe non sono uniche, e in caso di
conflitto (più pagine con associata la stringa minima)
Si scaricano tutte le pagine con stringa minima
Oppure in ordine FIFO
29
5
30
Seconda chance
Seconda chance
 Il numero di bit utilizzati per le stringhe dipende
dall’architettura
 Nel caso in cui è zero (cioè si usa il solo bit di riferimento)
algoritmo con seconda chance
 È un algoritmo di tipo FIFO
Si selezionano le pagine in ordine FIFO
Se il bit di riferimento è zero, la pagina si scarica
Se 1, le si da una seconda chance tenendola in memoria, azzerando
il bit di riferimento, e aggiornando il suo istante d’arrivo in memoria
al tempo attuale
 In questo modo, una pagina a cui si offre una seconda
chance non viene sostituita fino a quando????
Fino a che tutte le altre pagine non sono state scaricate o non è
stata offerta loro una seconda chance
 Se una pagina è usata spesso (il suo bit di riferimento è
 Un metodo per realizzare la seconda chance è
basato sull’uso di una coda circolare
Un puntatore indica la prima pagina da sostituire
Quando serve un blocco di memoria, si fa avanzare il
puntatore fino a una pagina con bit 0
Tutti i bit che esamina fino a quello su cui si ferma sono
posti a 0 (erano sicuramente a 1)
Trovata la pagina vittima, la si sostituisce e si inserisce la
nuova pagina nellaposizione corrispondente
Nel caso peggiore, cosa accade????
 la coda viene percorsa tutta, dando a tutte le pagine una
sempre 1), non viene mai scaricata
seconda chance
31
Seconda chance II
32
Sostituzione con conteggio
 Si migliora se si utilizza la coppia (bit di riferimento, bit
di modifica)
 Si utilizza un contatore del numero di riferimenti che sono
stati fatti a ciascuna pagina
(0,0)
 Due schemi
 non usata, non modificatamigliore da sostituire
Sosituzione delle pagine meno frequentemente usate (least
frequently used—LFU)
(0,1)
 non usata recentemente, ma modificataoccorre salvarla in
memoria
(1,0)
 usata recentemente, non modificata-->probabilmente sarà usata
di nuovo
(1,1)
 usata e modificataprobabilmente sarà usata di nuovo e dovrà
essere salvata su disco
 Si usa lo schema della coda circolare e si sostituisce la
pagina che si trova nella classe minima non vuota
 Occorre scandire la lista più volte per trovare la vittima
 Si sostituisce la pagina con il conteggio più basso
 Svantaggio: pagina usata molto all’inizio e poco dopo ha un
contatore alto e rimane in memoria
 Soluzione: traslazione a destra del contatore a intervalli regolari
Sostituzione delle pagine più frequentemente usate (most
frequentlu used—MFU)
 Si basa sull’osservazione che probabilmente la pagina con il contatore
più basso è stata appena inserita e quindi non è stata ancora usata
 Poco usati, perché onerosi da realizzare e non
approssimano bene OPT
33
Memorizzazione transitoria delle pagine
 Per migliorare le prestazioni
Il sistema conserva un gruppo di blocchi liberi
Quando si ha un fault, invece di attendere che venga selezionata la
pagina vittima, si carica subito la pagina in uno dei blocchi liberi del
gruppo
Quando poi la pagina vittima è selezionata, viene scaricata, e il suo
blocco aggiunto al gruppo dei blocchi liberi
 Si estende l’idea
Conservando un elenco delle pagine modificate
Quando il dispositivo di paginazione è inattivo, si sceglie una pagina
modificata, la si salva su disco (non la si scarica!!!!) e si reimposta il
suo bit di modifica
In questo modo si aumenta la probabilità che quando quella pagina
sarà sostituita non la si dovrà salvare su disco
 Ricordando quale pagina era contenuta in ogni blocco
libero, la pagina può continuare ad essere usata anche
dopo essere stata scaricata
34
Assegnazione blocchi memoria
 Come si assegnano i blocchi liberi ai
processi?
 Nel caso di un solo utente/processo, la
situazione è semplice
L’idea di fondo è di assegnare qualsiasi blocco
libero al processo utente
 Se si ha multiprogrammazione, le strategie
di assegnazione dei blocchi di memoria sono
soggette a vari vincoli
A ogni richiesta di pagina si deve controllare anche se si trova in
uno dei blocchi liberi
35
6
36
Assegnazione blocchi memoria
Algoritmi di assegnazione
 Non si possono assegnare più blocchi di memoria di quanti ne siano
disponibili (a meno di condivisione di pagine)
 Deve esistere un numero minimo di blocchi di memoria che si devono
assegnare
Se si ha page fault prima che l’esecuzione di un’istruzione è completa,
bisogna iniziarle da capo
Es.: se ho istruzioni di load, allora almeno due blocchi; se ho istruzioni di
load indirette, almeno 3 blocchi
Il numero minimo di blocchi da assegnare dipende dall’architettura
 PDP-11: l’istruzione MOV copre più di una parolasta in più di una pagina (a
cavallo di due pagine)
Riferimenti indiretti non possono essere illimitati: in questo caso si
potrebbero chiamare in causa tutte le pagine della memoria virtuale
 Rimedio: limitare il livello dei riferimenti indiretti (ad es., con max 16 livelli, il
numero minimo di pagine da assegnare sarebbe di 17)
 Il numero minimo di blocchi da assegnare dipende dall’architettura (set
di istruzioni), mentre il numero max dipende da....????
Memoria fisica disponibile!!!!
 Assegnazione uniforme: se ci sono m blocchi e n
processisi possono dare ad ogni processo m/n blocchi
Eventuali resti si possono assegnare al gruppo di blocchi liberi
 Assegnazione proporzionale: si riconosce che i processi
hanno bisogni diversila memoria disponibile si
assegna a ciascun processo in base alla sua dimensione
Sia si la dimensione della memoria virtuale di Pi
S=Σsi, e m numero di blocchi liberi
Al processo pi si assegnano ai=si/S x m blocchi
Chiaramente si sceglie ai in modo che la somma degli ai sia m,
e che ciascun ai sia un intero maggiore del numero di blocchi
minimo richiesto dall’architettura
37
38
Algoritmi di assegnazione
Algoritmi di assegnazione
 Gli algoritmi di assegnazione dei blocchi sono legati anche
a quelli di sostituzione delle pagine
 In entrambi gli schemi, il numero di
 Sostituzione globale: un processo può avere assegnato un
blocchi assegnati può variare a seconda
del grado di multiprogrammazione
 I processi a bassa priorità e quelli ad alta
priorità sono trattati allo stesso modo
 Per migliorare la situazione, si possono
assegnare i blocchi proporzionalmente
alla priorità piuttosto che alla dimensione
blocco che in quel momento è occupato da qualche altro
processo
Processi a alta priorità sottraggono blocchi a quelli a bassa priorità
Un processo non può controllare la propria frequenza di assenza
delle pagine
 Sostituzione locale: i blocchi a un certo processo vengono
assegnati solo dal suo insieme di blocchi
Il numero di blocchi assegnato a un processo non cambia
Non usa pagine che sono poco usate e assegnate ad altri processi
 La sostituzione globale è più produttiva ed è il metodo più
usato
39
40
Attività di paginazione degenere
Paginazione degenere
 Se un processo non dispone di un numero
 Esempio: un pò di processi caricati,
sufficiente di blocchi di memoria, si verificano
parecchie assenze di pagine. Ciò comporta:
sostituzione globale delle pagine
basso utilizzo della CPU
Il processo continua a subire assenze di pagine,
facendo sostituire pagine che saranno
immediatamente trattate come assenti e dovranno
essere riprese.
 Thrashing ≡ degenerazione dell’attività di
paginazione (si spende più tempo per la
paginazione che per l’esecuzione dei processi).
Processo richiede
più pagine
7
Pagine sottratte ad
altri processi
Page faults
Dispositivo di paginazione
Processi in coda di paginazione
Coda pronti si svuota
41
Page faults
SO aumenta il grado
di multiprogrammazione
Page faults
42
Attività di paginazione degenere
Località di riferimenti alla memoria
 Perché la paginazione funziona??
Modello di località
Un processo, durante la sua
esecuzione, si sposta di località in
località
Le località si possono sovrapporre
 Quindi si cerca di caricare in memoria
la località corrente di un processo
 Perché si verifica attività di paginazione degenere?
Σ dimensione della località > dimensione totale della memoria
 Soluzione: sostituzione locale  comunque, se un processo è in
attività degenere, passa lo stesso la maggiorparte del tempo in
coda di paginazione, aumentando i tempi di gestione della
stessa e rallentando gli altri processi
43
44
Modello dell’insieme di lavoro
Modello dell’insieme di lavoro
 Δ ≡ finestra dell’insieme di lavoro ≡ numero di riferimenti
alle pagine (esempio: 10.000 riferimenti)
 WSSi (dimensione dell’insieme di lavoro del processo Pi) =
numero totale delle pagine che il processo accede negli
ultimi Δ riferimenti (varia nel tempo)
se Δ è troppo piccolo, non include l’intera località.
se Δ è troppo grande, può sovrapporre più località.
se Δ = ∞ ⇒ l’insieme di lavoro coincide con l’insieme di pagine
cui il processo fa riferimento durante la sua esecuzione.
 D = Σ WSSi ≡richiesta totale dei blocchi di memoria
 Se D > m (numero totale blocchi liberi)  l’attività di
paginazione degenera (thrashing)
 Strategia: se D > m, il sistema operativo individua un
 Uso del working set: il SO assegna a ogni processo un
processo da sospendere.
 NOTA: ogni processo usa attivamente le pagine nel
proprio working set
45
numero di pagine pari alla dimensione del suo insieme di
lavoro
 Se la somma degli insiemi di lavoro supera il numero di
blocchi disponibili  si sospende un processo
 La finestra dell’insieme di lavoro è dinamicadifficile
tener traccia delle pagine che sono in un WSS
46
Frequenza delle assenze di pagine
frequenza delle assenze di p agine
Modello dell’insieme di lavoro
 Il modello dell’insieme di lavoro si può approssimare
con un segnale d’interruzione del temporizzatore a
intervalli fissi e con un bit di riferimento
 Esempio: Δ = 10.000
segnale d’interruzione dal temporizzatore ogni 5000 riferimenti
si mantengono in memoria 2 bit per ciascuna pagina
quando si verifica un segnale d’interruzione, i valori dei bit di
riferimento di ciascuna pagina vengono copiati e poi azzerati
se uno dei bit in memoria = 1 ⇒ la pagina è nell’insieme di
lavoro
 Perché questo schema non è del tutto preciso?
 Per migliorarlo = 10 bit e un’interruzione ogni 1000
47
8
limite inferiore
si riduce il numero
di b locchi di memoria
numero dei b locchi di memoria


riferimenti.
si aumenta il numero
di b locchi di memoria
limite sup eriore
Un’altra tecnica per controllare la degenerazione è quello della frequenza delle assenze
di pagine
Stabilisce un tasso “accettabile” di assenza delle pagine.
Se la frequenza delle assenze di pagine è molto bassa, il processo potrebbe disporre di troppi
blocchi di memoria.
Se la frequenza delle assenze di pagine è eccessiva, significa che il processo necessita di più
blocchi di memoria.
48
Altre considerazioni
Altre considerazioni (cont.)
 Prepaginazione
Portare in memoria in blocco l’insieme di lavoro di un processo
(quando inizia o viene riattivato in seguito a sospensione)
Quando un processo viene sospeso, bisogna salvare il suo WWS
È vantaggiosa se costa meno della gestione dei page faults
 Dimensione delle pagine
 Portata del TLB (TLB reach): quantità di
memoria accessibile dal TLB (translation lookaside buffer, memoria associativa)
Frammentazione (per ridurla, scegliamo pagine ....????)
 piccole
Dimensione della tabella delle pagine (con piccole pagine si hanno
tabelle ....????)
 grandi
Tempo richiesto per leggere o scrivere una pagina (per ridurre i
tempi di I/O occorre usare pagine ....????)
 grandi
Località (vengono migliorate le caratteristiche di località usando
pagine ....????)
 piccole
 Portata del TLB = (numero di elementi) X
(dimensione delle pagine)
 Idealmente, il TLB dovrebbe contenere
l’insieme di lavoro di un processo; altrimenti vi
sarà un elevato grado di assenza delle pagine
49
50
Altre considerazioni (cont.)
Aumentare la portata del TLB
 Le prestazioni si possono migliorare anche a livello di
programmazione (anche se la paginazione è del tutto
trasparente)
 Struttura del programma (pagina di 1024b, matrice
memorizzata per righe)
 Aumentare la dimensione delle pagine.
Potrebbe portare a una maggiore
frammentazione della memoria relativamente
alle applicazioni che non richiedono pagine così
grandi
 Impiegare diverse dimensioni delle
pagine. Ciò consente alle applicazioni che
richiedono dimensioni di pagina maggiori di
utilizzarle senza che si verifichi un aumento della
frammentazione
La gestione di pagine diverse deve essere fatta dal
SO (uno dei campi del TLB deve indicare la
dimensione fisica della pagina riferita)
int A[][] = new int[1024][1024];
Ciascuna riga è memorizzata in una pagina
Programma 1
for (j = 0; j < A.length; j++)
for (i = 0; i < A.length; i++)
A[i,j] = 0;
Quanti page fault abbiamo?
1024 x 1024 assenze di pagine
Programma 2
for (i = 0; i < A.length; i++)
for (j = 0; j < A.length; j++)
A[i,j] = 0;
Quanti page fault abbiamo?
1024 assenze di pagine
51
Altre considerazioni (cont.)
 Vincolo di I/O. Talvolta occorre permettere che alcune pagine si possano
vincolare alla memoria
 Prendiamo in considerazione l’I/O.
52
Esempi tra i sistemi operativi
 Windows NT
Un processo richiede I/O
Poi viene sospeso, e la pagina coinvolta nell’I/O sostituita
Quando l’I/O è completato, la pagina interessata non è più in memoria
 Soluzioni
Usare un’area di sistema per i trasferimenti tra unità I/O e memoria (in questo
modo i blocchi in memoria che devono ricevere i dati sono sicuramente presenti)
Vincolare le pagine in memoria (non possono essere selezionate per la sostituzione)
 Solaris 2
 Bit di vincolo associato alla pagina
 Completato l’I/O, si rimuove il vincolo
 Le pagine del nucleo (o di una sua parte) sono vincolate
 NOTA: Le elaborazioni in tempo reale sono poco adatte all’uso di memoria
virtuale
53
9
54
Windows NT
Solaris 2
 Usa la paginazione su richiesta per gruppi di pagine (demand paging with
clustering), richiamando quindi non solo la pagina richiesta ma anche quelle
a essa adiacenti.
Alla sua creazione, un processo riceve i valori del minimo insieme di lavoro e
del massimo insieme di lavoro.
Il minimo insieme di lavoro (working set minimum) è il minimo numero di
pagine caricate nella memoria di un processo che il sistema garantisce di
assegnare.
Se la memoria è sufficiente, il sistema potrebbe assegnare un numero di
pagine pari al suo massimo insieme di lavoro (working set maximum).
Viene mantenuta una lista delle pagine fisiche libere, con associato un valore
soglia che indica se è disponibile una quantità sufficiente di memoria libera
Se si ha un fault, e il processo è al suo massimo, si procede per sostituzione
locale
Nel caso in cui la quantità di memoria libera scenda sotto la soglia, il gestore
della memoria virtuale usa un metodo noto come regolazione automatica
dell’insieme di lavoro (automatic working set trimming) per riportare il
valore sopra la soglia.
In pratica, se a un processo sono state assegnate più pagine del suo minimo
insieme di lavoro, il gestore della memoria virtuale rimuove pagine fino a
raggiungere quel valore.







 Mantiene una lista delle pagine libere da assegnare ai processi che
ne abbiano bisogno.
 Lotsfree: parametro associato alla lista delle pagine libere;
rappresenta una soglia per l’inizio della paginazione (1/64
memoria fisica)
4 volte al secondo si verifica se la memoria libera è < lotsfree. In
questo caso si avvia il processo di pageout
Pageout: scandisce le pagine usando un algoritmo simile alla
seconda chance
Scanrate è la frequenza di scansione delle pagine ed è compresa
tra i valori slowscan e fastscan (secondo la quantità di memoria
disponibile)
Pageout è eseguito più frequentemente a seconda del quantitativo
di memoria libera disponibile.




55
56
Scansione delle pagine nel
Solaris 2
frequenz
di
a
scansione
8192
fastscan
Per oggi basta!!!!
100
slowscan
minfree
desfree
memoria libera
lotsfree
57
Gestione del Page Fault (1)
Gestione del Page Fault (2)
1. Una eccezione provoca l’invocazione del nucleo,
salvando almeno il PC sullo stack (hw)
2. Salvataggio registri generali e altri reg. interni
(assembler)
3. Il sistema determina la pagina logica richiesta

58
6. Il sistema richiede la lettura della pagina logica dal
disco

registro speciale o software
4. Il sistema verifica la validità dell’indirizzo, e ricerca
una pagina libera o, in alternativa, una pagina
vittima
5. Se la pagina vittima selezionata è stata modificata
(dirty), viene scritta su disco
59

10
(schedulatore) va in esecuzione un altro processo pronto
7. Quando la lettura è completata (interruzione), si
aggiorna la tabella delle pagine
8. Viene ripristinata l’istruzione che ha causato il page
fault
9. Il processo che ha causato il page fault viene
schedulato
10. Ripristino dei registri, ritorno in modo utente
(assembler)
60
Il processo riprende l’elaborazione come se il page fault
non fosse avvenuto
Ripristino dell’Istruzione
Vincolare le pagine in Memoria
 Memoria virtuale e I/O interagiscono
#
occasionalmente
 Un processo richiede una lettura da un dispositivo su
un buffer
 Il fault si può verificare in una dei tre accessi
 Problemi se l’istruzione modifica i registri
autoincremento, autodecremento
 Necessità di vincolare alcune pagine
Le pagine vincolate non possono essere scaricate dalla
memoria (pinning)
 Alcune macchine hanno dei registri interni
che mantengono infomazioni di ripristino
(backup)
Mentre attende per l’I/O passa in esecuzione un altro
processo
Il processo in esecuzione causa un page fault
La pagina contenente il buffer del primo processo può
essere selezionata per essere scaricata dalla memoria
61
Backing Store: area di swap
62
Separazione tra Politiche e Meccanismi
Process
address
space
(a) Paginazione con un’area di swap statica
indirizzo iniziale su disco in TP
(b) Paginazione con area di swap dinamica
63
Vincolo I/O
65
11
Gestione di un page fault con un pager
esterno
64
(ispirata al sistema Mach)

Documenti analoghi