48
1.8.1 1.8: Gestione della Memoria Classificazione Circuito MMU Allocazione di memoria primaria Swapping Paginazione Condivisione di memoria Memoria virtuale e paginazione su richiesta Algoritmi di sostituzione di pagine per il page-out Algoritmi di allocazione di frame per il page-in Thrashing 

1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.1

1.8: Gestione della Memoria● Classificazione

● Circuito MMU

● Allocazione di memoria primaria

● Swapping

● Paginazione

● Condivisione di memoria

● Memoria virtuale e paginazione su richiesta

● Algoritmi di sostituzione di pagine per il page­out

● Algoritmi di allocazione di frame per il page­in

● Thrashing 

Page 2: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.2

Classificazione delle Memorie● Classificazione:

– Memoria primaria (core): spazio nella RAM ­  volatile, veloce, indirizzabile direttamente byte a byte

– Memoria secondaria: spazio su dischi fissi ­  non volatile, lento, indirizzabile a blocchi

– Memoria terziaria: spazio su supporti amovibili ­  floppy disk, CDROM, nastri magnetici, etc. ­  molto lenta, ma con volumi sostituibili e trasportabili.

● Tecniche di gestione memoria primaria: abbastanza diverse da quelle di gestione di memoria secondaria e terziaria

– Meccanismi fisici differenti

– Gestione RAM più critica di gestione disco.

● Distinzione: richieste di RAM da parte del Kernel sono più prioritarie di quelle da parte dei processi  in User mode.

● N.B. ­  durante il tempo di vita di un processo, la memoria primaria, come qualunque altra risorsa, deve essere allocata e deallocata al/dal processo.

Page 3: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.3

Memory­Management Unit (MMU)● Circuito di paginazione (MMU ­  Memory Management Unit): dispositivo 

hardware che mappa indirizzi logici (detti anche indirizzi virtuali) in indirizzi fisici.

● MMU: può essere un circuito fisico indipendente, o essere integrato nel chip della CPU.

● Programma: gestisce sempre indirizzi logici; non vede mai i veri indirizzi fisici.

● Nello schema più semplice, il valore di un registro base, o registro di rilocazione (relocation register) è aggiunto ad ogni indirizzo generato da un processo utente.

Page 4: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.4

Memory­Management Unit (Cont.)● La MMU effettua i dovuti controlli sulla validità dell'indirizzo generato (cioè se 

proviene da un indirizzo logico non appartenente allo spazio degli indirizzi del processo), e genera un Kernel trap se l'indirizzo è invalido.

● Ogni volta che la CPU è data a un nuovo processo (context switch), i registri della MMU sono impostati a valori specifici per il nuovo processo, per implementare la giusta corrispondenza tra  indirizzi logici e fisici per quel dato processo.

CPU MMU Legale? RAM

Ind. Logico Ind. Fisico

No

Trap

Registro di rilocazioneRegistro limite

Page 5: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.5

Allocazione di Memoria● Schema di allocazione RAM a partizioni multiple:

– Utilizzato soprattutto nei S.O. batch ● era utilizzato anche per sistemi time sharing, ma oggi è caduto in disuso 

(v. oltre, paginazione).– Una partizione di memoria contigua allocata per ogni processo, oppure una 

per ogni regione● MMU: deve poter memorizzare registro base e registro limite per ogni 

processo, o per ogni regione.– Buchi ­  blocchi di memoria disponibile, di varie dimensioni, sparsi nella 

RAM.

– Quando un processo è caricato in RAM,  ad ogni regione viene allocata una partizione di memoria da un buco abbastanza grande da contenerla.

– Il Kernel mantiene descrittori di risorse con informazioni su● Partizioni allocate (a quale processo)● Partizioni libere

Page 6: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.6

Allocazione di Memoria (Cont.)● Evoluzione dell'occupazione di memoria:

– Fenomeno di frammentazione progressiva.

OS

process 5

process 8

process 2

OS

process 5

process 2

OS

process 5

process 2

OS

process 5

process 9

process 2

process 9

process 10

OS

process 9

process 2

process 10

Page 7: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.7

Allocazione di Memoria (Cont.)● Problema dell'allocazione dinamica di memoria ­  come soddisfare una 

richiesta di N blocchi di memoria data una lista di buchi liberi:

– First­fit ­  si alloca il primo buco abbastanza grande● Algoritmo semplice, veloce

– Best­fit ­  si alloca il buco più piccolo tra quelli abbastanza grandi● Occorre ricercare attraverso tutta la lista, a meno di non mantenerla 

ordinata per grandezza dei buchi.● Produce il buco rimanente più piccolo possibile.

– Worst­fit ­  si alloca il buco più grande● Occorre anche qui ricercare attraverso tutta la lista.● Produce il buco rimanente più grande possibile.

First­fit e best­fit hanno migliori prestazioni di worst­fit, in termini di velocità e utilizzazione dello spazio RAM; first­fit è più veloce.

Page 8: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.8

Allocazione di Memoria (Cont.)● Frammentazione:

– Frammentazione esterna ­  esiste spazio sufficiente per soddisfare una richiesta, ma questo non è contiguo.

– Frammentazione interna ­  limitazione hardware delle MMU, che gestiscono la memoria in blocchi (da 512 byte a 16 Kbyte; tipicamente 4 Kbyte). Pertanto la memoria allocata può essere superiore a quella richiesta  zona di memoria interna a una partizione, ma non utilizzata.

● Frammentazione esterna: può essere ridotta mediante compattamento della memoria (riallocare i contenuti della memoria in modo da riassemblare tutti i buchi in un unico blocco compatto)

– Operazione problematica da gestire, e time­consuming.

Page 9: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.9

Swapping● Memoria primaria: dimensione molto limitata rispetto alla memoria 

secondaria  utilizzare lo spazio disco come estensione virtuale della RAM.

● Due tecniche fondamentali:– Swapping ­  accoppiato con lo schema di allocazione RAM a 

partizioni multiple; oggi relativamente in disuso nei sistemi time/sharing

– Paging, o paginazione ­  tecnica combinata di allocazione RAM e di estensione virtuale della RAM su disco.

● Swapping: un processo (o una sua regione) può essere riversato (swappato) temporaneamente dalla memoria primaria a una zona di swap (swap­out), e poi riportata in memoria per continuarne l'esecuzione (swap­in). Ciò permette l'esecuzione concorrente di più processi di quanti non ne possano entrare fisicamente in RAM.– To swap = barattare, scambiare

● Zona di swap (o swap area, swap space): disco veloce (o partizione), grande abbastanza per contenere copie di tutte le immagini di memoria di tutti i processi attivi. 

Page 10: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.10

Swapping (Cont.)● Unix: il Kernel riversa fuori dapprima i processi in stato Waiting, poi 

quelli in stato Ready, tenendo conto della priorità: processi a bassa priorità vanno in zona di swap (swap­out), così che un processo più prioritario possa essere swappato in memoria (swap­in) ed eseguito.

● Problema di I/O con lo swapping: potrebbe esserci un trasferimento DMA mentre un processo è in fase di swap­out. Soluzioni:– Bloccare in memoria il processo mentre è implicato in operazioni di I/O

– Fare I/O solo da e verso buffer del S.O. (Kernel cache), accoppiati con un trasferimento memory­to­memory tra buffer del processo utente e buffer del Kernel.

● La maggior parte del tempo di swapping/paging è tempo di trasferimento dati; il tempo totale è direttamente proporzionale alla quantità di memoria swappata.

Page 11: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.11

Swapping (Cont.)● Il tempo di swapping può accrescere pesantemente il tempo di context­

switch:

– La ready queue comprende tutti i processi in stato Ready, in memoria primaria o in zona di swap

– Quando lo scheduler dà la CPU a un processo swapped­out,● Cerca di caricarlo in memoria (swap­in)● Se la RAM non basta, deve prima fare lo swap­out di altri processi● Poi effettua il normale context­switch, caricando i registri MMU etc.

● Per limitare l'overhead, lo spazio di swap (per swapping o per paginazione) è gestito con

– Dischi veloci

– Raw mode (trasferimenti senza caching intermedio del file­system)

– Immagini dei programmi (o delle regioni) memorizzate in modo contiguo, così da poter essere manipolate (per swap­in o swap­out) con un'unica operazione di I/O

– Alla partenza del programma, l'immagine competa è dapprima copiata nella zona di swap, e poi da lì in memoria primaria.

Page 12: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.12

Swapping (Cont.)

Kernel

P0

P1

Memoria primaria

Zona di swap

swap­out 

swap­in 

Page 13: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.13

Swapping (Cont.)

Kernel running User running

Zombie

Asleep in core Ready to run in core Preempted

Asleep swapped Ready to run swapped Created

CPU

RAM

DISCO

User running

Intr, Intr.ret. Syscall, Intr.

Return

Return to user

Exit

SleepReschedule Preempt

Wakeup

Wakeup

Swap out Swap out Swap in Core OK

No coreFork

Page 14: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.14

Paginazione● Paginazione (paging): tecnica alternativa allo swapping, granularità 

molto migliore: permette di riversare singole frame di memoria da/a zona di swap (e non più intere regioni).

● Memoria fisica: divisa in frame = blocchi di dimensione fissa; dimensione: potenza di 2, da 512 byte a 16 KByte; tipicamente 4 Kbyte.

● Pagina = informazione contenuta in una frame; può essere vista anche come un blocco di memoria logica (appartenente allo spazio di indirizzi di un processo).

● Risolve il problema della frammentazione esterna: lo spazio degli indirizzi di un processo non deve più essere fisicamente contiguo regione per regione, ma solo pagina per pagina.

● Rimane la frammentazione interna, dovuta alla dimensione fissa delle frame.

Page 15: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.15

Paginazione (Cont.)● Il Kernel tiene traccia di tutte le frame (quelle allocate ai processi e quelle 

libere)

● Per avviare un processo di dimensione N pagine, seleziona N frame libere e carica il programma, stabilendo corrispondenza tra pagine e frame in una Tavola delle pagine (Page Table) ­­  N.B. una Page Table per processo.

● La Page Table permette di traslare indirizzi logici in indirizzi fisici.

● N.B. ­  in realtà non è necessario avere N frame disponibili: la memoria fisica viene allocata solo quando necessario, pagina per pagina (v. oltre, tecnica della memoria virtuale).

Page 16: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.16

Traslazione degli Indirizzi● L'indirizzo logico generato dalla CPU è diviso in:

– Numero di pagina (page number) p ­  usato come indice nella Page Table, che contiene l'indirizzo di base di ogni pagina (la frame corrispondente) nella memoria fisica.

– Offset di pagina (page offset) d ­  combinato con l'indirizzo di base, individua  l'indirizzo fisico di memoria che è inviato sul bus per indirizzare la RAM.

● Il Kernel mantiene una Tavola delle frame (Frame Table), con informazioni su ciascuna frame: occupata/allocata, a quale processo e a quale pagina.

Page 17: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.17

Traslazione degli Indirizzi (Cont.)● Architettura del sistema di traslazione indirizzi:

es. p = 20 bit, d = 12 bit (4 Kbyte)

Page 18: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.18

Paginazione Multilivello● N.B. ­ molte macchine a 32 o 64 bit usano uno schema a 2 (o più) livelli; 

es. macchine Intel (386 e successive):

10 10 12

Indirizzo fisico 

Indirizzo logico 

Page Directory 

Page Table 

Frame ● N.B. ­ Per ogni processo: una Page Directory, più Page Table (fino a 210 

= 1024 Page Table).

Page 19: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.19

Esempio di Paginazione

Page 20: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.20

Implementazione della Page Table● La Page Table non può essere memorizzata nei registri MMU; è posta 

nella memoria primaria.

●  Page­table base register (PTBR) punta alla page table.

●  Page­table length register (PTLR) indica la dimensione della page table.

● PTBR and PTLR fanno parte del contesto di processo.● In questo modo ogni accesso a un dato (o istruzione) in memoria 

richiede due accessi alla RAM: uno per la page table e uno per il dato.● Il problema viene risolto con l'uso di un'apposita cache hardware a 

ricerca veloce, chiamata registri associativi (associative registers) o translation look­aside buffers (TLB).

● Tipicamente, il numero di voci in una TLB varia tra 8 e 2048.

Page 21: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.21

TLB● Registri associativi ­  ricerca parallela

● Traslazione di un indirizzo (P, F)– Se il numero di pagina P è in un registro associativo, preleva il numero di 

frame F

– Altrimenti preleva F dalla page table in memoria, e copia l'informazione nella TLB.

● La TLB deve essere azzerata ad ogni context switch (dato che la Page Table cambia).

Page # Frame #P ­ F ­ 

Page 22: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.22

Prestazioni della Paginazione● Tempo di accesso alla memoria = T  (p.es. 100 nsec)

● TLB = ε (p.es. 20 nsec)

● Hit ratio = α (p.es. 90%) (percentuale di volte che un numero di pagina è trovato nei registri associativi)

● Tempo di accesso effettivo per la paginazione:

EAT = (T + ε) α + (2T + ε)(1 ­ α) = T(2 ­ α) + ε● Con i valori considerati, EAT = 130 nsec ­  un aumento del 30%.● Lo hit ratio dipende dal numero di registri nella TLB; la CPU i80486 ha 

32 registri associativi, e uno hit ratio tipico del 98%.

Page 23: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.23

Protezione● La protezione della memoria, nella paginazione, è implementata associando 

dei bit di controllo ad ogni frame; sono memorizzati nelle voci della page table, e usati dall'hardware dell'MMU.

● Es.: voce di una Page Table in Linux per i80x86 ­  comprende 32 bit:– 20 sono l'indirizzo di frame (frame = 4 Kbyte = 212 byte, quindi nell'indirizzo i 12 

bit meno significativi non contano)

– 12 contengono diversi flag:● Flag Present: vale 0 se la pagina non è attualmente in RAM; in tal caso i 20 

bit contengono l'indirizzo dell'immagine della pagina su disco.● Flag User/Supervisor: 0 se la pagina può essere indirizzata solo se la CPU è 

in System mode● Flag Read, Write, Execute: tre flag ­  valgono 1 se la CPU è autorizzata 

rispettivamente a leggere dati, scrivere dati, prelevare istruzioni dalla pagina.– Se la voce ha tutti i 32 bit a 0, l'indirizzo logico corrispondente non è valido (non 

appartiene allo spazio degli indirizzi del processo).● In altri S.O., in generale, si utilizza un flag Validity (flag di validità).

● Qualunque accesso illegale causa un Kernel trap.

Page 24: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.24

Condivisione di pagine● Meccanismo di condivisione di memoria: possibile sia con lo swapping 

che con la paginazione.

● Codice condiviso (shared code)

– Un'unica copia in memoria della regione codice (read­only), condivisa tra i processi che eseguono lo stesso programma o le stesse librerie dinamiche.

– Le regioni di dati (read/write) sono private per ogni processo.

Page 25: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.25

Condivisione di pagine (Cont.)

Page 26: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.26

Memoria Virtuale● Memoria virtuale ­  estensione della tecnica della paginazione

– Paginazione:  tecnica di allocazione della RAM, alternativa all'allocazione a partizioni multiple, che permette di evitare la frammentazione esterna

– Paginazione con memoria virtuale: tecnica di estensione virtuale della RAM su disco, alternativa allo swapping.

● Le pagine vengono riversate da/a disco individualmente.– N.B. ­ terminologia: page­in = swap­in; page­out = swap­out (termini usati in 

modo equivalente); lo spazio su disco continua a chiamarsi zona di swap.● Fornisce separazione totale della memoria logica dalla memoria fisica:

– Solo una parte (alla volta) di un programma deve essere in memoria per l'esecuzione

– Pertanto lo spazio degli indirizzi logici (dimensione di un programma) può essere molto maggiore dello spazio fisico di RAM disponibile.

● Linux fornisce, per ogni processo, uno spazio di indirizzi logici da 0 a 0xC000 0000 (3 Gbyte), indipendentemente dalla quantità di memoria fisica disponibile.

● Implementata normalmente con la paginazione su richiesta.

Page 27: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.27

Paginazione su Richiesta● Paginazione su richiesta (demand paging): strategia di implementazione 

della memoria virtuale.

● Il paginatore è detto paginatore pigro (lazy pager): riversa una pagina in memoria RAM solo quando è necessario (ritarda al massimo il riversamento).

● Accesso a un indirizzo logico  indirizzamento:– Indirizzo illegale  abort

– Indirizzo valido, ma non in memoria ⇒ caricamento in memoria (page­in)

● Due strategie:– Avviare un processo con un quantitativo minimo di pagine in RAM

– Avviarlo senza nessuna pagina  paginazione su richiesta pura (pure demand paging)

● Vantaggi:– Meno I/O

– Meno memoria necessaria

– Più programmi eseguibili insieme (maggior grado di multiprogrammazione).

Page 28: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.28

Paginazione a Richiesta (Cont.)● Inizialmente (avvio di un programma in pure demand paging):

– Viene allocata la Page Table (oppure la Page Directory e le Page Table) del processo

– In tutte le voci corrispondenti allo spazio di indirizzamento logico, il flag Validity viene posizionato a 1 (pagina valida); in tutte le altre voci, viene posizionato a 0 (pagina non valida)

– In tutte le voci indistintamente, il flag Present viene posizionato a 0 (pagina non in memoria RAM); i bit di indirizzo di pagina vengono impostati con l'indirizzo dell'immagine della pagina stessa nella zona di swap.

● N.B. ­  ogni voce della Page Table comprende, oltre ai bit di protezione, un indirizzo che rappresenta:

– L'indirizzo della frame in memoria primaria, se il flag Present vale 1;– L'indirizzo del blocco disco nella zona di swap, se il flag Present vale 0.

Page 29: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.29

Paginazione a Richiesta (Cont.)● Scenario di un Page Fault:

– Indirizzamento  riferimento a una pagina

– Primo riferimento alla pagina (flag Present = 0)  interrupt (provocato dall'hardware della MMU)  Page Fault

– Flag Validity = 0  Kernel abortisce il processo (salvo se regione stack)

– Flag Validity = 1 (pagina valida, ma non in memoria)  Kernel carica la pagina, e fa poi proseguire il processo:

● Prendi una frame libera; altrimenti liberane una (v. oltre)● Carica la pagina dalla zona di swap nella frame (durante l'I/O, il 

processo va a dormire)● Aggiorna la voce della Page Table: flag Present posizionato a 1, 

indirizzo di pagina impostato all'indirizzo della frame in RAM● Riavvia l'istruzione (quella interrotta dall'interrupt)

● Il processo può ora accedere alla pagina, come se questa fosse stata da sempre in memoria (il contesto è stato salvato, dunque il processo riprende nello stesso stato in cui era al momento del Page Fault).

Page 30: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.30

Paginazione a Richiesta (Cont.)● Unix/Linux: lazy fork, lazy exec ­  le pagine con dati e codice sono 

caricate in memoria se e quando necessario (maggior efficienza nell'uso della memoria); un programma parte senza nessuna pagina caricata.

– fork: occorrono nuove regioni per i dati

– exec: occorrono nuove regioni sia per codice che per dati.

● Se non ci sono frame libere, occorre liberarne una: algoritmo di sostituzione (come per qualunque schema di caching)– trova una pagina in RAM attualmente non usata; se è stata modificata, 

riversala su disco (page­out)● Se non è stata modificata, la copia su disco è ancora valida

● Aspetti rilevanti:

– Scelta dell'algoritmo di sostituzione

– Metrica prestazionale: occorre un algoritmo che produca il minimo numero di page fault.

– N.B. ­  alcune pagine possono essere riversate dentro e fuori dalla RAM più volte nel corso dell'esecuzione di un programma.

Page 31: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.31

Prestazioni● Tasso di Page Fault  p :   0 ≤ p ≤ 1

– se p  = 0, non ci sono page faults – se p  = 1, c'è un page fault ad ogni riferimento di memoria

●  Tempo di accesso effettivo alla memoria per la paginazione su richiesta:EAT =   (1 ­  p) × {tempo di accesso alla memoria} + p × {tempo di page fault} = 

(1 ­  p) × T ++ p × (overhead di Page Fault       [+ tempo di page­out ]       + tempo di page­in       + overhead di riavvio processo)

● I due overhead = esecuzione codice software; varie centinaia di istruzioni, ciascuna tra 1 e 100 sec; in tutto, approx. 1 msec.

Page 32: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.32

Prestazioni (Cont.)● Tempo di accesso alla memoria: T = 100 nsec● Page­out: si può ipotizzare che il 50% delle volte la pagina da sostituire 

sia stata modificata, e quindi necessiti di page­out.● Tempo di page fault (senza tener conto dell'eventuale page­out) = 25 

msec (25 × 106 nsec)– Tempo page­in per un disco tipico: seek time 15 msec, latenza 

rotazione 8 msec, tempo di trasferimento 1 msec ⇒ 24 msec.– Tempo esecuzione codice software: 1 msec.

Page 33: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.33

Prestazioni (Cont.)● Tempo di accesso effettivo:

EAT = (1 ­  p) × 100 nsec + p × (25 msec) = 100 × (1 ­  p) + 25 000 000 × p= 100 × (1 ­  p) + 25 ⋅ 106 × p= 100 + 24 999 900 × p≃ 100 + 25 ⋅ 106 × p

● È praticamente proporzionale a p.

● È essenziale mantenere al minimo il tasso di page­fault:– Es.:  p = 10­3  ⇒ EAT = 25 sec  (rallentamento di un fattore 250!)

● Per avere un rallentamento non superiore al 15% (115 nsec):115 ≥ 100 + 25 ⋅ 106 × p 

p  ≤ 15 / ( 25 ⋅ 106 )

p  ≤ 6 ⋅ 10­7  = 1 / 1 666 666– Occorre avere meno di un page fault ogni 1 666 666 accessi alla 

memoria.

Page 34: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.34

Ottimizzazione delle Prestazioni● Alcune ottimizzazioni possibili:

– All'avvio del programma, tutta la sua immagine di memoria è copiata nella zona di swap, e poi da lì riversata in memoria RAM quando necessario.

– Pagine read­only sono riversate su richiesta a partire dal file system, anziché dalla zona di swap.

– BSD Unix: le pagine sono riversate su richiesta:● La prima volta dal file system● Poi sono paginate a/da la zona di swap.

Page 35: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.35

Ottimizzazione delle Prestazioni (Cont.)● Limitare il trasferimento di pagine (page­out): uso di un flag nella Page 

Table, il dirty bit ­  viene alzato quando la pagina è modificata; solo le pagine modificate vengono riversate su disco (swap­out).

● Copia su scrittura (copy­on­write): in Unix, regioni di dati private vengono mantenute condivise tra processi, fintanto che rimangono uguali– Dopo una fork(), i processi padre e figlio condividono anche le pagine delle 

regioni di dati; queste vengono marcate con un flag apposito nella voce della Page Table, Copy­on­Write

– La MMU è posizionata in modo da generare un trap di page fault ad ogni tentativo di scrittura: il flag Read è alzato, ma il flag Write è abbassato (la pagina è read­only)

– Alla prima scrittura sulla pagina, questa viene duplicata e quindi separata tra padre e figlio; il flag Write è alzato (ora la pagina è read­write), il flag Copy­on­Write è abbassato.

Page 36: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.36

Sostituzione di Pagine● Paginazione su richiesta: due algoritmi fondamentali, entrambi nella 

routine di servizio di page fault

– Sostituzione di pagine (page­out)

– Allocazione di frame (page­in)

● Nella memoria virtuale, è come se i processi attivi lavorassero tutti con le immagini su disco (in zona di swap), col supporto della RAM come cache del disco. Lo spazio in zona di swap è sempre molto maggiore della RAM.

● In tal modo più programmi sono eseguibili insieme (maggior grado di multiprogrammazione) ⇒  la memoria RAM è sovrallocata.

Page 37: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.37

Sostituzione di Pagine (Cont.)● Problema della sostituzione di pagine: quali pagine sottoporre a page­

out per ottenere il più basso tasso di page­fault possibile.● Valutazione degli algoritmi: si considera una sequenza di riferimenti a 

pagine di un dato processo, presa come riferimento, e si calcola il numero di page fault.

Sequenza: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5.

Page 38: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.38

Algoritmo FIFO● Algoritmo FIFO (First­in, First­out): si associa ad ogni pagina un campo 

col tempo di ultimo accesso; sostituire sempre la pagina più vecchia.● Sequenza: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5.● Calcolo dei page fault con 3 frame a disposizione (per processo) in 

memoria RAM: 1

2

3

1

2

3

4

1

2

5

3

4

9 page fault

● Calcolo con 4 frame per processo: 1

2

3

1

2

3

5

1

2

4

5 10 page fault

44 3

FIFO: Anomalia di Belady: più frame non implica meno page fault.

Page 39: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.39

Algoritmo OPT● Algoritmo OPT (Ottimale): sostituire la pagina che non sarà usata per il 

più lungo periodo di tempo.● Esempio con 4 frame (sequenza 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5):

 

● L'algoritmo è ottimale (fornisce il minimo numero di page fault per una data sequenza).

● Unico problema (identico al caso dell'algoritmo SJF per lo scheduling CPU): occorre conoscere la sequenza di riferimenti in anticipo.

● Usato come riferimento, per valutare/comparare algoritmi.

1

2

3

4

6 page fault

4 5

Page 40: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.40

Algoritmo LRU● Possiamo approssimare l'algoritmo OPT: sostituire la pagina che non è 

stata usata per il più lungo periodo di tempo (approssimare il futuro col passato recente) ­  Algoritmo LRU (Least Recently Used).

● Esempio con 4 frame (sequenza  1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5):

1

2

3

5

4

4 3

5

8 page fault

Page 41: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.41

Algoritmo LRU (Cont.)● Implementazione: occorre un meccanismo per ordinare le frame 

secondo il tempo di utilizzazione

– Necessita di un supporto hardware; a seconda del supporto che si ha, si approssima l'algoritmo

– Ad alcune implementazioni basta un bit (bit di riferimento) o due.

– Varianti (vengono solo citate):● Algoritmo con bit supplementari di riferimento● Algoritmo seconda chance● Algoritmo seconda chance migliorato.

Page 42: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.42

Allocazione di Frame● Problema di allocazione di frame: come allocare la quantità (finita) di 

memoria libera tra i vari processi.

● Due schemi principali di allocazione:– Allocazione fissa

– Allocazione con priorità

Page 43: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.43

Allocazione Fissa● Allocazione fissa: ogni processo riceve un numero di frame prefissato. 

Due varianti:

– Allocazione uguale ­  ad es., se si hanno F = 100 frame in totale e N = 5 processi, allocare ad ognuno

a  = F/N = 100/5 = 20 frame– Allocazione proporzionale ­  allocare frame ai processi secondo la loro 

dimensione:

– si = dimensione del processo pi

– S =  si

– F = numero totale di frame– Ai = allocazione di frame al processo pi

     Ai =        ⋅ F

si  

Page 44: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.44

Allocazione con Priorità● Allocazione con priorità: adottare uno schema di allocazione 

proporzionale, basato sulle priorità dei processi anziché sulle loro dimensioni.

● Se il processo Pi genera un page fault,– Selezionare, per la sostituzione, una frame da un processo a minor priorità– Se non ci sono processi a minor priorità, selezionare una delle frame del 

processo stesso.

Page 45: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.45

Thrashing● Se un processo non ha abbastanza pagine in memoria, e la gran parte 

delle frame nel sistema sono attivamente in uso, il tasso di page­fault diventa pericolosamente alto. Ciò porta ad effetti negativi:

– Basso utilizzo della CPU (dato che il sistema passa gran parte del tempo a fare I/O per la paginazione)

– Lo scheduler della CPU pensa allora che ha bisogno di aumentare il grado di multiprogrammazione: aggiunge uno o più altri processi nel sistema

– La situazione peggiora allora ulteriormente; il throughput del sistema decade drasticamente e improvvisamente.

●  Thrashing :  un processo spende più tempo per la paginazione che per l'esecuzione.

● Approccio principale per gestire il problema: basato sul controllo della frequenza di page fault.

Page 46: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.46

Thrashing (Cont.)

● Perchè la paginazione funziona?  ­>  modello di località:

– Località = insieme delle pagine usate attivamente insieme dal processo

– Definita alla struttura del programma e dai dati associati

– Ogni processo migra da una località all'altra; le località possono sovrapporsi

● Il thrashing succede quando

   Σ dimensioni delle località >  dimensione memoria totale

Page 47: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.47

Algoritmo PFF (Page Fault Frequency)

● Algoritmo PFF (Page­fault frequency):

– Stabilire soglie minima e massima accettabili di frequenza di page­fault

– Se la frequenza è troppo bassa, sottrarre una frame al processo (ne ha troppe)

– Se è troppo alta, aggiungere una frame al processo (ne ha troppo poche)

– Se la frequenza è troppo alta e non ci sono frame libere, sospendi il processo:● Total swap­out ­  riversamento su disco di tutte le sue frame● Allocare le frame ad altri processi● Il processo sospeso sarà riattivato successivamente.

Page 48: 1.8: Gestione della Memoria - Vito Asta · 2009. 1. 28. · 1.8.5 Allocazione di Memoria Schema di allocazione RAM a partizioni multiple: – Utilizzato soprattutto nei S.O. batch

1.8.48

Altri Aspetti● Pre­paginazione

– All'avvio di un programma, o dopo un total swap­out, alto numero di page fault (portare la località in memoria)  riversare in RAM tutte le pagine richieste in una sola operazione.

● Scelta della dimensione di pagina– Valori usuali: da 512 byte a 16 Kbyte; il più tipico è 4 Kbyte– Frammentazione interna (minore se la dimensione è piccola)– Dimensione delle page­table (minore se la dimensione è grande)– Overhead di I/O (migliore se la dimensione è grande: si minimizza latenza

+seek time)– località (miglior risoluzione se la dimensione è piccola).

● Problema di I/O: un trasferimento DMA può avvenire mentre la pagina viene riversata su disco. Soluzioni:– Bloccare le pagine in memoria mentre sono implicate in I/O

● Altro flag nella Page Table: Lock bit– Fare I/O solo da/verso buffer del Kernel (kernel cache).