Sei sulla pagina 1di 37

spazio virtuale dei processi

convenzioni ed esercizi

CONVENZIONI
convenzioni per la simulazione della memoria virtuale
obiettivo: rappresentare il contenuto delle varie strutture dati coinvolte,
compresa la memoria fisica e il TLB, dopo l’esecuzione di una serie di eventi
strutture dati SW rappresentate
• mappa di memoria del processo
• Tabella delle Pagine del processo
• memoria fisica (solo quella usata per i processi in modo U)
strutture dati HW rappresentate
• contenuto dei registri PC e SP
• TLB (Translation Look‐aside Buffer)
esempio 1
• memoria fisica di 48 K byte (ossia 12 pagine fisiche)
• un solo processo P in esecuzione
• evento: exec (2, 1, 1, 2, 0x 000000401324, X)
 l’eseguibile è contenuto nel file X ed ha le seguenti caratteristiche
 dimensioni in pagine delle aree: C, K, S e D (BSS): 2, 1, 1 e 2
 indirizzo iniziale del codice eseguibile: 0x 0000 0040 1324
 NPV dell’indirizzo iniziale del codice eseguibile: 0000 0040 1

‐2‐
mappa di memoria
la mappa di memoria di un processo viene rappresentata con le semplificazioni seguenti (vedi Tabella)
• rappresentazione simbolica delle VMA fondamentali : C, K, S, D e P
• le VMA di tipo M e T sono rappresentate in modo simbolico e numerate progressivamente in ordine di
creazione, per esempio M0, M1, T0, T1, ecc
• al posto dello «end address» si rappresenta la dimensione in pagine della VMA
• protezione: R (indistintamente per read only ed execute) o W (per writable)
• lo i‐node e il volume (disco) sono omessi
• si indica se la VMA è private (P) o shared (S)
• si indica se la VMA è mappata su file (M) oppure anonima (A)
• la mappatura su file è indicata con nome file, offset in pagine oppure con 1, 0 se la VMA è anonima
• la dimensione iniziale della pila viene posta a 3 pagine (la pagina iniziale è quella di growsdown)

VMA start address dim R / W P / S M / A mapping

C, K, S, D, M, T o P NPV iniziale # pagine VMA R o W P o S M o A file, offset

... ... ... ... ... ... ...

‐3‐
esempio 1 – mappa di memoria – soluzione
evento: exec (2, 1, 1, 2, 0x 000000401324, X)

VMA start address dim R/W P/S M/A mapping


C 000000400, 2 , R , P , M , <X, 0>
K 000000600, 1 , R , P , M , <X, 2>
S 000000601, 1 , W , P , M , <X, 3>
D 000000602, 2 , W , P , A , <-1,0>
P 7FFFFFFFC, 3 , W , P , A , <-1,0>

• la base della pila è la pagina 0x 7FFF FFFF E


• la pila cresce verso l'alto (ossia verso gli indirizzi bassi), pertanto le 3
pagine virtuali di pila sono: E (base), D, C (cima, che è start address)
• growsdown: se la pagina C viene letta o scritta, il SO aggiunge la pagina B
e la pila cresce a dimensione pari a 4 pagine, e così via
‐4‐
memoria fisica

• tabella con gli NPF: vanno inseriti gli NPV delle pagine virtuali allocate in memoria


• la pagina fisica con NPF  00 è sempre usata come «ZeroPage» e indicata con ZP
• la pagina virtuale n dell’area virtuale A viene indicata con la notazione PAn, dove:
• A specifica un tipo di area virtuale: C, K, S, D, M, T o P
• P è l’identificativo (eventualmente il PID) del processo
• l’allocazione della memoria fisica utilizza sempre la prima pagina libera disponibile
• se una pagina fisica è condivisa o mappata su file, i suoi diversi utilizzi sono indicati
separandoli con «/»
00 : <ZP> || 01 : ---- ||
02 : ---- || 03 : ---- ||
04 : ---- || 05 : ---- ||
06 : ---- || 07 : ---- ||
08 : ---- || 09 : ---- ||
10 : ---- || 11 : ---- ||

‐5‐
esempio 1 – memoria fisica – soluzione
file name  X
evento: exec (2, 1, 1, 2, 0x 000000401324, X)
offset  1 pag
00 : <ZP> || 01 : Pc1 / <X,1> ||
02 : Pp0 || 03 : ---- # pagina  1 ||
pagina pagina
fisica 04 : ---- || 05 : ---- ||
virtuale
VMA codice
06 : ---- || 07 : ---- ||
08 : ---- || 09 : ---- ||
processo P
10 : ---- || 11 : ---- ||

• la pagina iniziale del codice è c1 dato che gli NPV delle pagine di codice sono
c0  0x 000000400    (dividendolo: 0x 0000 0040 0)
c1  0x 000000401    (dividendolo: 0x 0000 0040 1)
• la pagina di pila Pp0 è la numero 0x 7FFF FFFF E (base), per ora l’unica di pila che
il processo P stia davvero usando (su 3 pagine che il SO ha previste inizialmente)
‐6‐
tabella delle pagine (TP) – page table (PT)

• la TP (o PT) del processo è rappresentata come una serie di PTE (Page Table Entries)
• le PTE sono tutte e sole quelle relative alle pagine delle varie VMA, cioè le PTE valide
• la PTE  è rappresentata nel modo seguente
 NPV: NPF  protezione  dove
 NPV è rappresentato secondo le convenzioni viste per la memoria fisica (PAn)
 NPF è il numero di pagina fisica se la pagina è allocata in memoria
(si scrive «‐‐»  se la pagina non è allocata)
 la protezione è R oppure W, come per le VMA
• la protezione iniziale delle pagine allocate in memoria dipende dal tipo di VMA alla
quale le pagine appartengono; per le pagine non allocate è omessa
• va tenuto presente che alcune VMA, come le aree D, P e S di tipo PRIVATE, sono
inizializzate per il meccanismo di COW e quindi inizialmente le loro pagine fisiche
sono registrate con protezione R in tabella delle pagine

‐7‐
esempio 1 – tabella delle pagine (TP) – soluzione

<c0 : --> <c1 : 01 R> <k0 : --> <s0 : -->


<d0 : --> <d1 : --> <p0 : 02 W> <p1 : -->
<p2 : -->

NB: leggi la tabella per righe

evento: exec (2, 1, 1, 2, 0x 000000401324, X)

‐8‐
NPV dei registri PC e SP del processore

il NPV è attribuito ai registri PC e SP del processore secondo le ipotesi seguenti 
• ogniqualvolta volta viene acceduta una pagina di pila (in lettura o scrittura), il suo
NPV diventa NPV corrente del registro Stack Pointer
• ogniqualvolta volta viene acceduta una pagina di codice, il suo NPV diventa NPV
corrente del registro Program Counter

esempio 1 – soluzione
NPV of PC and SP:   c1, p0

evento: exec (2, 1, 1, 2, 0x 000000401324, X)

‐9‐
TLB   (Translation Look‐aside Buffer)

• il TLB è rappresentato come una tabella contenente le righe (entries) di TLB
• ogni riga di TLB è rappresentata nel formato seguente :  NPV : NPF  – D:  A:
• il comportamento del TLB (con i bit Dirty e Accessed) è quello reale
 nel TLB si pone A  1 a ogni accesso e D  1 a ogni scrittura
 a ogni accesso a pagina non presente in TLB (evento di TLB miss) si carica (nel TLB) la riga
corrispondente dalla tabella delle pagine (TP)
• si fa l’ipotesi che non si verifichi mai un problema di saturazione del TLB
esempio 1 – TLB – soluzione
Pc1 : 01 - 0: 1: || Pp0 : 02 - 1: 1: ||
---- || ---- ||
---- || ---- ||

‐ 10 ‐
tipi di evento
negli esercizi  seguenti si consideri come stato iniziale il risultato di quello precedente

tipi di evento
• mutazione di codice:
exec (dim C, dim K, dim S, dim D, indirizzo iniziale codice da eseguire, "nome_file")
• accesso alla memoria: Read (lista di NPV)  e  Write (lista di NPV)
• crescita dell’area dinamica(D): sbrk (numero di pagine da allocare)
• creazione di processo: fork (nome del nuovo processo normale)
• creazione di thread:
clone (nome del nuovo thread, pagina della funzione da eseguire)
• commutazione di contesto: ContextSwitch (nome del processo da mettere in esecuzione)
• terminazione di processo: exit (nome del processo)
• creazione di una nuova area virtuale (VMA):
mmap (indirizzo di VMA,  dimensioni di VMA,  R/W,  S/P,  M/A,  "nome_file", file offset)
‐ 11 ‐
spazio virtuale dei processi

ESERCIZI

- 12 -
esempio 1 – exec (2, 1, 1, 2, 0x 000000401324, X) – soluzione completa 
PROCESSO: P *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 2 , W , P , A , <-1,0>
P 7FFFFFFFC, 3 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :--> <s0 :--> <d0 :--> <d1 :-->
<p0 :02 W> <p1 :--> <p2 :-->
NPV of PC and SP: c1, p0
____MEMORIA FISICA____(pagine libere: 9)_________________________
00 : <ZP> || 01 : Pc1 / <X,1> ||
02 : Pp0 || 03 : ---- ||
04 : ---- || 05 : ---- ||
06 : ---- || 07 : ---- ||
08 : ---- || 09 : ---- ||
10 : ---- || 11 : ---- ||
____STATO del TLB________________________________________________
Pc1 : 01 - 0: 1: || Pp0 : 02 - 1: 1: ||
---- || ---- ||
---- || ---- ||
- 13 -
esercizio 2 – Read (Pk0, Ps0, Pd0, Pd1),   Write (Pp1, Pp2, Pp3)
PROCESSO: P *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 2 , W , P , A , <-1,0>
P 7FFFFFFFC, 3 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :--> <s0 :--> <d0 :--> <d1 :-->
<p0 :02 W> <p1 :--> <p2 :-->
NPV of PC and SP: c1, p0
____MEMORIA FISICA____(pagine libere: 9)_________________________
00 : <ZP> || 01 : Pc1 / <X,1> ||
02 : Pp0 || 03 : ---- ||
04 : ---- || 05 : ---- ||
06 : ---- || 07 : ---- ||
08 : ---- || 09 : ---- ||
10 : ---- || 11 : ---- ||
____STATO del TLB________________________________________________
Pc1 : 01 - 0: 1: || Pp0 : 02 - 1: 1: ||
---- || ---- ||
---- || ---- || ‐ 14 ‐
Read (Pk0, Ps0, Pd0, Pd1),  Write (Pp1, Pp2, Pp3)
PROCESSO: P *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 2 , W , P , A , <-1,0>
P 7FFFFFFFC, 3 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :03 R> <s0 :--> <d0 :--> <d1 :-->
<p0 :02 W> <p1 :--> <p2 :-->
NPV of PC and SP: c1, p0
____MEMORIA FISICA____(pagine libere: 9)_________________________
00 : <ZP> || 01 : Pc1 / <X,1> ||
02 : Pp0 || 03 : Pk0 / <X,2> ||
04 : ---- || 05 : ---- ||
06 : ---- || 07 : ---- ||
08 : ---- || 09 : ---- ||
10 : ---- || 11 : ---- ||
____STATO del TLB________________________________________________
Pc1 : 01 - 0: 1: || Pp0 : 02 - 1: 1: ||
Pk0 : 03 - 0: 1: || ---- ||
---- || ---- || ‐ 15 ‐
Read (Pk0, Ps0, Pd0, Pd1),  Write (Pp1, Pp2, Pp3)
PROCESSO: P *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 2 , W , P , A , <-1,0>
P 7FFFFFFFC, 3 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :03 R> <s0 :04 R> <d0 :--> <d1 :-->
<p0 :02 W> <p1 :--> <p2 :-->
NPV of PC and SP: c1, p0
____MEMORIA FISICA____(pagine libere: 9)_________________________
00 : <ZP> || 01 : Pc1 / <X,1> ||
02 : Pp0 || 03 : Pk0 / <X,2> ||
04 : Ps0 / <X,3> || 05 : ---- ||
06 : ---- || 07 : ---- ||
08 : ---- || 09 : ---- ||
10 : ---- || 11 : ---- ||
____STATO del TLB________________________________________________
Pc1 : 01 - 0: 1: || Pp0 : 02 - 1: 1: ||
Pk0 : 03 - 0: 1: || Ps0 : 04 - 0: 1: ||
---- || ---- ||
‐ 16 ‐
Read (Pk0, Ps0, Pd0, Pd1),  Write (Pp1, Pp2, Pp3)
PROCESSO: P *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 2 , W , P , A , <-1,0>
P 7FFFFFFFC, 3 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :03 R> <s0 :04 R> <d0 :00 R> <d1 :00 R>
<p0 :02 W> <p1 :--> <p2 :-->
NPV of PC and SP: c1, p0
____MEMORIA FISICA____(pagine libere: 9)_________________________
00 : Pd0 / Pd1 / <ZP> || 01 : Pc1 / <X,1> ||
02 : Pp0 || 03 : Pk0 / <X,2> ||
04 : Ps0 / <X,3> || 05 : ---- ||
06 : ---- || 07 : ---- ||
08 : ---- || 09 : ---- ||
10 : ---- || 11 : ---- ||
____STATO del TLB________________________________________________
Pc1 : 01 - 0: 1: || Pp0 : 02 - 1: 1: ||
Pk0 : 03 - 0: 1: || Ps0 : 04 - 0: 1: ||
Pd0 : 00 - 0: 1: || Pd1 : 00 - 0: 1: ||
---- || ---- || ‐ 17 ‐
Read (Pk0, Ps0, Pd0, Pd1),  Write (Pp1, Pp2, Pp3)
PROCESSO: P *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 2 , W , P , A , <-1,0>
P 7FFFFFFFA, 5 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :03 R> <s0 :04 R> <d0 :00 R> <d1 :00 R>
<p0 :02 W> <p1 :05 W> <p2 :06 W> <p3 :07 W> <p4 :-->
NPV of PC and SP: c1, p3
____MEMORIA FISICA____(pagine libere: 4)_________________________
00 : Pd0 / Pd1 / <ZP> || 01 : Pc1 / <X,1> ||
02 : Pp0 || 03 : Pk0 / <X,2> ||
04 : Ps0 / <X,3> || 05 : Pp1 ||
06 : Pp2 || 07 : Pp3 ||
08 : ---- || 09 : ---- ||
10 : ---- || 11 : ---- ||
____STATO del TLB________________________________________________
Pc1 : 01 - 0: 1: || Pp0 : 02 - 1: 1: ||
Pk0 : 03 - 0: 1: || Ps0 : 04 - 0: 1: ||
Pd0 : 00 - 0: 1: || Pd1 : 00 - 0: 1: ||
Pp1 : 05 - 1: 1: || Pp2 : 06 - 1: 1: ||
Pp3 : 07 - 1: 1: || ----- || ‐ 18 ‐
esercizio 3 – sbrk (2),   Write (Pd1, Pd2)
PROCESSO: P *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 2 , W , P , A , <-1,0>
P 7FFFFFFFA, 5 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :03 R> <s0 :04 R> <d0 :00 R> <d1 :00 R>
<p0 :02 W> <p1 :05 W> <p2 :06 W> <p3 :07 W> <p4 :-->
NPV of PC and SP: c1, p3
____MEMORIA FISICA____(pagine libere: 4)_________________________
00 : Pd0 / Pd1 / <ZP> || 01 : Pc1 / <X,1> ||
02 : Pp0 || 03 : Pk0 / <X,2> ||
04 : Ps0 / <X,3> || 05 : Pp1 ||
06 : Pp2 || 07 : Pp3 ||
08 : ---- || 09 : ---- ||
10 : ---- || 11 : ---- ||
____STATO del TLB________________________________________________
Pc1 : 01 - 0: 1: || Pp0 : 02 - 1: 1: ||
Pk0 : 03 - 0: 1: || Ps0 : 04 - 0: 1: ||
Pd0 : 00 - 0: 1: || Pd1 : 00 - 0: 1: ||
Pp1 : 05 - 1: 1: || Pp2 : 06 - 1: 1: ||
Pp3 : 07 - 1: 1: || ----- || ‐ 19 ‐
sbrk (2), Write (Pd1, Pd2)
PROCESSO: P *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 4 , W , P , A , <-1,0>
P 7FFFFFFFA, 5 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :1 R> <k0 :03 R> <s0 :04 R> <d0 :00 R> <d1 :08 W>
<d2 :09 W> <d3 :--> <p0 :02 W> <p1 :05 W> <p2 :06 W> <p3 :07 W> <p4 :-->
NPV of PC and SP: c1, p3
____MEMORIA FISICA____(pagine libere: 2)_________________________
00 : Pd0 / <ZP> || 01 : Pc1 / <X,1> ||
02 : Pp0 || 03 : Pk0 / <X,2> ||
04 : Ps0 / <X,3> || 05 : Pp1 ||
06 : Pp2 || 07 : Pp3 ||
08 : Pd1 || 09 : Pd2 ||
10 : ---- || 11 : ---- ||
____STATO del TLB________________________________________________
Pc1 : 01 - 0: 1: || Pp0 : 02 - 1: 1: ||
Pk0 : 03 - 0: 1: || Ps0 : 04 - 0: 1: ||
Pd0 : 00 - 0: 1: || Pd1 : 08 - 1: 1: ||
Pp1 : 05 - 1: 1: || Pp2 : 06 - 1: 1: ||
Pp3 : 07 - 1: 1: || Pd2 : 09 - 1: 1: || ‐ 20 ‐
esercizio 4 – fork (Q),  Write (Pd0)  – stato iniziale
PROCESSO: P *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 4 , W , P , A , <-1,0>
P 7FFFFFFFA, 5 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :03 R> <s0 :04 R> <d0 :00 R> <d1 :08 W>
<d2 :09 W> <d3 :--> <p0 :02 W> <p1 :05 W> <p2 :06 W> <p3 :07 W> <p4 :-->
NPV of PC and SP: c1, p3
____MEMORIA FISICA____(pagine libere: 2)_________________________
00 : Pd0 / <ZP> || 01 : Pc1 / <X,1> ||
02 : Pp0 || 03 : Pk0 / <X,2> ||
04 : Ps0 / <X,3> || 05 : Pp1 ||
06 : Pp2 || 07 : Pp3 ||
08 : Pd1 || 09 : Pd2 ||
10 : ---- || 11 : ---- ||
____STATO del TLB________________________________________________
Pc1 : 01 - 0: 1: || Pp0 : 02 - 1: 1: ||
Pk0 : 03 - 0: 1: || Ps0 : 04 - 0: 1: ||
Pd0 : 00 - 0: 1: || Pd1 : 08 - 1: 1: ||
Pp1 : 05 - 1: 1: || Pp2 : 06 - 1: 1: ||
Pp3 : 07 - 1: 1: || Pd2 : 09 - 1: 1: || ‐ 21 ‐
fork (Q),  Write (Pd0)
PROCESSO: P *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 4 , W , P , A , <-1,0>
P 7FFFFFFFA, 5 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :03 R> <s0 :04 R> <d0 :11 W> <d1 :08 R>
<d2 :09 R> <d3 :--> <p0 :02 R> <p1 :05 R> <p2 :06 R> <p3 :10 W>
<p4 :-->
NPV of PC and SP: c1, p3
PROCESSO: Q *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 4 , W , P , A , <-1,0>
P 7FFFFFFFA, 5 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :03 R> <s0 :04 R> <d0 :00 R> <d1 :08 R>
<d2 :09 R> <d3 :--> <p0 :02 R> <p1 :05 R> <p2 :06 R> <p3 :07 D W>
<p4 :-->
NPV of PC and SP: c1, p3 ‐ 22 ‐
fork (Q),  Write (Pd0) (memoria + 2 pagine)

____MEMORIA FISICA____(pagine libere: 2)_________________________


00 : Qd0 / <ZP> || 01 : Pc1 / Qc1 / <X,1> ||
02 : Pp0 / Qp0 || 03 : Pk0 / Qk0 / <X,2> ||
04 : Ps0 / Qs0 / <X,3> || 05 : Pp1 / Qp1 ||
06 : Pp2 / Qp2 || 07 : Qp3 D ||
vedi anche
08 : Pd1 / Qd1 || 09 : Pd2 / Qd2 ||
esercizio 6
10 : Pp3 || 11 : Pd0 ||
12 : ---- || 13 : ---- ||

____STATO del TLB________________________________________________


Pc1 : 01 - 0: 1: || Pp0 : 02 - 1: 1: ||
Pk0 : 03 - 0: 1: || Ps0 : 04 - 0: 1: ||
Pd0 : 11 - 1: 1: || Pd1 : 08 - 1: 1: ||
Pp1 : 05 - 1: 1: || Pp2 : 06 - 1: 1: ||
Pp3 : 10 - 1: 1: || Pd2 : 09 - 1: 1: ||
----- || ----- ||
----- || ----- ||

‐ 23 ‐
evento di creazione dei thread

creazione di thread:  clone (nome nuovo thread, pagina della thread function)


• mappa di memoria e PT sono condivise
• per rappresentare le NPV in comune a più thread dello stesso processo utilizziamo la
seguente notazione:
esempio PQRc0 è la pagina c0 dei processi P, Q e R
• clone crea la pila per il nuovo thread, e scrive nella prima pagina allocandola, 
assegnando il registro SP del thread, e assegna al suo registro PC il NPV di inizio della
thread_function:
NPV iniziale spazio pile dei thread è 0x 7FFF F77F F
• la dimensione virtuale della pila dei thread è 2 pagine
• le eventuali pile di nuovi thread vengono concatenate nella direzione degli indirizzi bassi
con una pagina di interposizione

‐ 24 ‐
esercizio 5 – clone (R, c0),  clone (S, c1)  – stato iniziale (P in esecuzione)
PROCESSO: P *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 4 , W , P , A , <-1,0>
P 7FFFFFFFA, 5 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :03 R> <s0 :04 R> <d0 :11 W> <d1 :08 R>
<d2 :09 R> <d3 :--> <p0 :02 R> <p1 :05 R> <p2 :06 R> <p3 :10 W>
<p4 :-->
NPV of PC and SP: c1, p3
PROCESSO: Q *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 4 , W , P , A , <-1,0>
P 7FFFFFFFA, 5 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :03 R> <s0 :04 R> <d0 :0 R> <d1 :08 R>
<d2 :09 R> <d3 :--> <p0 :02 R> <p1 :05 R> <p2 :6 R> <p3 :07 W>
<p4 :-->
NPV of PC and SP: c1, p3
‐ 25 ‐
clone (R, c0), clone (S, c1) – VMA e PT
PROCESSO: P/R/S *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 4 , W , P , A , <-1,0>
T1 7FFFF77FB, 2 , W , P , A , <-1,0>
T0 7FFFF77FE, 2 , W , P , A , <-1,0>
P 7FFFFFFFA, 5 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :03 R> <s0 :04 R> <d0 :11 W> <d1 :08 R>
<d2 :09 R> <d3 :--> <p0 :02 R> <p1 :05 R> <p2 :06 R> <p3 :10 D W>
<p4 :--> <t00:12 W> <t01:--> <t10:13 W> <t11:-->
process P - NPV of PC and SP: c1, p3
process R - NPV of PC and SP: c0, t00
process S - NPV of PC and SP: c1, t10
PROCESSO: Q *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 4 , W , P , A , <-1,0>
P 7FFFFFFFA, 5 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :03 R> <s0 :04 R> <d0 :00 R> <d1 :08 R>
<d2 :09 R> <d3 :--> <p0 :02 R> <p1 :05 R> <p2 :06 R> <p3 :07 W>
<p4 :- ->
NPV of PC and SP: c1, p3 ‐ 26 ‐
clone (R, c0), clone (S, c1) – memoria fisica
Stato iniziale
____MEMORIA FISICA____(pagine libere: 2)_________________________
00 : Qd0 / <ZP> || 01 : Pc1 / Qc1 / <X,1> ||
02 : Pp0 / Qp0 || 03 : Pk0 / Qk0 / <X,2> ||
04 : Ps0 / Qs0 / <X,3> || 05 : Pp1 / Qp1 ||
06 : Pp2 / Qp2 || 07 : Qp3 ||
08 : Pd1 / Qd1 || 09 : Pd2 / Qd2 ||
10 : Pp3 || 11 : Pd0 ||
12 : ---- || 13 : ---- ||

Stato finale: cambiano anche i nomi delle pagine virtuali


____MEMORIA FISICA____(pagine libere:0)_________________________
00 : Qd0 / <ZP> || 01 : PRSc1 / Qc1 / <X,1> ||
02 : PRSp0 / Qp0 || 03 : PRSk0 / Qk0 / <X,2> ||
04 : PRSs0 / Qs0 / <X,3> || 05 : PRSp1 / Qp1 ||
06 : PRSp2 / Qp2 || 07 : Qp3 ||
08 : PRSd1 / Qd1 || 09 : PRSd2 / Qd2 ||
10 : PRSp3 || 11 : PRSd0 ||
12 : PRSt00 || 13 : PRSt10 ||
‐ 27 ‐
clone (R, c0), clone (S, c1) – stato TLB
Stato iniziale
____STATO del TLB________________________________________________
Pc1 : 01 - 0: 1: || Pp0 : 02 - 1: 1: ||
Pk0 : 03 - 0: 1: || Ps0 : 04 - 0: 1: ||
Pd0 : 11 - 1: 1: || Pd1 : 08 - 1: 1: ||
Pp1 : 05 - 1: 1: || Pp2 : 06 - 1: 1: ||
Pp3 : 10 - 1: 1: || Pd2 : 09 - 1: 1: ||
----- || ----- ||
----- || ----- ||

Stato finale
____STATO del TLB________________________________________________
PRSc1 : 01 - 0: 1: || PRSp0 : 02 - 1: 1: ||
PRSk0 : 03 - 0: 1: || PRSs0 : 04 - 0: 1: ||
PRSd0 : 11 - 1: 1: || PRSd1 : 08 - 1: 1: ||
PRSp1 : 05 - 1: 1: || PRSp2 : 06 - 1: 1: ||
PRSp3 : 10 - 1: 1: || PRSd2 : 09 - 1: 1: ||
PRSt00: 12 - 1: 1: || PRSt10: 13 - 1: 1: ||

‐ 28 ‐
evento di context switch

context switch: ContextSwitch (nome del processo da mettere in esecuzione)


• non modifica le mappe di memoria
• il TLB esegue uno svuotamento (flush)
• poi il TLB carica le pagine attive di codice e pila (cioè quelle che contengono gli indirizzi
dei registri PC e SP del processo che va in esecuzione)
• questa operazione può avere un effetto sulla tabella delle pagine (TP)
• una conseguenza importante dello svuotamento (flush) del TLB consiste nella necessità
di salvare lo stato del Dirty bit presente nel TLB, che altrimenti andrebbe perso
• l’informazione viene salvata nei descrittori delle pagine fisiche eliminate dal TLB,
e anche nelle PTE per compatibilità di versioni Linux (qui non lo riportiamo nelle PTE
tranne quando serve metterlo in evidenza)
• nel modello di simulazione si marcano in memoria le pagine Dirty con D, per esempio
02 : PRSp0 / Qp0  D
esercizio 6: ContextSwitch (Q)

‐ 29 ‐
esercizio 6 – ContextSwitch (Q)
Stato iniziale
________STATO del TLB________________________________________________
PRSc1 : 01 - 0: 1: || PRSp0 : 02 - 1: 1: ||
PRSk0 : 03 - 0: 1: || PRSs0 : 04 - 0: 1: ||
PRSd0 : 11 - 1: 1: || PRSd1 : 08 - 1: 1: ||
PRSp1 : 05 - 1: 1: || PRSp2 : 06 - 1: 1: ||
PRSp3 : 10 - 1: 1: || PRSd2 : 09 - 1: 1: ||
PRSt00: 12 - 1: 1: || PRSt10: 13 - 1: 1: ||

Stato finale
____MEMORIA FISICA____(pagine libere: 0)_________________________
00 : Qd0 / <ZP> || 01 : PRSc1 / Qc1 / <X,1> ||
02 : PRSp0 / Qp0 D || 03 : PRSk0 / Qk0 / <X,2> ||
04 : PRSs0 / Qs0 / <X,3> || 05 : PRSp1 / Qp1 D ||
06 : PRSp2 / Qp2 D || 07 : Qp3 D ||
08 : PRSd1 / Qd1 D || 09 : PRSd2 / Qd2 D ||
10 : PRSp3 D || 11 : PRSd0 D ||
12 : PRSt00 D || 13 : PRSt10 D ||

____STATO del TLB________________________________________________


Qc1 : 01 - 0: 1: || Qp3 : 07 - 1: 1: ||
----- || ----- ||
‐ 30 ‐
evento di exit

exit (nome del processo da mettere in esecuzione)
• elimina tutti gli NPV del processo da tutte le strutture dati 
• tale eliminazione può dare luogo alla creazione di pagine libere in memoria, laddove
la NPV eliminata fosse stata l’unica occupante di una pagina fisica non appartenente
alla Page Cache (NPV anonima)
• alla fine viene eseguita un’operazione equivalente a una commutazione di contesto,
mettendo in esecuzione il nuovo processo indicato nell’evento
• se il processo terminato ha dei thread secondari attivi, anche questi vanno eliminati
• exit di un thread non modifica né la memoria né la PT del processo cui il thread
appartiene; la VMA della pila del thread terminato viene considerata rilasciata
(libera) ed è riutilizzabile per un nuovo thread; nel modello il nome del thread
terminato viene eliminato dagli NPV simbolici dove compariva
esercizio 7:  exit (S), ContextSwitch (R), exit (P)

‐ 31 ‐
esercizio 7 – Q in esecuzione,  exit (S),   ContextSwitch (R),  exit (P)
PROCESSO: P/R/S *********************************************************
VMA : C 000000400, 2 , R , P , M , <X,0>
K 000000600, 1 , R , P , M , <X,2>
S 000000601, 1 , W , P , M , <X,3>
D 000000602, 4 , W , P , A , <-1,0>
T1 7FFFF77FB, 2 , W , P , A , <-1,0>
T0 7FFFF77FE, 2 , W , P , A , <-1,0>
P 7FFFFFFFA, 5 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :03 R> <s0 :04 R> <d0 :11 D W> <d1 :08 D R>
<d2 :09 D R> <d3 :--> <p0 :02 D R> <p1 :05 D R> <p2 :06 D R>
<p3 :10 D W> <p4 :--> <t00:12 D W> <t01:--> <t10:13 D W> <t11:--> ...
process S - NPV of PC and SP: c1, t10
____MEMORIA FISICA____(pagine libere: 1)_________________________
00 : <ZP> || 01 : PRSc1 / <X,1> ||
02 : PRSp0 D || 03 : PRSk0 / <X,2> ||
04 : PRSs0 / <X,3> || 05 : PRSp1 D ||
06 : PRSp2 D || 07 : ---- ||
08 : PRSd1 D || 09 : PRSd2 D ||
10 : PRSp3 D || 11 : PRSd0 D ||
12 : PRSt00 D || 13 : PRSt10 D ||
____STATO del TLB________________________________________________
PRSc1 : 01 - 0: 1: || PRSt10 : 13 - 1: 1: ||
...
‐ 32 ‐
exit (S),  ContextSwitch (R), exit (P)
Stato iniziale
____MEMORIA FISICA____(pagine libere: 1)_________________________
00 : <ZP> || 01 : PRSc1 / <X,1> ||
02 : PRSp0 D || 03 : PRSk0 / <X,2> ||
04 : PRSs0 / <X,3> || 05 : PRSp1 D ||
06 : PRSp2 D || 07 : ---- ||
08 : PRSd1 D || 09 : PRSd2 D ||
10 : PRSp3 D || 11 : PRSd0 D ||
12 : PRSt00 D || 13 : PRSt10 D ||
____STATO del TLB________________________________________________
PRSc1 : 01 - 0: 1: || PRSt10 : 13 - 1: 1: ||

Stato finale
____MEMORIA FISICA____(pagine libere: 0)_________________________
00 : <ZP> || 01 : PRSc1 / <X,1> ||
02 : PRSp0 D || 03 : PRSk0 / <X,2> ||
04 : PRSs0 / <X,3> || 05 : PRSp1 D ||
06 : PRSp2 D || 07 : PRSc0 / <X,0> ||
08 : PRSd1 D || 09 : PRSd2 D ||
10 : PRSp3 D || 11 : PRSd0 D ||
12 : PRSt00 D || 13 : PRSt10 D ||

____STATO del TLB________________________________________________


PRSc0 : 07 - 0: 1: || PRSt00 : 12 - 1: 1: || cambia anche la PTE di c0 ‐ 33 ‐
exit (S),  ContextSwitch(R),  exit (P)
Stato iniziale
____ MEMORIA FISICA____(pagine libere: 0)_________________________
00 : <ZP> || 01 : PRSc1 / <X,1> ||
02 : PRSp0 D || 03 : PRSk0 / <X,2> ||
04 : PRSs0 / <X,3> || 05 : PRSp1 D ||
06 : PRSp2 D || 07 : PRSc0 / <X,0> ||
08 : PRSd1 D || 09 : PRSd2 D ||
10 : PRSp3 D || 11 : PRSd0 D ||
12 : PRSt00 D || 13 : PRSt10 D ||

____STATO del TLB________________________________________________


PRSc0 : 12 - 0: 1: || PRSt00 : 13 - 1: 1: ||

Stato finale
____MEMORIA FISICA____(pagine libere: 0)_________________________
00 : <ZP> || 01 : PSc1 / <X,1> ||
02 : PSp0 D || 03 : PSk0 / <X,2> ||
04 : PSs0 / <X,3> || 05 : PSp1 D ||
06 : PSp2 D || 07 : PSc0 / <X,0> ||
08 : PSd1 D || 09 : PSd2 D ||
10 : PSp3 D || 11 : PSd0 D ||
12 : PSt00 D || 13 : PSt10 D ||

____STATO del TLB________________________________________________


PSc1 : 01 - 0: 1: || PSp3 : 10 - 1: 1: || ‐ 34 ‐
esercizio 8 (mmap)
in memoria c’è un processo P in esecuzione e si chiede di rappresentare le
strutture dati di memoria dopo che si sono verificati gli eventi seguenti

exec (2, 1, 1, 2, c1, “XX”)


mmap (0x 000010000000, 2, W, S, M, "G", 2)
mmap (0x 000020000000, 1, R, S, M, "G", 4)
mmap (0x 000030000000, 1, W, P, M, "F", 2)
mmap (0x 000040000000, 1, W, P, A, ‐1, 0)

NB: mmap (0x 10000000, 2, W, S, M, "G", 2) senza zeri in testa (idem gli altri)
NB: 0x 000010000000 è indirizzo di byte, il suo NPV è 0000 1000 0 (idem gli altri)
‐ 35 ‐
esercizio 8 – soluzione
PROCESSO: P *********************************************************
VMA : C 000000400, 2 , R , P , M , <XX,0>
K 000000600, 1 , R , P , M , <XX,2>
exec (2, 1, 1, 2, c1, “XX”)
S 000000601, 1 , W , P , M , <XX,3>
D 000000602, 2 , W , P , A , <-1,0> mmap (0x 10000000, 2, W, S, M, "G", 2)
M0 000010000, 2 , W , S , M , <G,2> mmap (0x 20000000, 1, R, S, M, "G", 4)
M1 000020000, 1 , R , S , M , <G,4> mmap (0x 30000000, 1, W, P, M, "F", 2)
M2 000030000, 1 , W , P , M , <F,2>
M3 000040000, 1 , W , P , A , <-1,0> mmap (0x 40000000, 1, W, P, A, ‐1, 0)
P 7FFFFFFFC, 3 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :1 R> <k0 :--> <s0 :--> <d0 :--> <d1 :-->
<p0 :02 W> <p1 :--> <p2 :--> <m00:--> <m01:--> <m10:-->
<m20:--> <m30:-->
process P - NPV of PC and SP: c1, p0
____MEMORIA FISICA____(pagine libere: 7)_________________________
00 : <ZP> || 01 : Pc1 / <XX,1> ||
02 : Pp0 || 03 : ---- ||
04 : ---- || 05 : ---- ||
06 : ---- || 07 : ---- ||
08 : ---- || 09 : ---- ||
____STATO del TLB________________________________________________
Pc1 : 01 - 0: 1: || Pp0 : 02 - 1: 1: || ‐ 36 ‐
esercizio 9 – Read (Pm10, Pm30), Write (Pm00, Pm20)
PROCESSO: P *********************************************************
VMA : ...
M0 000010000, 2 , W , S , M , <G,2>
M1 000020000, 1 , R , S , M , <G,4>
M2 000030000, 1 , W , P , M , <F,2>
M3 000040000, 1 , W , P , A , <-1,0>
P 7FFFFFFFC, 3 , W , P , A , <-1,0>
PT: <c0 :--> <c1 :01 R> <k0 :--> <s0 :--> <d0 :--> <d1 :-->
<p0 :02 W> <p1 :--> <p2 :--> <m00:04 W> <m01:--> <m10:03 R>
<m20:06 W> <m30:00 R>
process P - NPV of PC and SP: c1, p0
____MEMORIA FISICA____(pagine libere: 3)_________________________
00 : Pm30 / <ZP> || 01 : Pc1 / <XX,1> ||
02 : Pp0 || 03 : Pm10 / <G,4> ||
04 : Pm00 / <G,2> || 05 : <F,2> ||
06 : Pm20 || 07 : ---- ||
08 : ---- || 09 : ---- ||
____STATO del TLB________________________________________________
Pc1 : 01 - 0: 1: || Pp0 : 02 - 1: 1: ||
Pm10 : 03 - 0: 1: || Pm30 : 00 - 0: 1: ||
Pm00 : 04 - 1: 1: || Pm20 : 06 - 1: 1: || ‐ 37 ‐