2. Ejemplo i-nodos
• Mínimo de accesos a disco para:
open(“/var/spool/mail/alumnos/bujuan”, O_RDONLY);
• Las entradas de subdirectorios están todas en el 1er
bloque de su dir. padre salvo: alumnos (en el 4º bloque)
y bujuan (en el 2º bloque)
• Cachés de i-nodos y datos vacías inicialmente.
3. Ejemplo i-nodos
1er bloque de ‘/’
1er bloque de ‘var’
1er bloque de ‘spool’
4º bloque de ‘mail’
2º bloque de ‘alumnos’
4. Ejemplo i-nodos (2)
• Bloques de 2KB
• i-nodos con 12 dir. directas, 1 indir. simple, 1 indir.
doble y 1 indir. triple.
• Dirección de bloque de 4 bytes
• El archivo bujuan ocupa 6MB
• ¿Cuántos bloques se necesitan para almacenarlo?
5. Ejemplo i-nodos (2)
• El archivo ocupa 6 MB = 6 x 1024 KB. Como cada
bloque son 2KB, ocupa (6 x 1024)/2 = 3072 bloques
• Pero el sistema de i-nodos también ocupa sitio
• En un bloque de índices nos caben (2K)/4 = 2048/4 =
512 direcciones
• Los 12 primeros bl. de datos se obtienen directamente
desde el i-nodo
• Los 512 siguientes requieren 1 bloque indirecto simple
6. Ejemplo i-nodos (2)
• En el siguiente nivel tenemos 1 bloque indirecto
doble que permite indexar hasta 512 bloques
indirectos simples.
• Como nos quedan 3072-(512+12)=2548 bloques de
datos por indexar, en grupos de 512
tendríamos:2548/512=4,97 es decir 5 bloques
indirectos simples
• Solución: 3072 datos + 1 ind. simple + 1 indir. doble
+ 5 indir. simples = 3079 bloques
7. Ejemplo i-nodos (3)
• A continuación, después del open, hacemos
lseek(fd,4194304,SEEK_SET);
• ¿Cuántos bloques tengo que leer de disco si,
inmediatamente después, quiero ejecutar esto?
c=fgetc(fd);
• Nota: 4194304 = 4 x 220
8. Ejemplo i-nodos (3)
• Los primeros 4 x 220 bytes se numeran 0 … (4 x 220-1)
• Están almacenados en los primeros (4 x 220)/(2 x 210 ) bloques =
2 x 210 bloques = 2048 bloques y se numeran
0 … 2047
• El byte número 4 x 220 está en el 2049-ésimo bloque (en número,
el 2048).
• Los 12 primeros bloques (0 … 11) van por índice directo
• Los 512 siguientes (12 … 523) van por indirecto simple
• Los 512x512 siguientes (524 … 524+5122 – 1) siguientes van
por indirecto doble. Como 2048 está en ese intervalo …
Solución: 1 indir. doble + 1 indir. simple + 1 datos = 3 bloques
9. Ejemplo i-nodos (4)
• Sabiendo que 1 i-nodo ocupa 128 bytes
• El número de i-nodo de ‘/’ es el 2, el de bujuan es el 35
y se empieza a contar en el i-nodo 1
• La boot ocupa 1 bloque y el superbloque ocupa 8 bloques
• Los bloques lógicos empiezan a contar en el 0
• ¿En qué bloque lógico se encuentra el i-nodo de ‘/’?
¿y el i-nodo de de bujuan?
10. Ejemplo i-nodos (4)
Solución
• 1 i-nodo ocupa 128 B = 27 B
• 1 bloque son 2 KB = 2 x 210 B = 211 B = (211/27 ) i-nodos = 24
i-nodos = 16 i-nodos
• El bloque lógico 0 es la boot, los bloques lógicos 1..8 son el
superbloque
• El bloque 9 contiene los i-nodos 1 al 16. Por tanto:
bloque lógico de ‘/’ = 9
• El bloque 10 contiene los i-nodos 17 al 32. El bloque 11
contiene los i-nodos 33 al 48. Por tanto:
bloque lógico de bujuan = 11