Gestione
della memoria
Domanda
Esercizio
1 Si consideri
un gestore della memoria basato su swapping che utilizza una lista per
rappresentare lo stato di allocazione della memoria.
Supponiamo che la lista
contenga le seguenti informazioni.
(P,0,12)->(H,12,5)-> (P,17,6)->(H,23,15)->(P,38,5)->(H,43,12)-> (P,55,10) -> (H,65,8)
Il simbolo “P” denota una
partizione di
memoria occupata da un processo, mentre il simbolo “H” denota una
partizione di
memoria libera,
il primo numero indica il blocco di partenza, il secondo
numero il numero di blocchi allocati al
processo .
Supponiamo ora che al gestore
della memoria
arrivino in tempi successivi due richieste di allocazione di memoria
per tre
processi,
il primo di dimensione 7, il secondo di dimensione 10, il terzo
di
dimensione 1.
Dire come si comporta il gestore della memoria nel caso utilizzi la politica di allocazione
Mostrare in tutti i casi la lista di allocazione della memoria risultante.
Soluzione:
Il best fit seleziona per il primo processo l’area (H, 65,8 ) e per il secondo processo l’area (H,43,12) e
per il terzo processo seleziona l’area (H,72,1) rimasta dopo l’allocazione dei primi due per cui la lista diventa
(P,0,12)->(H,12,5)-> (P,17,6)->(H,23,15)->(P,38,5)->(P,43,10)-> (H,53,2) --> (P,55,10) -> (P,65,7)-> (P,72,1)
Il first fit seleziona per il primo processo l’area (H,23,15) e per il secondo processo l’area (H,43,12) e per il terzo
L’area (H,12,5) per cui la lista diventa
(P,0,12)->(P,12,1)->(H,13,4)-> (P,17,6)->(P,23,7)->(H,30,8)->(P,38,5)->(P,43,10)->(H,53,2)-> (P,55,10) -> (H,65,8)
Il worst fit seleziona per il primo processo l’area (H,23,15) e per il secondo processo l’area (H,43,12) e per il terzo
l’area (H,30,8) rimasta dopo l’allocazione dei primi due per cui la lista diventa
(P,0,12)->(H,12,5)-> (P,17,6)->(P,23,7)->(P,30,1)->(H,31,7)->(P,38,5)->(P,43,10)->(H,53,2)-> (P,55,10) -> (H,65,8)
Esercizio 2 Si considerino tre processi (A, B e C), che hanno rispettivamente 3, 3 e 4 pagine logiche caricate in altrettante pagine fisiche della memoria.
Per ogni pagina, l’istante di tempo dell’ultimo riferimento è riassunto dalla seguente tabella:
Processo Pagina fisica istante ultimo riferimento
A 0 10
A 2 2
A 4 13
B 1 3
B 9 12
B 8 5
C 7 8
C 3 11
C 6 6
C 5 4
Si supponga inoltre che non siano rimaste pagine libere in memoria.
Dire quale pagina verrebbe rimossa dall’algoritmo di sostituzione se all’istante 14 avviene un page fault:
Domanda
Esercizio 3.
Calcolare la dim. (in byte) della FAT per un disco da 512MB con blocchi da 16 KB e indirizzi dei blocchi a 16 bit.
Quanti blocchi occuperebbe la FAT se memorizzata su disco?
Quanti accessi alla FAT occorrono per recuperare l’indirizzo fisico del blocco nel quale si trova il byte 125384 di un certo file del file system in questione?
Nota: 16K=24*210=214 512M=29 * 220=229
Soluzione La dimensione del disco è di’ 229 byte e quindi di 229/214= 215 blocchi di 214 byte.
Il campo di indirizzamento della FAT (16 bit=2 byte) consente di indirizzare tutti i blocchi.
La dimensione della FAT è di 215*2 = 216 byte. Se risiede su disco occupa 216/214= 4 blocchi.
Supponendo che i blocchi dell’archivio siano numerati a partire da 0, il byte 125384 si trova nel blocco 7.
Quindi occorre accedere 7 volte alla FAT per poter recuperare l’indirizzo fisico associato a tale byte.
Esercizio 4. Si supponga che, durante la fase della fsck che verifica la consistenza dei blocchi vengano prodotti i seguenti vettori:
indice di blocco: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
vettore blocchi liberi: 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 2 2 1
vettore blocchi occupati: 1 2 1 1 0 0 1 1 1 0 0 0 0 0 0 1 1 2
spiegare quali sono le azioni intraprese dalla fsck per ripristinare uno stato consistente del file system.
Soluzione:
La fsck intraprende un insieme di azioni volte ad avere ogni blocco presente con un solo 1 in una delle due tabelle
1. blocchi 0,1,2,3,7,8,15,16,17 : sono presenti sia nella lista dei blocchi liberi che nell’i-node di qualche file. La fsck gli elimina dalla lista libera e la ricostruisce, risultato
indice di blocco: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
vettore blocchi liberi: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
vettore blocchi occupati: 1 2 1 1 0 0 1 1 1 0 0 0 0 0 0 1 1 2
2. blocchi 4,5,10,11,12,13,14 : non sono presenti in nessuna delle due tabelle, la fsck assume siano liberi e li inserisce nella lista dei blocchi liberi, risultato
indice di blocco: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
vettore blocchi liberi: 0 0 0 0 1 1 0 0 0 1 1 1 1 1 1 0 0 0
vettore blocchi occupati: 1 2 1 1 0 0 1 1 1 0 0 0 0 0 0 1 1 2
3.
blocchi : 1,17 : sono presenti come blocchi dati di due file distinti,
la fsck
crea due copie diverse per ognuno (usando due blocchi liberi, ad
esempio il 4
ed il 5)
e corregge i corrispondenti i-node. Inoltre avverte l’utente di
possibili inconsistenze sui dati stampando un messaggio di errore.
Risultato
finale :
indice di blocco: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
vettore blocchi liberi: 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0
vettore blocchi occupati: 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1
Processi
Esercizio 5. Si consideri il problema dei filosofi a cena, con riferimento alla soluzione proposta nel testo e riportata di seguito:
#define
N 5
#define
LEFT (i+N-1)%N
#define
RIGHT (i+1)%N
#define
THINKING 0
#define
HUNGRY 1
#define
EATING 2
int state[N];
semaphore mutex=1;
semaphore s[N];
void pilosopher (int i) {
while
(TRUE) {
think();
takeForks(i);
eat();
putForks(i);
}
}
void takeForks (int i) {
down(&mutex);
state[i]
= HUNGRY ;
test(i);
up(&mutex);
down(&s[i]);
(-3-)
}
void putForks (int i) {
down(&mutex);
state[i]
= THINKING ; (-1-)
test(LEFT);
test(RIGHT);
(-2-)
up(&mutex);
}
void test (int i) {
if
(state[i] == HUNGRY && state[LEFT] != EATING &&
state[RIGHT] !=
EATING ) {
state[i] = EATING;
up(&s[i]);
}
}
Discutere cosa accade si invertiamo i due statement (-1-) e (-2-). E cosa accade se eliminiamo (-3-) ?
Soluzione:
·
Se si invertono le righe
(-1-) e (-2-), i
filosofi che rilasciano le bacchette non potranno riattivare eventuali
altri
filosofi adiacenti che vorrebbero mangiare.
Infatti al momento della chiamata
della procedura test, il filosofo mantiene lo stato EATING. In questo
modo i
filosofi in attesa di mangiare non
verranno mai riattivati dai filosofi che
terminano di mangiare, e resteranno perciò bloccati.
· Se si elimina la riga (-3-) dal codice dei filosofi a cena ci potrebbero essere dei filosofi che mangiano anche senza aver ottenuto le bacchette.