100 likes | 229 Views
Sistema de archivos . TGR Sistemas Operativos 14/10/2013. Ejemplo i-nodos. Mínimo de accesos a disco para: open(“/var/spool/mail/alumnos/bujuan”, O_RDONLY);
E N D
Sistema de archivos TGR Sistemas Operativos 14/10/2013
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.
Ejemplo i-nodos Pero: en el mejor de los casos, todos los i-nodos vienen ya en este bloque Solución: 1 bloque con los i-nodos + 9 bloques de datos = 10 accesos 1er bloque de ‘var’ 1er bloque de ‘/’ 1er bloque de ‘spool’ i-nodo de ‘alumnos’ i-nodo de ‘bujuan’ i-nodo de ‘mail’ i-nodo de ‘spool’ i-nodo de ‘var’ i-nodo de ‘/’ Entrada ‘var’ Entr. ‘spool’ Entr. ‘mail’ 4º bloque de ‘mail’ 2º bloque de ‘alumnos’ Total = 15 accesos = 6 de i-nodos + 9 de datos En. ‘bujuan’ En. ‘alumnos’ 6 15 13 12 14 9 8 4 10 5 11 7 3 2 1
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?
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
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
Ejemplo i-nodos (3) • A continuación, después del open, hacemoslseek(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
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 numeran0 … 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
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?
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