Esercizio - Allocazione contigua con first fit, best fit, worst fit e next fit (eserciziario, esercizi 35, 36, 54, 55, 102 e 115)
In questa pagina 8
Testo (eserciziario del corso di Sistemi Operativi, Ing. Informatica UniPD).
- Esercizio 35. Memoria centrale di 4 KB, in celle di 1 byte, allocata ai processi in modo contiguo con first fit: si sceglie un'area libera e si alloca il processo nella sua parte iniziale; quando un processo termina, la sua memoria diventa un'area libera, fusa con le eventuali aree libere adiacenti. Processi (dimensione in byte, istante di arrivo, durata): (2000, 0, 4), (1010, 2, 7), (500, 3, 5), (580, 6, 10), (1500, 7, 4). Visualizzare l'allocazione della memoria.
- Esercizio 36. Stessa memoria, algoritmo worst fit: (2048, 0, 10), (1970, 7, 13), (2000, 11, 19), (30, 13, 10). Visualizzare l'allocazione e valutare la frammentazione esterna e interna all'istante .
- Esercizio 54. Memoria di 4 KB organizzata in celle da 16 bit, best fit. : 2 KB, arrivo 0, durata 10; : Mbyte, 7, 13; : 500 byte, 11, 19; : 2400 bit, 13, 10. Quali aree sono occupate e quali libere subito dopo ogni caricamento e ogni terminazione?
- Esercizio 55. Partendo dal precedente: qual è la dimensione massima di un processo che può partire a ms? E a ms?
- Esercizio 102. Sistema con swapping e aree libere di 8, 4, 14, 18, 17, 9, 12, 15 KB, in quest'ordine. Quale area sceglie la politica next fit per caricare un segmento di 3 KB dopo aver caricato un segmento di 12 KB?
- Esercizio 115. Aree libere contigue, in quest'ordine: 8, 15, 3, 11, 5, 7, 20, 25 KB. Tre richieste, nell'ordine: 11 KB, 4 KB, 13 KB. A quali aree sono assegnate con best fit e con worst fit?
Come si ragiona
Ogni istante in cui succede qualcosa si fa in due passi: prima terminano i processi (la loro area si libera e si fonde con le aree libere vicine), poi si prova a caricare i processi arrivati. L'elenco delle aree libere va tenuto in ordine di indirizzo.
- first fit: la prima area (per indirizzo) abbastanza grande;
- best fit: la più piccola abbastanza grande (resto minimo);
- worst fit: la più grande (resto massimo);
- next fit: come first fit ma si riparte dall'ultima area usata.
Un processo va nella parte iniziale dell'area scelta: l'area si riduce dal basso.
Esercizio 35 (first fit)
Memoria . Gli intervalli sono indirizzi di byte.
| istante | evento | processi in memoria | aree libere (inizio-fine, dimensione) |
|---|---|---|---|
| 0 | arriva (2000) | 0-1999 | 2000-4095 (2096) |
| 2 | arriva (1010) | , 2000-3009 | 3010-4095 (1086) |
| 3 | arriva (500) | , , 3010-3509 | 3510-4095 (586) |
| 4 | termina (0+4) | , | 0-1999 (2000), 3510-4095 (586) |
| 6 | arriva (580) | 0-579, , | 580-1999 (1420), 3510-4095 (586) |
| 7 | arriva (1500) | nessun cambiamento: non entra | 580-1999 (1420), 3510-4095 (586) |
| 8 | termina (3+5) | , | 580-1999 (1420), 3010-4095 (1086) |
| 9 | termina (2+7): può partire | 0-579, 580-2079 | 2080-4095 (2016) |
| 13 | termina (9+4) | 580-4095 (3516) | |
| 16 | termina (6+10) | nessuno | 0-4095 (4096) |
Punti da notare:
- a , alla terminazione di , sono libere due aree (2000 e 586 byte);
- a , (580 byte) va nella prima delle due, perché entrambe bastano;
- a , (1500 byte) non entra: la memoria libera totale è , ma è divisa in due buchi, nessuno dei quali basta: è frammentazione esterna. aspetta. A i buchi sono 1420 e 1086 byte, ancora insufficienti; entra a , quando termina e i buchi si fondono in uno solo (la soluzione del corso si ferma a : il resto è la continuazione dello stesso procedimento).
Esercizio 36 (worst fit)
| istante | evento | scelta | memoria dopo |
|---|---|---|---|
| 0 | arriva (2048) | unica area (4096) | 0-2047; libera 2048-4095 |
| 7 | arriva (1970) | unica area (2048) | 2048-4017; libera 4018-4095 (78 byte) |
| 10 | termina | libere: 0-2047 (2048) e 4018-4095 (78) | |
| 11 | arriva (2000) | la più grande: 2048 | 0-1999; libere 2000-2047 (48) e 4018-4095 (78) |
| 13 | arriva (30) | la più grande: 78 | 4018-4047; libere 2000-2047 (48) e 4048-4095 (48) |
| 20 | termina (7+13) | libere 2000-4017 (2018) e 4048-4095 (48) | |
| 23 | termina (13+10) | libera 2000-4095 (2096) | |
| 30 | termina (11+19) | tutta libera |
Stato a : (0-1999), (2048-4017), (4018-4047) occupati.
- Frammentazione esterna: la memoria libera è byte in due buchi da 48. Un processo che chiedesse da 49 a 96 byte non potrebbe essere caricato, pur essendoci abbastanza memoria in totale.
- Frammentazione interna: nessuna, perché a ogni processo si assegna esattamente lo spazio che richiede (partizioni variabili).
Esercizio 54 (best fit, celle da 16 bit)
La memoria è di byte; con celle da 2 byte sono celle, numerate . Si convertono i processi in celle (arrotondando per eccesso):
| processo | dimensione | in byte | in celle |
|---|---|---|---|
| 2 KB | 2048 | 1024 | |
| Mbyte | |||
| 500 byte | 500 | 250 | |
| 2400 bit | 300 | 150 |
| istante | evento | scelta | memoria (celle) |
|---|---|---|---|
| 0 | unica area | 0-1023; libera 1024-2047 | |
| 7 | unica area | 1024-1548; 1549-2047 (499) | |
| 10 | termina | 0-1023 (1024) e 1549-2047 (499) | |
| 11 | (250) | best fit: la più piccola che basta è (499) | 1549-1798; 1799-2047 (249) |
| 13 | (150) | best fit: (249) invece di (1024) | 1799-1948; 1949-2047 (99) |
| 20 | termina (7+13) | libera 0-1548 (1549), 1949-2047 (99) | |
| 23 | termina | libera 0-1548 (1549) e 1799-2047 (249) | |
| 30 | termina | tutta libera |
Errore nella soluzione del corso. La soluzione riporta che occupa le celle da 1024 a 1549, e di conseguenza da 1550 a 1799 e da 1800 a 1949. Ma occupa 525 celle: da 1024 a . Tutti gli intervalli successivi sono quindi spostati di uno (una nota sulla slide corregge 1549 in 1548). Il resto del ragionamento (best fit sceglie sia a sia a ) è corretto.
Esercizio 55
La dimensione massima di un processo che può partire è quella della zona libera più grande.
- A : le aree libere sono (celle 0-1023, cioè 1024 celle KB) e (499 celle): il massimo è 2 KB.
- A : la zona più grande è ancora (1024 celle): 2 KB. Lo scontro tra e ha consumato solo .
Esercizio 102 (next fit)
Aree: 8, 4, 14, 18, 17, 9, 12, 15 KB.
- Carico 12 KB. Si parte dall'inizio: 8 non basta, 4 no, 14 sì: si usa l'area da 14 (resto 2 KB).
- Poi 3 KB con next fit: si riparte dall'ultima area usata, cioè dal resto di 2 KB (non basta), poi 18: 18 KB.
Risposta: l'area da 18 KB. Per confronto: first fit avrebbe scelto 8 KB (il primo che basta), best fit 4 KB, worst fit 18 KB (o la più grande rimasta).
Esercizio 115 (best fit e worst fit)
Aree: .
| richiesta | best fit (la più piccola che basta) | worst fit (la più grande) |
|---|---|---|
| 11 KB | area da 11 (resto 0) | area da 25 (resto 14) |
| 4 KB | area da 5 (resto 1) | area da 20 (resto 16) |
| 13 KB | area da 15 (resto 2) | area da 16 (il resto dell'area da 20: ; il 14 è più piccolo) |
Verifica del worst fit a 13 KB: dopo le prime due richieste le aree sono 8, 15, 3, 11, 5, 7, 16, 14: la più grande è 16, e basta per 13. Il worst fit ha lasciato 3 KB nell'area da 16 e ha consumato in tutto 3 grandi aree.
Errori tipici
- Dimenticare che a un istante prima terminano i processi e poi arrivano i nuovi (è la regola che dà l'ordine giusto).
- Non fondere le aree libere adiacenti dopo una terminazione.
- Dire che c'è frammentazione interna con partizioni variabili: c'è solo quella esterna.
- Convertire male celle e byte (con celle da 16 bit un'area da 4 KB ha 2048 celle) o dimenticare l'arrotondamento per eccesso.
- Scrivere come fine di un intervallo invece di .
Versione ripasso
Procedura. A ogni istante: prima terminano i processi (si fondono le aree libere adiacenti), poi arrivano i nuovi. First fit: prima area che basta; best fit: la più piccola che basta; worst fit: la più grande; next fit: parte dall'ultima area usata. Il processo va all'inizio dell'area, che si riduce. Fine intervallo .
Ex. 35 (first fit, 4096 byte). 0-1999; 2000-3009; 3010-3509; a libere 0-1999 e 3510-4095; in 0-579; a (1500) non entra (buchi 1420 e 586: frammentazione esterna); entra a (580-2079) quando termina.
Ex. 36 (worst fit). 0-2047; 2048-4017; a buchi 2048 e 78; in 0-1999 (resto 48); (30) nel buco da 78: 4018-4047. A : libere 48 + 48 byte, frammentazione esterna (non entra nulla da 49 a 96 byte), interna nulla.
Ex. 54 (best fit, celle da 2 byte, 2048 celle). 1024, 525, 250, 150 celle. in 1024-1548 (la soluzione del corso scrive 1549, con errore a catena sui successivi); 1549-1798; 1799-1948 (best fit sceglie il buco da 249, non quello da 1024).
Ex. 55. Il massimo è il buco più grande: 1024 celle KB a e a .
Ex. 102 (next fit). 12 KB nel 14 (resto 2), poi 3 KB: 2 non basta, 18 KB (first fit: 8; best fit: 4).
Ex. 115. Best fit: 11 11, 4 5, 13 15. Worst fit: 11 25, 4 20, 13 16 (resto del 20).
Tabelle da ricordare. Ex. 35 (first fit): 0-1999; 2000-3009; 3010-3509; termina (buchi 2000 e 586); 0-579; (1500) non entra (1420 e 586: esterna); termina (1420 e 1086); termina , in 580-2079; termina ; termina . Ex. 36 (worst fit): 2048-4017 (resta 78); buchi 2048 e 78; in 0-1999 (resta 48); (30) in 4018-4047 buchi 48 e 48; termina ; termina ; termina . Ex. 54 (best fit, celle da 2 byte): 1024 celle, 525, 250, 150; 1024-1548, 1549-1798, 1799-1948; e : massimo processo celle KB.
Errori tipici: non fondere i buchi; scambiare l'ordine terminazioni/arrivi; frammentazione interna con partizioni variabili; arrotondare male celle e byte; fine intervallo sbagliata di uno.