Salta al contenuto
Note per Studenti Esercizio - Inode e dimensione massima dei file (eserciziario, esercizi 63, 97, 105 e 111)

Esercizio - Inode e dimensione massima dei file (eserciziario, esercizi 63, 97, 105 e 111)

In questa pagina 6

Testo (eserciziario del corso di Sistemi Operativi, Ing. Informatica UniPD).

  • 63. Disco con file system di tipo UNIX: blocco da 4 KB, indirizzo di blocco di 4 byte, i-node con struttura tradizionale (10 puntatori diretti, 1 indiretto singolo, 1 indiretto doppio e 1 indiretto triplo). (a) Quanti blocchi (dati e di indirizzi) occupano i file A (20 KB), B (200 KB), C (2000 KB), D (20 000 KB)? (b) Qual è la dimensione massima di un file?
  • 97. File system con inode da 1 KB, 16 indici diretti di blocco, 1 blocco con 1 livello di indirezione e 1 blocco con 2 livelli di indirezione. Dimensione massima di un file? Ogni puntatore a un blocco occupa 4 B, anche i blocchi della memoria occupano 1 KB.
  • 105. Inode con blocchi da 512 byte; il nodo indice primario contiene 12 campi di indirizzo di blocchi di disco e 2 puntatori a nodi indice di primo e secondo livello di indirezione; gli indirizzi di blocco sono su 32 bit. Si vuole allocare un file composto da 10 000 record da 80 byte ciascuno; un record non può essere suddiviso in due blocchi diversi. Quanti blocchi servono per i dati? Quanti per gestire l'allocazione tramite nodi indice?
  • 111. Partizione di disco da 64 GB, blocchi dati da 1 KB e indici da 32 bit. Ampiezza massima di un file ottenibile con un i-node ampio esattamente un blocco, i-node principale con 12 indici di blocco, 1 blocco indice per singola indirezione e 1 per indirezione a 2 livelli. Quanto spazio occupa la struttura i-node necessaria per rappresentare tale file?

Teoria: File system - interfaccia, directory e implementazioneUn file è uno spazio di indirizzi logici contigui con attributi (nome, identificatore, tipo, posizione, dimensione, protezione, date) e operazioni (create, read, write, seek, delete, truncate, open, close); il sistema tiene una tabella dei file aperti di sistema e una per processo; l'accesso è sequenziale o diretto; le directory si organizzano a livello singolo, a due livelli, ad albero, a grafo aciclico (hard link e link simbolici) o a grafo generale; i permessi UNIX rwx per proprietario, gruppo e altri (chmod 754); il file system è a strati (file system logico, organizzazione dei file, file system di base, controllo dell'I/O), con strutture su disco (boot block, superblock, directory, FCB o inode) e in memoria; i blocchi si allocano in modo contiguo (extent), concatenato (FAT) o indicizzato (inode con puntatori diretti e indiretti, ext4 con extent); lo spazio libero con bitmap, lista, raggruppamento o conteggio; mount, VFS, file system distribuiti (NFS) e semantiche di consistenza.File system - interfaccia, directory e implementazione →.


La struttura

L'inode contiene i puntatori ai blocchi del file:

  • DD puntatori diretti, ciascuno a un blocco di dati;
  • 1 puntatore indiretto singolo: punta a un blocco di puntatori (nn blocchi dati);
  • 1 puntatore indiretto doppio: punta a un blocco di nn puntatori a blocchi di puntatori (n2n^2 blocchi dati);
  • eventualmente 1 puntatore indiretto triplo (n3n^3 blocchi dati).

Se il blocco è di BB byte e un puntatore di pp byte, un blocco contiene n=B/pn=B/p puntatori. Il numero massimo di blocchi dati è D+n+n2 (+n3)D+n+n^2\,(+n^3) e la dimensione massima è quel numero per BB. I blocchi indice sono blocchi in più (non contano come dati): per ff blocchi di dati si conta quanti blocchi di puntatori servono livello per livello.

Esercizio 63

B=4 KBB=4\text{ KB}, p=4p=4 byte: n=4096/4=1024n=4096/4=1024 puntatori per blocco.

(a) I blocchi di dati sono ⌈dimensione/4 KB⌉\lceil\text{dimensione}/4\text{ KB}\rceil:

file blocchi dati puntatori blocchi indice totale
A, 20 KB 5 5 diretti (su 10) 0 5
B, 200 KB 50 10 diretti + 40 nell'indiretto singolo 1 51
C, 2000 KB 500 10 diretti + 490 nell'indiretto singolo (490≤1024490\le1024) 1 501
D, 20 000 KB 5000 10 diretti + 1024 nell'indiretto singolo + 3966 nel doppio 1+1+41+1+4 5006

Per D: i primi 10 blocchi usano i diretti, i successivi 10241024 l'indiretto singolo (1 blocco indice). I restanti 5000−10−1024=39665000-10-1024=3966 vanno nel doppio: 1 blocco indice di primo livello, che punta a ⌈3966/1024⌉=4\lceil3966/1024\rceil=4 blocchi indice di secondo livello (tre pieni da 1024 e uno con 3966−3072=8943966-3072=894 puntatori). Blocchi di indici: 1 (singolo)+1+4 (doppio)=61\,(\text{singolo})+1+4\,(\text{doppio})=6; totale 5000+6=50065000+6=\mathbf{5006}. (La soluzione del corso scrive 5000+1+5=50065000+1+5=5006.)

(b) La dimensione massima è, in blocchi,

10+1024+10242+10243=1 074 791 434 blocchi10+1024+1024^2+1024^3=1\,074\,791\,434\ \text{blocchi}

e quindi 1 074 791 434⋅4096≈4,0039⋅2401\,074\,791\,434\cdot4096\approx4{,}0039\cdot2^{40} byte, circa 4 TB: il termine che conta è 102431024^3 blocchi =230⋅212=242=2^{30}\cdot2^{12}=2^{42} byte =4=4 TB; gli altri (4 GB, 4 MB, 40 KB) sono molto più piccoli.

Esercizio 97

n=1024/4=256n=1024/4=256 puntatori per blocco (inode di 1 KB, 16 diretti, un indiretto singolo, un indiretto doppio):

  • 16 blocchi dati diretti: 1616;
  • indiretto singolo: 256256 blocchi dati (costa 1 blocco indice);
  • indiretto doppio: 256⋅256=216=65 536256\cdot256=2^{16}=65\,536 blocchi dati (costa 1 blocco + 256 blocchi indice).

dimensione massima=(16+256+65 536)⋅1 KB=65 808 KB≈64,3 MB.\text{dimensione massima}=(16+256+65\,536)\cdot1\text{ KB}=65\,808\text{ KB}\approx64{,}3\text{ MB}.

Esercizio 105

Blocchi dati. Un blocco da 512 byte contiene ⌊512/80⌋=6\lfloor512/80\rfloor=6 record (6 record occupano 480 byte; i 32 rimanenti si sprecano perché un record non può stare in due blocchi). Servono ⌈10 000/6⌉=1667\lceil10\,000/6\rceil=1667 blocchi di dati.

Blocchi di indici. Un blocco indice da 512 byte con indirizzi da 4 byte contiene 512/4=128512/4=128 indirizzi.

  • 12 blocchi sono indirizzati direttamente dal nodo indice principale; ne restano 1667−12=16551667-12=1655.
  • Con indirizzamento singolo se ne indirizzano 128: ne restano 1655−128=15271655-128=1527. Serve 1 blocco di indirizzi.
  • Con indirizzamento doppio: ⌈1527/128⌉=12\lceil1527/128\rceil=12 blocchi di secondo livello (11 pieni e 1 con 1527−1408=1191527-1408=119 puntatori), più 1 blocco di primo livello: 1+12=131+12=13 blocchi.

Blocchi per gestire l'allocazione: 1 (nodo indice principale) + 1+\ 1 (singolo) + 13+\ 13 (doppio) =15=\mathbf{15}.

Totale: 1667+15=16821667+15=1682 blocchi =1682⋅512=861 184=1682\cdot512=861\,184 byte =841=841 KB di occupazione totale.

Esercizio 111

Dimensione massima. Blocco da 1 KB, indici da 32 bit (4 byte): n=256n=256. Con 12 diretti, 1 singolo, 1 doppio:

12+256+2562=12+256+65 536=65 804 blocchi=65 804 KB.12+256+256^2=12+256+65\,536=65\,804\ \text{blocchi}=65\,804\ \text{KB}.

(La partizione è da 64 GB =236=2^{36} byte, quindi 236/210=2262^{36}/2^{10}=2^{26} blocchi: gli indici da 32 bit bastano.)

Spazio dell'inode. Per rappresentare un file che usa tutto: 1 blocco per l'inode principale, 1 per l'indirezione singola, 1 per il primo livello dell'indirezione doppia e 256 per il secondo livello:

1+1+(1+256)=259 blocchi=259 KB.1+1+(1+256)=259\ \text{blocchi}=259\text{ KB}.


Errori tipici

  • Contare i blocchi indice nella dimensione massima del file: sono spazio in più.
  • Dimenticare che i puntatori dell'indirezione doppia occupano 1+⌈blocchi/n⌉1+\lceil\text{blocchi}/n\rceil blocchi indice (non solo 1).
  • Nell'esercizio 105, ignorare che un record non può essere diviso (6 record per blocco, non 512/80=6,4512/80=6{,}4).
  • Confondere i puntatori per blocco n=B/pn=B/p con la dimensione del blocco.
  • Nell'esercizio 63, non accorgersi che per il file D il singolo indiretto non basta.

Versione ripasso

Formule. n=B/pn=B/p puntatori per blocco; blocchi dati massimi D+n+n2 (+n3)D+n+n^2\,(+n^3); massimo == blocchi ×B\times B; i blocchi indice sono in più. Indiretto doppio: 1 blocco + ⌈restanti/n⌉\lceil\text{restanti}/n\rceil.

63 (B=4B=4 KB, p=4p=4, n=1024n=1024, 10 diretti). A 20 KB: 5 blocchi. B 200 KB: 50+1=5150+1=51. C 2000 KB: 500+1=501500+1=501. D 20 000 KB: 5000 dati (10 diretti, 1024 singolo, 3966 doppio) + 1+1+4=5006+\ 1+1+4=5006. Massimo (10+1024+10242+10243)⋅4(10+1024+1024^2+1024^3)\cdot4 KB ≈4\approx4 TB.

97. n=256n=256: (16+256+65 536)(16+256+65\,536) KB =65 808=65\,808 KB ≈64,3\approx64{,}3 MB.

105. 6 record per blocco; ⌈10 000/6⌉=1667\lceil10\,000/6\rceil=1667 blocchi dati; n=128n=128; 1667−12=16551667-12=1655; −128=1527-128=1527 nel doppio →1+12=13\to1+12=13 blocchi; indici 1+1+13=151+1+13=15; totale 16821682 blocchi =861 184=861\,184 byte (841 KB).

111. n=256n=256: 12+256+65 536=65 80412+256+65\,536=65\,804 blocchi (65 804 KB); struttura: 1+1+(1+256)=2591+1+(1+256)=259 KB.

Passaggi. 63 D: 5000 blocchi dati =10=10 diretti + 1024+\,1024 (singolo) + 3966+\,3966 (doppio); indici 1+(1+⌈3966/1024⌉)=1+1+4=61+(1+\lceil3966/1024\rceil)=1+1+4=6; totale 5006. 105: record per blocco ⌊512/80⌋=6\lfloor512/80\rfloor=6; dati ⌈10 000/6⌉=1667\lceil10\,000/6\rceil=1667; 1667−12=16551667-12=1655; 1655−128=15271655-128=1527; doppio ⌈1527/128⌉=12\lceil1527/128\rceil=12 blocchi + 1+\,1; indici 1+1+13=151+1+13=15; totale 16821682 blocchi =861 184=861\,184 B. 111: 12+256+65 536=65 80412+256+65\,536=65\,804 KB; struttura 1+1+1+256=2591+1+1+256=259 KB. 97: (16+256+65 536)(16+256+65\,536) KB =65 808=65\,808 KB.

Errori tipici: blocchi indice nella dimensione massima; indiretto doppio con 1 solo blocco indice; record divisi tra blocchi; n=Bn=B invece di B/pB/p; dimenticare il doppio per D.

Teoria: File system - interfaccia, directory e implementazioneUn file è uno spazio di indirizzi logici contigui con attributi (nome, identificatore, tipo, posizione, dimensione, protezione, date) e operazioni (create, read, write, seek, delete, truncate, open, close); il sistema tiene una tabella dei file aperti di sistema e una per processo; l'accesso è sequenziale o diretto; le directory si organizzano a livello singolo, a due livelli, ad albero, a grafo aciclico (hard link e link simbolici) o a grafo generale; i permessi UNIX rwx per proprietario, gruppo e altri (chmod 754); il file system è a strati (file system logico, organizzazione dei file, file system di base, controllo dell'I/O), con strutture su disco (boot block, superblock, directory, FCB o inode) e in memoria; i blocchi si allocano in modo contiguo (extent), concatenato (FAT) o indicizzato (inode con puntatori diretti e indiretti, ext4 con extent); lo spazio libero con bitmap, lista, raggruppamento o conteggio; mount, VFS, file system distribuiti (NFS) e semantiche di consistenza.File system - interfaccia, directory e implementazione →.

Teoria collegata