Esercizio - Spazio libero con bitmap e lista concatenata (eserciziario, esercizi 41, 98 e 120)
In questa pagina 4
Testo (eserciziario del corso di Sistemi Operativi, Ing. Informatica UniPD).
Esercizio 41. Ogni riquadro rappresenta un blocco da 4 KB, con in grigio il suo indirizzo; in ogni blocco si riserva un byte per il puntatore al blocco successivo. Il contenuto di un riquadro può essere: un numero non negativo (il blocco è occupato dal contenuto di un file che prosegue nel blocco ); il numero (parte finale di un file); nulla (blocco libero). Su questo disco è memorizzato un intero file system con due file che iniziano nei blocchi 9 e 12.
blocco 0 1 2 3 4 5 6 7 8 9 10 11 contenuto 10 18 11 16 20 blocco 12 13 14 15 16 17 18 19 20 21 22 23 contenuto 5 1 8 17 23 - La rappresentazione dei blocchi del disco contiene errori? Perché?
- Se lo spazio libero è gestito con una bitmap (1 se il blocco è libero, 0 se occupato), qual è il contenuto della bitmap?
- Se lo spazio libero è allocato scandendo la bitmap da sinistra verso destra, in quali blocchi verrebbe memorizzato un nuovo file lungo 21 547 byte?
Esercizio 98. Disco da 16 GB diviso in blocchi da 1 KB. Due strutture per i blocchi liberi: lista concatenata e bitmap. Nel primo caso ogni elemento è un blocco che contiene indici da 32 bit, l'ultimo dei quali è riservato al blocco successivo della lista libera. Nel secondo, un bit 1 o 0 dice se il blocco è libero o utilizzato. Calcolare l'occupazione di memoria delle due strutture.
Esercizio 120. Un file system tiene traccia dei blocchi liberi con bitmap o lista concatenata. Il sistema ha blocchi di cui in uso; ogni eventuale puntatore a un blocco è di bit. Calcolare, con i passaggi, la dimensione della bitmap e della lista concatenata.
Esercizio 41
1. Ci sono errori? Si seguono le catene dei due file:
- file che inizia in 9: (fine);
- file che inizia in 12: (fine).
Il blocco 23 contiene il valore 23: punta a se stesso, ma non appartiene a nessuna delle due catene. È un errore: un blocco "occupato" che non fa parte di alcun file e che indica come successivo se stesso (un file la cui continuazione è lo stesso blocco non può terminare). Bisogna controllare anche che non ci siano blocchi formalmente occupati ma che non fanno parte di nessun file: è proprio il caso del 23.
2. La bitmap. Si assegna 1 ai blocchi liberi e 0 agli occupati. Blocchi occupati: 1, 5, 8, 9, 10, 11, 12, 16, 17, 18, 20, 23 (il 23 è marcato come occupato nella rappresentazione). I blocchi liberi sono 0, 2, 3, 4, 6, 7, 13, 14, 15, 19, 21, 22.
| blocco | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bit | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
| blocco | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bit | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
Bitmap: 101110110000 011100010110, cioè 101110110000011100010110 (la stessa della soluzione del corso).
3. Un nuovo file da 21 547 byte. In ogni blocco da 4 KB (4096 byte) uno è riservato al puntatore (o al valore speciale di fine file): restano 4095 byte per i dati. Servono
Scandendo la bitmap da sinistra verso destra si prendono i primi 6 bit a 1: blocchi 0, 2, 3, 4, 6, 7.
Esercizio 98
byte e blocchi da : i blocchi sono .
Lista concatenata. Ogni blocco della lista contiene indici da 32 bit; uno è riservato al collegamento con il blocco successivo della lista, quindi 255 indici di blocchi liberi per blocco. Nel caso peggiore (tutto il disco libero) servono
di lista, cioè KB MB (un po' più di MB).
Bitmap. Un bit per blocco: bit byte KB , sempre (qualunque sia la quantità di spazio libero).
Confronto: la bitmap occupa 2 MB fissi, la lista fino a circa 64 MB nel caso peggiore (disco tutto libero) e quasi nulla quando il disco è pieno.
Esercizio 120
Bitmap. 1 bit per blocco: bit.
Lista concatenata. C'è un puntatore per ogni blocco libero; i blocchi liberi sono e ogni puntatore è di bit:
Quindi la lista è più piccola della bitmap quando , cioè quando la frazione di blocchi liberi è minore di (disco quasi pieno).
Esempio. , : la bitmap è bit; la lista conviene solo se i blocchi liberi sono meno di , cioè il 3,1% del disco.
Errori tipici
- Non accorgersi del blocco 23 (puntatore a se stesso) nell'esercizio 41.
- Mettere nella bitmap 1 per occupato: qui 1 significa libero.
- Calcolare i blocchi del nuovo file con 4096 byte di dati invece di 4095.
- Nell'esercizio 98, usare 256 indici liberi per blocco invece di 255 (uno è il collegamento).
- Scrivere per la lista invece di : solo i blocchi liberi hanno un puntatore.
Versione ripasso
41. Catene: ; . Errore: il blocco 23 punta a se stesso e non è in nessun file. Occupati: 1, 5, 8, 9, 10, 11, 12, 16, 17, 18, 20, 23; liberi: 0, 2, 3, 4, 6, 7, 13, 14, 15, 19, 21, 22. Bitmap (1 = libero): 101110110000011100010110. Nuovo file da 21 547 byte: 4095 byte di dati per blocco blocchi 0, 2, 3, 4, 6, 7.
98. blocchi. Lista: 255 indici liberi per blocco (256 meno il collegamento): blocchi MB. Bitmap: bit MB, fissi.
120. Bitmap bit; lista bit (un puntatore per blocco libero). La lista conviene se .
Passaggi. Ex. 41: catene e ; il blocco 23 punta a se stesso e non è in un file (errore, marcato occupato); occupati 1, 5, 8, 9, 10, 11, 12, 16, 17, 18, 20, 23; bitmap 101110110000011100010110; file da 21 547 B: blocchi 0, 2, 3, 4, 6, 7. Ex. 98: blocchi; lista blocchi MB; bitmap 2 MB. Ex. 120: bitmap bit, lista bit.
Errori tipici: non vedere il blocco 23; 1 = occupato; 4096 invece di 4095 byte di dati; 256 invece di 255 indici; invece di .