Post on 01-Oct-2018
Sistemas Operativos II (II-UJI) Gestión del SF1
SS OOIIIIIIIITema 5. Gestión del Sistema de Ficheros
Índice
n Introducción
n Ficheros
n El sistema de directorios
n Protección del sistema de ficheros
n Compartición de ficheros
n Estructura del sistema de ficheros
n Montaje de sistemas de ficheros
n Mecanismos de incremento de prestaciones
n Implementación de sistemas de ficheros
n Servicios POSIX para gestión de ficheros y directorios
Sistemas Operativos II (II-UJI) Gestión del SF2
SS OOIIIIIIIITema 5. Gestión del Sistema de Ficheros
Índice
n Implementación de sistemas de ficheros3 Gestión de ficheros en Linux3 Gestión de ficheros en Windows NT/2000
Sistemas Operativos II (II-UJI) Gestión del SF3
SS OOIIIIIIIITema 5. Gestión del Sistema de Ficheros
Bibliografía
n J. Carretero et al. Sistemas Operativos: Una Visión Aplicada. McGraw-Hill. 2001. Capítulo 8.
n W. Stallings. Sistemas Operativos. Prenctice-Hall. 2001. Capítulo 12.
n M. Beck. Linux Kernel Internals. Addison-Wesley. 1997.
n H. Custer. Inside Windows NT. Microsoft Press. 1993.
Sistemas Operativos II (II-UJI) Gestión del SF4
SS OOIIIIIIIITema 5. Gestión del Sistema de Ficheros
Índice
n Introducción
n Ficheros
n El sistema de directorios
n Protección del sistema de ficheros
n Compartición de ficheros
n Estructura del sistema de ficheros
n Montaje de sistemas de ficheros
n Mecanismos de incremento de prestaciones
n Implementación de sistemas de ficheros
n Servicios POSIX para gestión de ficheros y directorios
*
Sistemas Operativos II (II-UJI) Gestión del SF5
SS OOIIIIIIIIIntroducción
n Sistema de gestión de ficheros:
u Conjunto de SW del sistema que ofrece a los usuarios y aplicaciones unos servicios relativos al empleo de archivos
n Funciones del sistema de gestión de ficheros:
u Ofrecer un conjunto estándar de rutinas de interfaz de E/S
u Mostrar al usuario los diferentes dispositivos de almacenamiento masivo como sistemas de ficheros (SF)
u Cumplir con las necesidades de gestión de datosu Protección del SFu Integridad del SFu Optimizar el rendimiento
Visión de usuario
Correspondencia entre visión de usuario y sistema físico de almacenamiento masivo
Muy interrelacionado con el sistema de E/S
Sistemas Operativos II (II-UJI) Gestión del SF6
SS OOIIIIIIIIIntroducción
Interfaz con el usuario
Sistema lógico de ficheros y directorios
Caché de bloques
Dispositivo de almacenamiento lógico
Manejador de dispositivo
Controlador de dispositivo físico
Sistemas Operativos II (II-UJI) Gestión del SF7
SS OOIIIIIIIIIntroducción
0 1 840 1340 1756 8322
Dispositivo lógico
0 1 2 3
Fichero lógico
4 5 6 7
Sistemas Operativos II (II-UJI) Gestión del SF8
SS OOIIIIIIIIIntroducción
Usuario
read (fd, buffer, tamaño)
buffer
Bloques del fichero
Bloques del dispositivo
Bloques del disco
Fichero lógico
Fichero lógico
Manejador de disco y
dispositivo
Bloques lógicos(Servidor
de bloques)
3
1340
1340
1756
1756
840
840
8322
8322
4 5 6
tamaño
Sistemas Operativos II (II-UJI) Gestión del SF9
SS OOIIIIIIIITamaño bloque, ancho de banda y uso de disco
Tamaño de Bloque
ancho de banda
uso del disco
Anc
h ode
Ban
d a(K
byte
s/se
c )
Us o
d elE
spac
iode
Dis
co
0
50
100
500
800
256 512 1K 2K 4K 8K 16K 32K
0
100 %
25
50
75
Asumiendo tamaño medio de fichero = 14 Kby
Tamaño bloque recomendado = 4-8 Kby
Sistemas Operativos II (II-UJI) Gestión del SF10
SS OOIIIIIIIITema 5. Gestión del Sistema de Ficheros
Índice
n Introducción
n Ficheros
n El sistema de directorios
n Protección del sistema de ficheros
n Compartición de ficheros
n Estructura del sistema de ficheros
n Montaje de sistemas de ficheros
n Mecanismos de incremento de prestaciones
n Implementación de sistemas de ficheros
n Servicios POSIX para gestión de ficheros y directorios
*
Sistemas Operativos II (II-UJI) Gestión del SF11
SS OOIIIIIIIIDefinición de fichero
n ¿Qué es un fichero?
u Conjunto de información no volátil almacenada en un dispositivo de almacenamiento masivo que tiene unas características
u Organización lógica para el usuario
n Atributos de un fichero:
u Tipos:l Estáticos: nombre, tipo, ubicación, tamaño, permisos, fechas, etc.l Dinámicos: puntero, contador de aperturas, etc.
Sistemas Operativos II (II-UJI) Gestión del SF12
SS OOIIIIIIIINombres de ficheros y extensiones
n Nombres:
u Longitud máxima para MS-DOS 8 caracteres y 4096 para UNIXu Sensibilidad mayúsculas: MS-DOS y Windows no distingue entre
mayúsculas, UNIX sí
n Extensiones:
u Indican al SO, a las aplicaciones o a los usuarios características del contenido del fichero
u Obligatorias o no según SO: MS-DOS sí, UNIX no
.c necesaria para compilador de lenguaje C
.z necesaria para aplicación compressPara el SO no hay diferencia entre ambos tipos de ficheros
Sistemas Operativos II (II-UJI) Gestión del SF13
SS OOIIIIIIIITipos de ficheros
n Cambian de un SO a otros
n Todos los SO deben reconocer al menos un tipo de fichero: sus propios ficheros ejecutables
u Reconocidos por la extensión ou Reconocidos por su contenido
l Ejemplo: Sistemas UNIX
Prácticamente distinguen sólo los ficheros ejecutables No almacenan entre los atributos el tipo de fichero En cabecera aparece información para que el SO descifre la
estructura del ejecutable Número mágico: número que aparece en cabecera del fichero
e indica el tipo de fichero
Sistemas Operativos II (II-UJI) Gestión del SF14
SS OOIIIIIIIITipos de ficheros
Estructura de fichero ejecutable en Linux
Cabecera de sección 1
Cabecera de sección n
Sección 1
Sección 2
Sección n
Tipo de sección,tamaño de la sección dirección virtual
Otrainformación
Datos con valor inicial
Informaciónde carga
Tabla desímbolos
Datos con valor inicial
Código
Tipo de sección,tamaño de la sección dirección virtual
Cabecera primaria
Número mágico
Número de secciones
Tamaño segmento texto
Tamaño segmento datos
Tamaño datos sin valorinicial
Tamaño tabla de símbolos
Valor inicial de registros
Dirección inicial
Opciones
. ..
Sistemas Operativos II (II-UJI) Gestión del SF15
SS OOIIIIIIIIEstructura interna del fichero
n Sin formato:
u Secuencia de bytesu El usuario es el encargado de interpretar la información almacenada en
el fichero. La información almacenada no tiene ninguna estructura lógica
n Con formato:
u Estructura sencilla de registros:l Secuencia de registros (de longitud fija o variable)l La información almacenada está estructurada en registros con
estructura lógica
u Estructuras complejas:l Documentos con formato (HTML, postscript)l Fichero de carga reubicable
Sistemas Operativos II (II-UJI) Gestión del SF16
SS OOIIIIIIIIEstructura interna del fichero
Byte o registro de
longitud fija
Árbol de registros
Cabecera
Módulo objeto
CabeceraMódulo objeto
Estructuracon
formato
Registros de longitudvariable
Sistemas Operativos II (II-UJI) Gestión del SF17
SS OOIIIIIIIITema 5. Gestión del Sistema de Ficheros
Índice
n Introducción
n Ficheros
n El sistema de directorios
n Protección del sistema de ficheros
n Compartición de ficheros
n Estructura del sistema de ficheros
n Montaje de sistemas de ficheros
n Mecanismos de incremento de prestaciones
n Implementación de sistemas de ficheros
n Servicios POSIX para gestión de ficheros y directorios
*
Sistemas Operativos II (II-UJI) Gestión del SF18
SS OOIIIIIIIIEl sistema de directorios
n ¿Qué es un directorio?
u Fichero especial en el cual la información almacenada pertenece al SO y no a los usuarios
u Puesto que un directorio es un fichero (especial), tendrá las mismas características que las indicadas para los ficheros
Sistemas Operativos II (II-UJI) Gestión del SF19
SS OOIIIIIIIIEl sistema de directorios
n Estructura un directorio:
u La forma más sencilla de ver un directorio es como un fichero organizado en registros, donde cada registro contiene la información relativa a un fichero o subdirectorio que contiene
NombreInodo
Directorio de UNIX
Directorio de MS-DOS
NombreTipo de archivo
AtributosFecha Tamaño
Hora
Númerodel primerbloque
Sistemas Operativos II (II-UJI) Gestión del SF20
SS OOIIIIIIIIEl sistema de directorios
n Finalidad doble de un directorio:
u Cara al usuario: Permite organizar los ficheros de ésteu Cara al SO: Permite transformar un nombre de fichero en las estructuras
de datos necesarias para acceder a los datos del fichero
Sistemas Operativos II (II-UJI) Gestión del SF21
SS OOIIIIIIIIOrganización de directorios
n Directorio de un nivel
n Árbol de directorios
n Grafo de directorios:
u Permite compartición de ficheros y subdirectoriosu Forma habitual de compartir ficheros: creación de enlaces
Sistemas Operativos II (II-UJI) Gestión del SF22
SS OOIIIIIIIIOrganización de directorios
n Grafo de directorios:
001001010010111100110101
.C
ASCII
001001010010111100110101
001001010010111100110101
001001010010111100110101
001001010010111100110101
.C ASCII
Acíclico
Sistemas Operativos II (II-UJI) Gestión del SF23
SS OOIIIIIIIIEnlaces
n Tipos de enlaces:
u Enlaces simbólicos:l Fichero nuevo con el nombre del fichero destino dentrol Acceso directo de Windows o “soft link” de UNIX
u Enlaces físicos:l Un único fichero con contador de enlacesl “Hard link” de UNIX
Sistemas Operativos II (II-UJI) Gestión del SF24
SS OOIIIIIIIIEnlaces
n Enlaces físicos:
u Los enlaces se contabilizan a través de un contador de enlaces que aparece como atributo en el inodo
u Crear de un enlace ⇒ Incrementar contador de enlacesu Borrar un fichero ⇒ Decrementar contador de enlaces
l Puede hacerse por varios caminosl Sólo se borran los datos de un fichero si el contador de enlaces es
cero tras el decremento
Sistemas Operativos II (II-UJI) Gestión del SF25
SS OOIIIIIIIIEnlaces
$pwd/home/castano$ln f f.hard$ln –s f f.soft
Bloque de /home/castano
10.30..20f20f.hard40f.soft......
Inodo nº 40 (f.soft)
Otros campos
800 NILNIL NILNIL NILNIL NIL
FREE
/home/castano/f
Bloque 800
Inodo nº 20 (f y f.hard)
Otros campos
600 NILNIL NILNIL NILNIL NIL FREE
Datos
Bloque 600
Sistemas Operativos II (II-UJI) Gestión del SF26
SS OOIIIIIIIIEnlaces
n Peligro de los enlaces:
u Existencia de bucles en el árbol de directorios (ciclos en el grafo)l No permiten recorrer el árbol de directorios completol Pueden hacer que una traducción de nombre no acabe nunca
u Soluciones:l Permitir sólo enlaces a ficheros, no a subdirectoriosl Algoritmo de búsqueda de bucle cuando se crea un enlace
u Limitaciones de implementación en UNIX:l No se pueden establecer enlaces duros entre SF diferentesl No se pueden establecer enlaces duros a un directorio
Sistemas Operativos II (II-UJI) Gestión del SF27
SS OOIIIIIIIITema 5. Gestión del Sistema de Ficheros
Índice
n Introducción
n Ficheros
n El sistema de directorios
n Protección del sistema de ficheros
n Compartición de ficheros
n Estructura del sistema de ficheros
n Montaje de sistemas de ficheros
n Mecanismos de incremento de prestaciones
n Implementación de sistemas de ficheros
n Servicios POSIX para gestión de ficheros y directorios
*
Sistemas Operativos II (II-UJI) Gestión del SF28
SS OOIIIIIIIIEsquema de protección de datos
Dispositivo compartido por todos los usuarios
Sistema de protección de datosControl de acceso a los ficheros por
parte de los usuarios
n Capacidades
u Cada fichero (y directorio) tiene asignadas unas capacidades (permisos) que indican qué usuarios y qué tipo de acceso pueden hacer
n Listas de control de acceso (ACL “Access Control List”):
u Cada fichero (y directorio) tiene una lista de los usuarios que pueden acceder y qué tipo de acceso pueden hacer
Sistemas Operativos II (II-UJI) Gestión del SF29
SS OOIIIIIIIIPermisos de acceso en UNIX
n Permisos básicos:
u Formato en octal:
u Permisos de lectura y escritura para usuario, miembros del grupo y otrosu Bit “sticky” (pegajoso)u Bits “setuid” y “setguid”
n Permisos extendidos
sst rwx rwx rwx
Sistemas Operativos II (II-UJI) Gestión del SF30
SS OOIIIIIIIIPermisos de acceso en UNIX
n Bit “sticky”:
u Para ficheros:l El fichero permanece cargado en MC (no se lleva al dispositivo de
intercambio)
u Para directorios:l Los ficheros y subdirectorios del directorio sólo pueden ser borrados
por el propietario del fichero o subdirectorio
Incluso aunque otros usuarios tengan permiso de escritura sobre el fichero o permiso de acceso sobre el subdirectorio
l Se usa para directorios de acceso público: Ejemplo /tmp
Sistemas Operativos II (II-UJI) Gestión del SF31
SS OOIIIIIIIIPermisos de acceso en UNIX
n Bit “sticky” (cont.):
u Ejemplos:$ ls -ld /tmpdrwxrwxrwt 15 root root 12288 abr 20 16:32 /tmp$ pwd/users/icc/castano$ mkdir dir$ chmod 1770 dir$ ls -ld dirdrwxrwx--T 2 castano icc 4096 abr 20 16:32 dir$ chmod 1777 dir$ ls -ld dirdrwxrwxrwt 2 castano icc 4096 abr 20 16:32 dir
chmod 770 dir; chmod +t dir
Sistemas Operativos II (II-UJI) Gestión del SF32
SS OOIIIIIIIIPermisos de acceso en UNIX
n Bits “setuid” y “setguid”:
u Ejemplos:$ ls -l /usr/bin/passwd-r-s--x--x 1 root root 16336 feb 13 2003 /usr/bin/passwd$ echo > fich$ chmod 4760 fich$ ls -l fich-rwsrw---- 1 castano icc 1 abr 20 16:39 fich$ chmod -s fich$ chmod g+s fich$ ls -l fich-rwxrwS--- 1 castano icc 1 abr 20 16:39 fich
Sistemas Operativos II (II-UJI) Gestión del SF33
SS OOIIIIIIIIPermisos extendidos en UNIX
n ¿Qué son?
u Caso particular de un esquema general de permisos de listas de acceso
n ¿Para qué sirven?
u Para especificar permisos de lectura, escritura y/o ejecución a usuarios concretos de la máquina y/o grupos de usuarios concretos
l Mayor flexibilidad para configurar permisosl Coste adicional (un fichero o directorio tiene asociado un fichero
adicional)
Sistemas Operativos II (II-UJI) Gestión del SF34
SS OOIIIIIIIIPermisos extendidos en UNIX
n Formato de un fichero de permisos extendidos:
atributes: (SUID | SGID | SVTX)base permissions:
owner (castano): rw-group (icc): r--others: ---
Extended permissions:enableddeny rw- u:juanpermit –w- u:pepe g:iispecify r-x u:pedro
Sistemas Operativos II (II-UJI) Gestión del SF35
SS OOIIIIIIIIPermisos extendidos en UNIX
n Comandos del shell relacionados:
u aclget [-o Outfile] File
l Muestra por la salida estándar la información del control de acceso del fichero File
l -o Outfile redirecciona la salida estándar del comando al fichero Outfile
u aclput [-i Infile] File
l Asigna al fichero File la información de control de acceso que se especifique por la entrada estándar
l -i Infile asigna al fichero File la información de control de acceso contenida en el fichero Infile
u acledit File
l Edita (con el editor definido por defecto para el usuario) la lista de permisos del fichero File y permite modificarlos
Ctrl+D para finalizar
Sistemas Operativos II (II-UJI) Gestión del SF36
SS OOIIIIIIIIPermisos extendidos en UNIX
n Ejemplos:
$ aclget fichero > perm; aclput –i perm fichero2$ aclget –o perm fichero; aclput –i perm fichero2$ aclget fichero | aclput fichero2
Las tres líneas de comandos hacen lo mismo
Sistemas Operativos II (II-UJI) Gestión del SF37
SS OOIIIIIIIITema 5. Gestión del Sistema de Ficheros
Índice
n Introducción
n Ficheros
n El sistema de directorios
n Protección del sistema de ficheros
n Compartición de ficheros
n Estructura del sistema de ficheros
n Montaje de sistemas de ficheros
n Mecanismos de incremento de prestaciones
n Implementación de sistemas de ficheros
n Servicios POSIX para gestión de ficheros y directorios
*
Sistemas Operativos II (II-UJI) Gestión del SF38
SS OOIIIIIIIICompartición de ficheros
n Necesidad de compartir ficheros entre usuarios
n Aspectos implicados:
u Permisos de accesou Gestión de accesos simultáneos
Sistemas Operativos II (II-UJI) Gestión del SF39
SS OOIIIIIIIISemántica de coutilización
n Especifica el efecto de varios procesos accediendo de forma simultánea al mismo archivo y cuándo se hacen efectivas las modificaciones
n Tipos de semántica de coutilización:
u Semántica de archivos inmutables:l Una vez creado el archivo sólo puede ser compartido para lectura y
no cambia nunca
u Semántica UNIX (POSIX):l Cada proceso independiente tiene una imagen del fichero y no
comparten puntero → Mecanismos de sincronización necesariosl Si existe relación de parentesco entre procesos comparten el
puntero y las escrituras son inmediatamente visibles para todos los procesos con el archivo abierto. La coutilización afecta también a los metadatos
Sistemas Operativos II (II-UJI) Gestión del SF40
SS OOIIIIIIIISemántica de coutilización
n Tipos de semántica de coutilización (cont.):
u Semántica de sesión:l Las escrituras que hace un proceso no son inmediatamente visibles
para los demás procesos con el archivo abiertol Cuando se cierra el archivo los cambios se hacen visibles para las
futuras sesionesl Un archivo puede tener temporalmente varias imágenes (versiones)l Sincronización explícita necesaria si se requiere actualización
inmediata
Sistemas Operativos II (II-UJI) Gestión del SF41
SS OOIIIIIIIITema 5. Gestión del Sistema de Ficheros
Índice
n Introducción
n Ficheros
n El sistema de directorios
n Protección del sistema de ficheros
n Compartición de ficheros
n Estructura del sistema de ficheros
n Montaje de sistemas de ficheros
n Mecanismos de incremento de prestaciones
n Implementación de sistemas de ficheros
n Servicios POSIX para gestión de ficheros y directorios
*
Sistemas Operativos II (II-UJI) Gestión del SF42
SS OOIIIIIIIISistemas de ficheros basados en FAT
Bloque de arranque
Bloque con información
sobre el sistema de ficheros
FAT Duplicado de
FAT
Bloques de datos: directorio fichero libre
Mapa de bits de bloques libres
- N° bloques del SF- N° identificación del SF- Tamaño bloque- N° bloque raíz- Primer bloque datos - ...
Sistemas Operativos II (II-UJI) Gestión del SF43
SS OOIIIIIIIISistemas de ficheros basados en FAT
n Asignación enlazada de bloques de ficheros:
u FAT (“File Allocation Table”):
l Una entrada en la tabla por cada bloque del disco
l Cada entrada apunta al siguiente bloque del fichero
l Inconveniente:
Hace falta toda la FAT en memoria aunque sólo haya un fichero abierto
Si no está toda la FAT en memoria hay que acceder a disco para seguir la lista de bloques (localización lenta)
l Viable para PC's pero no para ordenadores con grandes SF
Sistemas Operativos II (II-UJI) Gestión del SF44
SS OOIIIIIIIISistemas de ficheros basados en FAT
Directorio ARREL( 6 )
PRACTIQUES( 11 )
.C
pr1.c(16, 13-15, 20)
ASCII
read.me(25,26)
001001010010111100110101
pr1.o(27-31)
ASCII
mail.avui( 8, 9 )
ASCII
copia.txt(10,12, 22)
Sistemas Operativos II (II-UJI) Gestión del SF45
SS OOIIIIIIIISistemas de ficheros basados en FAT
FAT
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
RES
ERVA
T
AR
RE
L
mai
l.avu
i
PR
AC
TIQ
UE
S
copi
a.tx
t
pr1.
c
pr1.
c
pr1.
c
pr1.
c
pr1.
c
read
.me
read
.me
pr1.
o
pr1.
o
pr1.
o
pr1.
o
pr1.
o
mai
l.avu
i
copi
a.tx
t
copi
a.tx
t
XXXXXX
EOFFREE
9EOF12
EOF22141520
13FREEFREEFREEEOF
FREEEOFBAD
FREE26
EOF28293031
EOF
16
13
14
15
20
01234567
89
101112131415
1617181920212223
2425262728293031
Bloque 2 Bloque 3 Bloque 4 Bloque 5
Bloque defectuoso (-3)Bloque libre (-2) Fin fichero (-1)
Sistemas Operativos II (II-UJI) Gestión del SF46
SS OOIIIIIIIISistemas de ficheros basados en FAT
. 11Otros campos
. . 6Otros campospr1.c 16Otros campos
read.me 25Otros campos
Basura FREEOtros campos
pr1.o 27Otros campos
...
. 6
. . 6Otros campos
PRACTIQUES 11Otros campos
mail.avui 8Otros campos
Basura FREEOtros campos
copia.txt 10Otros campos
...
Otros campos
Bloque 6 Bloque 11
FREE26
EOF28293031
EOF
2425262728293031
FATBloque 5
Bloque 25
Datos de read.me
Bloque 26
Datos de read.me
n ¿Cómo acceder al fichero ARREL\PRACTIQUES\read.me?
Sistemas Operativos II (II-UJI) Gestión del SF47
SS OOIIIIIIIISistemas de ficheros basados en inodos
Bloque de arranque
Superbloque
Bloques deinodos
Bloques de datos: directorio fichero indirección libre
Mapa de bits de bloques libres
Mapa de bits de inodos
- N° bloques del SF- N° inodos del SF- Tamaño bloque- N° inodo raíz- Primer bloque datos - ...
Sistemas Operativos II (II-UJI) Gestión del SF48
SS OOIIIIIIIISistemas de ficheros basados en inodos
n Asignación indexada de bloques de ficheros:
u Tabla de inodos:
l Un i-nodo por ficherol Una entrada en la tabla de inodos por inodol Ventajas:
Para ficheros cortos→ Localización inmediata de la lista de bloques
Para ficheros largos→ A lo sumo dos o tresreferencias a disco para la localización
inodo
Permisos
Número de links al fichero
UID del propietario
GID del propietario
Tiempo de creación
Tiempo de último acceso
Bloques directos a datos
Bloques indirectos simples
Bloques indirectos dobles
Tamaño del fichero
Número de inodo
Sistemas Operativos II (II-UJI) Gestión del SF49
SS OOIIIIIIIISistemas de ficheros basados en inodos
inodo
Datos
Datos
Indices directos
Indices indirectos simples
Indices indirectos dobles
Datos
Datos
Datos
Sistemas Operativos II (II-UJI) Gestión del SF50
SS OOIIIIIIIISistemas de ficheros basados en inodos
n El superbloque:
Número de bloques del mapa de bits de inodos
Número de bloques del mapa de bits de bloques libres
Primer bloque de datos
Tamaño máximo de fichero
Número mágico
Punteros a los bloques de mapas de bits de inodos
Punteros a los bloques de mapas de bits de bloques libres
Número de dispositivo
Inodo sobre el que se monta el SF
Número de bloques del SF
Número de inodos del SF
Tiempo de última actualización
Superbloque modificado ("dirty flag")
0 1 0 0 1 0 0 0 0 0 1 0 1 1 0 1 1 1 0 1 1 1 0 0 .....
0 1 0 0 1 0 0 0 0 0 1 0 1 1 0 1 1 1 0 1 1 1 0 0 .....
Inodo raíz del SF
Presente en disco y en memoria
Presente en memoria pero no en disco
Sistemas Operativos II (II-UJI) Gestión del SF51
SS OOIIIIIIIISistemas de ficheros basados en inodos
n Tablas de datos implicadas:
0
1
2
3
4
5
6
Tabla de inodosTabla de ficheros del sistema
Tabla de ficheros del proceso
1 READ
. . .1 WRITE1 READ
. . .
. . .
1 /etc/passwd
2 /usr/castano
. . .
Sistemas Operativos II (II-UJI) Gestión del SF52
SS OOIIIIIIIISistemas de ficheros basados en inodos
n ¿Cómo localizar el fichero /usr/bin/cat?
Inodo 6(/usr)
Tamaño
. . .140
Tipo y modo1 ..4 dev15 etc6 usr30 tmp
1 .
Inodo 91(/usr/bin)
Tamaño
. . .132
Tipo y modo1 ..20 users66 local91 bin
6 .
Bloque 132 del directorio /usr/bin
Inodo 46(/usr/bin/cat)
Tamaño
. . .67
Tipo y modo6 ..22 ls11 more46 cat40 cp
91 .
Bloque 20 del directorio /
Bloque 140 del directorio /usr
Sistemas Operativos II (II-UJI) Gestión del SF53
SS OOIIIIIIIITema 5. Gestión del Sistema de Ficheros
Índice
n Introducción
n Ficheros
n El sistema de directorios
n Protección del sistema de ficheros
n Compartición de ficheros
n Estructura del sistema de ficheros
n Montaje de sistemas de ficheros
n Mecanismos de incremento de prestaciones
n Implementación de sistemas de ficheros
n Servicios POSIX para gestión de ficheros y directorios
*
Sistemas Operativos II (II-UJI) Gestión del SF54
SS OOIIIIIIIIMontaje de SF
n MS-DOS y Windows NT/2K:
u Árbol de directorios único por dispositivo lógico (volumen o partición)
u No existe el concepto de SF montados
u El usuario debe conocer el nombre del dispositivo donde se encuentra un fichero
u Para acceder a un fichero de un volumen se busca en la tabla de superbloques y se cambia directamente al SF del dispositivo
Sistemas Operativos II (II-UJI) Gestión del SF55
SS OOIIIIIIIIMontaje de SF
n UNIX:
u Árbol de directorios único en el SFl Todos los dispositivos lógicos (particiones) cuelgan del directorio raiz
Montaje de SF
u Montaje de un SF:l Conexión de un SF almacenado en una partición a un directorio del árbol
de directorios existente
u El SO oculta al usuario la existencia de dispositivosEl usuario no necesita conocer en qué dispositivo se encuentra un fichero
Y periféricos, terminales, etc.
Sistemas Operativos II (II-UJI) Gestión del SF56
SS OOIIIIIIIIMontaje de SF en UNIX
n Comandos del shell relacionados: mount y umount
u Ejemplos: l mount /dev/hda1 –t msdos /win
l umount /win
n Ficheros del sistema relacionados:
u /etc/fstab: SF a montar en arranque del sistemau /etc/mntab: SF montados actualmente en el sistema
Punto de montajeSF a montar Tipo SF
El SF no debe estar usándose en ese momento
Sistemas Operativos II (II-UJI) Gestión del SF57
SS OOIIIIIIIIMontaje de SF en UNIX
n Operaciones implicadas en el montaje de un SF:
u Se lleva a la tabla de superbloques de MC el superbloque del SF a montar
u En dicho superbloque se guarda:l (Puntero al) Inodo sobre el que se monta el SFl (Puntero al) Inodo raíz del SF a montar
u En el inodo sobre el que se monta el SF se guarda:l (Puntero al) Inodo raíz del SF a montarl (Puntero a la) Entrada de tabla de superbloques del superbloque del
SF a montar
Sistemas Operativos II (II-UJI) Gestión del SF58
SS OOIIIIIIIIMontaje de SF en UNIX
/
Tabla inodos
Tabla superbloques
tex
utilbin
bin
/dev/hda3
libtex bin
dist
root
home bin
Camino
Punto de montado
Directorio
Directorio montado
Fichero
usr
libbin
dev
rdsk
dev1
rdsk1
Sistemas Operativos II (II-UJI) Gestión del SF59
SS OOIIIIIIIIEjemplo de montaje de SF en Linux
n Ejercicio:
Dado el siguiente diagrama que indica en qué directorios se encuentran montados los distintos sistemas de ficheros accesibles desde un SO linux, rellénense los campos de los inodos y superbloques del sistema de ficheros virtual que se utilizan para identificar dichos puntos de montaje y la relación entre ellos.
usr
/
local
Dispositivo 1
Dispositivo 2
Dispositivo 3
Sistemas Operativos II (II-UJI) Gestión del SF60
SS OOIIIIIIIIEjemplo de montaje de SF en Linux
n Ejercicio (sol.):
/ (disp1) /usr /(disp2) /usr/local /(disp3)
0
1
0
0
2
1
2
1
3
3
4
2
Tabla superbloques
s_devs_covered
s_mounted
0
1
0
-1
0
1
0
2
1
1
2
1
-1
2
2
Tabla inodos
i_devi_sb
i_mount
i_no2
1
4
3
3
3
2
-1
4
4
s_covered: Inodo sobre el que se monta el SFs_mounted: Inodo raíz del SF montado
i_no: Número inodo del ficheroi_dev: Dispositivo donde está el ficheroi_mount: Inodo raíz del SF que se monta
sobre este fichero
Sistemas Operativos II (II-UJI) Gestión del SF61
SS OOIIIIIIIITema 5. Gestión del Sistema de Ficheros
Índice
n Introducción
n Ficheros
n El sistema de directorios
n Protección del sistema de ficheros
n Compartición de ficheros
n Estructura del sistema de ficheros
n Montaje de sistemas de ficheros
n Mecanismos de incremento de prestaciones
n Implementación de sistemas de ficheros
n Servicios POSIX para gestión de ficheros y directorios
*
Sistemas Operativos II (II-UJI) Gestión del SF62
SS OOIIIIIIIIIncremento de prestaciones
n Basados en el uso de almacenamiento intermedio de datos de E/S en MCAcceso a disco mucho más lento que el acceso a MC
n Dos tipos de mecanismos:
u Discos RAM:l Datos almacenados sólo en memoria → Contenido volátill Aceptan todas las operaciones de cualquier otro sistema de archivosl Pseudodispositivos para almacenamiento temporal o para
operaciones auxiliares del SO
u Cachés de datos:l Instaladas en secciones de MC controladas por el SOl Almacenan datos para optimizar accesos posterioresl Se basan en principio de localidad de referencias
Sistemas Operativos II (II-UJI) Gestión del SF63
SS OOIIIIIIIIIncremento de prestaciones
n Cachés de datos (cont.):
u Dos cachés relacionadas con el SF:l Caché de nombresl Caché de bloques
Disco
Proceso
Disco
Caché
Proceso
Caché
Sistemas Operativos II (II-UJI) Gestión del SF64
SS OOIIIIIIIICaché de nombres
n Objetivo:
u Acelerar la interpretación de los nombres de ficheros
n ¿Qué se almacena?
u Entradas de directorio de los ficheros abiertos recientemente
u UNIX: “Mapeo” entre nombre de fichero y su número de inodo
n Interpretación del nombre de un fichero:
u Cuando se abre un fichero se mira si cada uno de sus componentesaparecen en la caché
l Si está: Acceso al número inodo del componentel Si no está: Añadir nueva entrada en caché
n Consistencia de la caché:
u Casi todas las operaciones de creación, destrucción y cambio de ficheros actualizan la caché
Sistemas Operativos II (II-UJI) Gestión del SF65
SS OOIIIIIIIICaché de nombres de directorios en Linux
n ¿Qué es la caché de nombres de directorios?
u Almacena el "mapeo" entre el nombre de un directorio y su número de inodo
n Implementación de la caché de nombres de directorios:
u Lista doblemente enlazada de estructuras tipo dir_cache_entry asociadas a los directorios usados más recientemente
u Lista con ordenación LRU (Least Recently Used)
u Tabla hash a la que se accede mediante una función hash basada en el nombre del directorio y el número de inodo del directorio padre
Sistemas Operativos II (II-UJI) Gestión del SF66
SS OOIIIIIIIICaché de nombres de directorios en Linux
n Implementación de la caché de nombres de directorios (cont.):
u Estructura dir_cache_entry:
struct dir_cache_entry {
kdev_t dc_dev; /* Num dispositivo en el que se encuentra el directorio */
unsigned long dir; /* Num inodo del directorio padre */
unsigned long version; /* Num version del directorio */
unsigned long ino; /* Número de inodo del directorio */
unsigned char name_len; /* Longitud nombre del directorio */
char name[DCACHE_NAME_LEN]; /* Nombre del directorio */
struct dir_cache_entry ** lru_head;
/* Cabecera de lista de directorios */
struct dir_cache_entry * next_lru, * prev_lru;
/* Punteros al elemento previo y al siguiente de la lista de dirs */
};
Sistemas Operativos II (II-UJI) Gestión del SF67
SS OOIIIIIIIICaché de nombres de directorios en Linux
n Localización de un directorio:
u Si al resolver un camino de un fichero no se encuentra en la caché uno de los directorios de paso, se crea una nueva entrada al final de la lista
u Si existe el directorio en la caché, se recoloca al final de la lista y se usa la información que contiene
Sistemas Operativos II (II-UJI) Gestión del SF68
SS OOIIIIIIIICaché de nombres de directorios en Linux
n Localización de un directorio (cont):
u ¿Cómo buscar el fichero /usr/bin/cat?
lru_head
struct dir_cache_entry
1
1/
dirinode
name[]next_lruprev_lrulru-head
12345
tmp
1
6usr
110etc
6
47bin
Sistemas Operativos II (II-UJI) Gestión del SF69
SS OOIIIIIIIICaché de nombres de directorios en Linux
n Localización de un directorio (cont):
u ¿Cómo buscar el fichero /usr/bin/cat (cont.)?l Evolución de la lista:
/ →→ tmp →→ usr →→ etc →→ bin
tmp →→ usr →→ etc →→ bin →→ /
tmp →→ etc →→ bin →→ / →→ usr
tmp →→ etc →→ / →→ usr→→ bin
Sistemas Operativos II (II-UJI) Gestión del SF70
SS OOIIIIIIIICaché de bloques
n Justificación de la caché de bloques:
u Los SFs necesitan leer y escribir bloques de disco
u Los bloques son reaccedidos a menudo
u Lecturas anticipadas .
n ¿Qué es la caché de bloques?
u Estructura de datos en MC con los bloques más frecuentemente utilizados
n Principal problema:
u Coherencia de la caché
u Fiabilidad del SF
Sistemas Operativos II (II-UJI) Gestión del SF71
SS OOIIIIIIIIFlujo de datos con la caché de bloques
Usuario
read (fd, buffer, tamaño)
buffer
Bloques del fichero
Bloques del dispositivo
Bloques del disco
Fichero lógico
Fichero lógico
Manejador de disco y
dispositivo
Bloques lógicos(Servidor
de bloques)
3
1340
1340
1756
1756
840
840
8322
8322
4 5 6
tamaño
Caché de bloques(Servidor
de bloques)1340 1756840 8322
Sistemas Operativos II (II-UJI) Gestión del SF72
SS OOIIIIIIIICaché de bloques
n Referencia de un bloque de un fichero:
u Si está en la caché: Acceso a información de la caché
u Si no está en la caché:l Leer el bloque del dispositivo y copiarlo en la cachél Si la caché está llena, hacer hueco para el nuevo bloque
reemplazando uno de los existentes → Políticas de reemplazo
u Si el bloque ha sido escrito (sucio) → Política de escritura
Sistemas Operativos II (II-UJI) Gestión del SF73
SS OOIIIIIIIIPolíticas de reemplazo
n Algoritmos de reemplazo:
u FIFO (First in First Out)
u MRU (Most Recently Used)
u LRU (Least Recently Used)l Reemplaza el bloque que lleva más tiempo sin ser usadol Los bloques más usados tienden a estar siempre en la caché y, por
tanto, no van al disco → La utilización estricta de esta política puede crear problemas de fiabilidad en el SF si el computador falla
l Política de reemplazo más frecuentemente utilizadal La mayoría de los servidores de archivos distinguen entre bloques
especiales y bloques de datos
Sistemas Operativos II (II-UJI) Gestión del SF74
SS OOIIIIIIIIPolíticas de escritura
n Escritura inmediata (write-through):
u Se escribe cada vez que se modifica el bloque
u No hay problema de fiabilidad, pero se reduce el rendimiento del sistema
n Escritura diferida (write-back):
u Sólo se escriben los datos a disco cuando se eligen para su reemplazo por falta de espacio en la caché
u Optimiza el rendimiento, pero genera problemas de fiabilidad
Sistemas Operativos II (II-UJI) Gestión del SF75
SS OOIIIIIIIIPolíticas de escritura
n Escritura retrasada (delayed-write):
u Escribe a disco los bloques de datos modificados en la caché de forma periódica cada cierto tiempo (30 segundos en UNIX)
u Compromiso entre rendimiento y fiabilidad
u Reduce la extensión de los posibles daños por pérdida de datos
u Los bloques especiales se escriben inmediatamente al disco
u No se puede quitar un disco del sistema sin antes volcar los datos de la caché
n Escritura al cierre (write-on-close):
u Escribe a disco los bloques de datos
u Cuando se cierra un archivo se vuelcan al disco los bloques del mismo que tienen datos actualizados
u Complementaria a las otras
Sistemas Operativos II (II-UJI) Gestión del SF76
SS OOIIIIIIIILa caché de buffers de bloques de Linux
n ¿Qué es la caché de buffers de bloques?
u Sistema de caché dinámico que emplea la memoria que no utiliza el núcleo ni los procesos como un buffer intermedio para dispositivos por bloques
u Proporciona una lista LRU con los bloques accedidos recientemente
u Utiliza buffers de diferentes tamaños
u Independiente del SF
u Cada SF solicita bloques a la caché, usa el contenido de los buffers y luego libera los bloques (buffers) en uso
Sistemas Operativos II (II-UJI) Gestión del SF77
SS OOIIIIIIIILa caché de buffers de bloques de Linux
n ¿Qué es la caché de buffers de bloques (cont.)?
u Permite incrementar la velocidad de acceso a un dispositivo por bloques
Sólo hay que acceder al dispositivo en dos casos:
l Caso de lectura: El bloque leído no está en el sistema de buffers
l Caso de escritura:
El contenido del bloque copiado en memoria difiere del que contiene el dispositivo por bloquesEl bloque no se lleva inmediatamente a disco:
� Se marca como sucio (modificado) y el sistema lo lleva a disco cuando puede
� Excepción: Cuando se usa la bandera O_SYNC al abrir un fichero (el contenido del dispositivo y el de memoria han de ser siempre el mismo)
Sistemas Operativos II (II-UJI) Gestión del SF78
SS OOIIIIIIIILa caché de buffers de bloques de Linux
n Implementación de la caché de buffers de bloques:
u Cada buffer tiene una estructura buffer_head:
struct buffer_head {
kdev_t b_dev; /* Dispositivo donde está el bloque */
unsigned long b_blocknr; /* Número bloque en dispositivo */
struct buffer_head * b_next; /* Siguiente elemento de una lista de buffers en uso */
struct buffer_head * b_prev;
struct buffer_head * b_next_free;/* Siguiente elemento de una lista de buffers libres */
struct buffer_head * b_prev_free;
unsigned int b_list; /* Lista LRU a la que pertenece este buffer */
unsigned long b_state; /* Estado del buffer (bloqueado, sucio, válido, etc) */
Sistemas Operativos II (II-UJI) Gestión del SF79
SS OOIIIIIIIILa caché de buffers de bloques de Linux
n Implementación de la caché de buffers de bloques (cont.):
u Cada buffer tiene una estructura buffer_head (cont.):
unsigned int b_count; /* Número de procesos que usan actualmente bloque */
unsigned long b_size; /* Tamaño del bloque */
char * b_data; /* Puntero a un bloque de datos */
unsigned long b_flushtime; /* Tiempo tras el que un buffer sucio debe ser copiado en el dispositivo*/
unsigned long b_lru_time; /* Tiempo en que el buffer fue usado por última vez */
struct wait_queue * b_wait; /* Procesos que esperan para acceder al buffer */
}
Sistemas Operativos II (II-UJI) Gestión del SF80
SS OOIIIIIIIILa caché de buffers de bloques de Linux
n Manejo de buffers de bloques:
u Buffers en uso:
l lru_list[NR_LIST]• Para cada tipo de buffer (limpio, bloqueado, modificado, etc.) hay una lista doblemente enlazada de los buffers en uso de la caché ordenados según un algoritmo LRU
l Una tabla hash permite una localización rápida de un buffer a partir del número de dispositivo y del número de bloque que ocupa en disco
u Buffers libres:
l free_list[NR_SIZES] • Para cada posible tamaño de bloque hay una lista doblemente enlazada de los buffers libres de la caché
l Los buffers dejan de estar asignados si:
Son liberados
Todos los buffers están ocupados y se solicitan nuevos buffers
Hay que reducir el espacio de caché
Sistemas Operativos II (II-UJI) Gestión del SF81
SS OOIIIIIIIILa caché de buffers de bloques de Linux
.
.
.
.
.
.
lru_list[BUF_CLEAN]
lru_list[BUF_BLOCKED]
free_list[SIZE_1]
free_list[SIZE_2]
Sistemas Operativos II (II-UJI) Gestión del SF82
SS OOIIIIIIIILa caché de buffers de bloques de Linux
n Procesos “update” y “bdflush” :
u Objetivo: Mantener el menor número posible de buffers libres y el menor número posible de inconsistencias del SF • Copiar (periódicamente o bajo demanda) en disco todos los bloques modificados que no han sido usados recientemente
Sistemas Operativos II (II-UJI) Gestión del SF83
SS OOIIIIIIIITema 5. Gestión del Sistema de Ficheros
Índice
n Introducción
n Ficheros
n El sistema de directorios
n Protección del sistema de ficheros
n Compartición de ficheros
n Estructura del sistema de ficheros
n Montaje de sistemas de ficheros
n Mecanismos de incremento de prestaciones
n Implementación de sistemas de ficheros3 Gestión de ficheros en Linux3 Gestión de ficheros en Windows NT/2000
n Servicios POSIX para gestión de ficheros y directorios
*
Sistemas Operativos II (II-UJI) Gestión del SF84
SS OOIIIIIIIITema 5. Gestión del Sistema de Ficheros
Índice
n Implementación de sistemas de ficheros3 Gestión de ficheros en Linux
♣ El sistema de ficheros virtual♣ El sistema de ficheros “Ext2”♣ Sistemas de ficheros con vitácora♣ El sistema de ficheros “procfs”
3 Gestión de ficheros en Windows NT/2000
*
Sistemas Operativos II (II-UJI) Gestión del SF85
SS OOIIIIIIIIEl SF de Linux
n El Sistema de Ficheros Virtual ("Virtual File System" - VFS):
u Linux soporta diferentes tipos de SF:
l Basados en disco: Minix, ext2, ext3, reiserFS, XFS, JFS, ms-dos, etc.
l Sistemas remotos (de red): Nfs, coda, samba, etc
l Sistemas especiales: procfs
u Dispone para ello de una interface entre el núcleo y los diferentes SF: el VFS
l Permite acceder a ficheros sin tener en cuenta el SF bajo el que se encuentra
l Trabaja con "ficheros virtuales" con una estructura independiente del SF
Información genérica para todo SF Información específica para cada SF
Sistemas Operativos II (II-UJI) Gestión del SF86
SS OOIIIIIIIIEl SF de Linux
Ext3Ext2
Virtual File System
. . .
Sistema de Ficheros
. . .
Modo usuario
Modo supervisor
Proceso 1 Proceso 2 Proceso n. . .
Caché de nombresde directorio
Caché deinodos
Drivers de dispositivos
Nfsproc
Núcleo Red
ReiserFS
Caché de buffers de bloques
Sistemas Operativos II (II-UJI) Gestión del SF87
SS OOIIIIIIIIEl VFS
n Funciones del VFS:
u Implementa acciones estándar relacionadas con el SF
u Proporciona tareas específicas al correspondiente SF bajo el que se encuentra el fichero accedido
Sistemas Operativos II (II-UJI) Gestión del SF88
SS OOIIIIIIIIRecordando ...
n Tablas de datos en un SF basado en inodos:
0
1
2
3
4
5
6
Tabla de inodosTabla de ficheros del sistema
Tabla de ficheros del proceso
1 READ
. . .1 WRITE1 READ
. . .
. . .
1 /etc/passwd
2 /usr/castano
. . .
Sistemas Operativos II (II-UJI) Gestión del SF89
SS OOIIIIIIIIEl VFS
n Tabla de ficheros abiertos por un proceso:
u Definida en la estructura task_struct del proceso
struct files_struct {
tomic_t count; /* Num. procs que comparten estos ficheros abiertos */
fd_set * close_on_exec;/* Ficheros a cerrar ante una llamada exec */
fd_set * open_fds; /* Máscara bits de descriptores de ficheros usados */struct file * fd_array[NR_OPEN_DEFAULT];
/* Tabla de ficheros abiertos por el proceso*/
};
n Tabla de ficheros abiertos en el sistema:
u Lista circular doblemente enlazada de estructuras tipo file cuyo inicio es:
struct file *first_file;
Tabla de descriptores de ficheros
Sistemas Operativos II (II-UJI) Gestión del SF90
SS OOIIIIIIIIEl VFS
n Tabla de ficheros abiertos en el sistema (cont.):
u Entrada de la tabla de ficheros: Visión que tiene un proceso de un fichero
struct file {
mode_t f_mode; /* Modo en que fue abierto el fichero (R,W,R/W) */
loff_t f_pos; /* Posición del puntero del fichero */
unsigned short f_flags; /* Banderas de control de acceso */
unsigned short f_count; /* Número de descriptores de fichero que apuntan a esta entrada */
struct file *f_next, *f_prev; /* Punteros al siguiente y anterior elemento de la lista de ficheros */
struct fown_struct f_owner; /* Propietario del fichero */
unsigned int f_uid, f_gid; /* UID y GUID del usuario */
struct inode * f_inode; /* Inodo del fichero */
struct file_operations * f_op; /* Operaciones que necesitan información de esta estructura file */
struct dentry *f_dentry; /* Puntero a entrada caché nombres dirs */
unsigned long f_version; /* Numero de versión */...
};
Sistemas Operativos II (II-UJI) Gestión del SF91
SS OOIIIIIIIIEl VFS
n Tabla de ficheros abiertos en el sistema (cont.):
u Operaciones que utilizan la estructura file:
lseek (inode,filp,offset,origin);Posicionamiento del puntero de un fichero en un lugar determinado
open (inode,filp);Apertura de un fichero de drivers
read (inode,filp,buf,count);Lectura de datos de un fichero y almacenamiento de estos en un buffer
write (inode,filp,buf,count);Escritura de un buffer de datos en un fichero
readdir (inode,filp,dirent,count);Obtiene el primer directorio que hay en un fichero directorio a partir del puntero de dicho directorio
...
Sistemas Operativos II (II-UJI) Gestión del SF92
SS OOIIIIIIIIEl VFS
n Tabla de inodos:
u Lista circular doblemente enlazada de estructuras tipo inode cuyo inicio es:
struct inode *first_inode;
n Caché de inodos:
u Acceso rápido a inodos activos de la tabla → Tabla hash
l Función hash basada en el número de dispositivo y el número de inodo de un fichero (este par identifica a un fichero de forma única en el sistema)
u Si un inodo no está en la caché:
l Se llama a una rutina específica para leer el inodo
l El inodo leído se deja en la caché
u Política de reemplazo de entradas de la caché:
l Algoritmo LRU
Sistemas Operativos II (II-UJI) Gestión del SF93
SS OOIIIIIIIIEl VFS
n Implementación de la tabla de inodos:
u Estructura de datos de un inodo del VFS:
Datos independientes del SF
Superbloque
Operaciones sobre inodo
Datos dependientes del SF
Superbloque
createlink
unlink...
inode
super_block
inode_operations
Sistemas Operativos II (II-UJI) Gestión del SF94
SS OOIIIIIIIIEl VFS
n Implementación de la tabla de inodos:
u Estructura de datos de un inodo del VFS (cont.):
struct inode {
kdev_t i_dev; /* Dispositivo donde está el fichero */
unsigned long i_ino; /* Número de inodo en i_dev*/
umode_t i_mode; /* Tipo de fichero (por caracteres, por bloques, enlace, etc.) y permisos de acceso */
nlink_t i_nlink; /* Número de enlaces duros al fichero */
uid_t i_uid; /* Usuario propietario del fichero */
gid_t i_gid; /* Grupo del usuario propietario del fichero */
kdev_t i_rdev; /* Número de dispositivo, si es un fichero de dispositivo (/dev/tty, etc.) */
off_t i_size; /* Tamaño en bytes del fichero */
time_t i_atime; /* Tiempo del último acceso al fichero */
time_t i_mtime; /* Tiempo de última modificación del fichero */
time_t i_ctime; /* Tiempo de la última modificación del inodo */
Sistemas Operativos II (II-UJI) Gestión del SF95
SS OOIIIIIIIIEl VFS
n Implementación de la tabla de inodos (cont.):
unsigned long i_blksize; /* Tamaño del bloque */
unsigned long i_blocks; /* Número de bloques que ocupa el fichero*/
struct vm_area_struct *i_mmap; /* Áreas de memoria de usuario para mapearel contenido del fichero*/
unsigned long i_nrpages; /* Número de páginas asignadas para el mapeo del fichero */
struct inode_operations *i_op; /* Operaciones que necesitan información de esta estructura inode */
struct wait_queue *i_wait; /* Cola de procesos que esperan por este inodo */
struct file_lock *i_flock; /* Datos sobre los ficheros bloqueados */
struct inode *i_next, *i_prev; /* Punteros a elementos de la lista de inodos */
struct inode *i_hash_next, *i_hash_prev; /* Punteros a eltos. de la tabla hash de inodos */
struct inode *i_mount; /* Inodo raíz de SF que se monta sobre este inodo */
struct super_block *i_sb; /* Superbloque */
Sistemas Operativos II (II-UJI) Gestión del SF96
SS OOIIIIIIIIEl VFS
n Implementación de la tabla de inodos (cont.):
unsigned long i_count; /* Número de punteros de la tabla de ficheros al inodo */
unsigned short i_flags; /* Banderas de estado */
unsigned char i_lock; /* Inodo bloqueado */
unsigned char i_dirt; /* Inodo modificado respecto a la copia de disco */
unsigned char i_pipe; /* El inodo representa una tubería */
unsigned char i_sock; /* El inodo representa un “socket” */
union {
struct minix_inode_info minix_i;/* Inf. específica de inodo de minix */
struct ext2_inode_info ext2_i; /* Inf. específica de inodo de ext2 */
...
} u; /* Información específica de cada SF */
};
Sistemas Operativos II (II-UJI) Gestión del SF97
SS OOIIIIIIIIEl VFS
n Implementación de la tabla de inodos (cont.):
u Operaciones que utilizan la estructura inode:
create (dir,name,len,mode,res_inode);Creación de un inodo
link (oldinode,dir,name,len);Establecimiento de un enlace duro
unlink (dir,name,len);Eliminación de un enlace
symlink (dir,name,len,sysname);Establecimiento de un enlace simbólico
mkdir (dir,name,len,mode);Creación de un directorio
...
Sistemas Operativos II (II-UJI) Gestión del SF98
SS OOIIIIIIIIEl VFS
n El superbloque:
u Cada SF que se monta en el SF se representa en una estructura tipo super_block dentro de la tabla super_blocks[NR_SUPER]
u Estructura de datos de un superbloque del VFS:
Datos independientes del SF
Operaciones sobre superbloque
Datos dependientes del SF
put_superwrite_super
statfs...
super_block
super_operations
Sistemas Operativos II (II-UJI) Gestión del SF99
SS OOIIIIIIIIEl VFS
n Implementación de un superbloque:
u Estructura de datos de un superbloque del VFS:
struct super_block {
kdev_t s_dev; /* Dispositivo en el que está el SF */
unsigned long s_blocksize; /* Tamaño del bloque en bytes */
unsigned char s_lock; /* Superbloque bloqueado */
unsigned char s_dirt; /* Superbloque modificado respecto a la copia en disco */
struct file_system_type *s_type; /* Tipo del SF */
struct super_operations *s_op; /* Operaciones que necesitan información de esta estructura super_block */
unsigned long s_flags; /* Banderas de estado del SF (sólo lectura, escritura inmediata a disco, etc.)*/
Sistemas Operativos II (II-UJI) Gestión del SF100
SS OOIIIIIIIIEl VFS
n Implementación de un superbloque:
unsigned long s_magic; /* Número de identificación del SF */
unsigned long s_time; /* Tiempo de última modificación del SF */
struct inode * s_covered; /* Inodo sobre el que se monta el SF */
struct inode * s_mounted; /* Inodo raiz del SF */
struct wait_queue * s_wait; /* Procesos esperando acceder al superbloque */
union {
struct minix_sb_info minix_sb;/* Información sobre superbloque de minix */
struct ext2_sb_info ext2_sb; /* Información sobre superbloque de ext2 */
...
} u; /* Información específica de cada SF */
};
Sistemas Operativos II (II-UJI) Gestión del SF101
SS OOIIIIIIIIEl Ext2
n El Second Extended FS (Ext2):
u SF estándar de Linux
n Evolución del Ext2:
u SF de Minix • Ext • Ext2 • Ext3
FFS
n El Fast File System (FFS):
u Surge en 1984 para UNIX BSDu Duplicó el rendimiento del SF de Unix System V
n Características del Ext2:
u Mejora la asignación de espacio en discou Mejora tiempo de accesou Incremento de fiabilidad
Sistemas Operativos II (II-UJI) Gestión del SF102
SS OOIIIIIIIIEl Ext2
n Estructura del Ext2:
Bloque de arranque
Grupo de bloques 0
Grupo de bloques 1
Grupo de bloques n
. . .
Super bloque
Descriptores de grupo
Mapa de bits de bloques
Bloques de datos
Mapa de bits de inodos
Tabla de inodos
Replicados en todos los grupos de bloques para facilitar la recuperación del SF
Sistemas Operativos II (II-UJI) Gestión del SF103
SS OOIIIIIIIIEl Ext2
n Grupo de bloques:
u Número fijo de bloques que contiene:
l Copia del superbloque del Ext2
l Copia de la tabla de descriptores de grupos del Ext2 Descriptor de grupo: Información sobre un grupo de bloques
l Mapa de bits de los bloques de datos del grupo de bloques
l Mapa de bits de los inodos del grupo de bloques
l Tabla de inodos del grupo de bloques
l Bloques de datos
Sistemas Operativos II (II-UJI) Gestión del SF104
SS OOIIIIIIIIEl Ext2
n Objetivos de los grupo de bloques:
u Reducir la “dispersión” de los ficheros
l Mantener los bloques de datos cerca de los inodos correspondientesl Mantener los inodos de ficheros cerca de los correspondientes inodos
de directorios
u Replicar información del SF
Y, consecuentemente:
u Reducir el tiempo de posicionamiento y, por lo tanto, el tiempo de acceso a los datos
u Incrementar la fiabilidad
Sistemas Operativos II (II-UJI) Gestión del SF105
SS OOIIIIIIIIEl Ext2
n Algoritmos de asignación de bloques:
u Combinación de las siguientes estrategias:
l Asignación orientada a un objetivo:
La asignación de bloques de un fichero se hace, si es posible, en el grupo de bloques que contiene al inodo correspondiente al fichero y a menos de 32 bloques del primero de los bloques asignados al fichero
El inodo de un fichero se asigna, si es posible, dentro del bloque que contiene al inodo del directorio del fichero
l Preasignación:
Cuando se encuentra un bloque libre se reservan también los siguientes bloques (si éstos estuviesen libres) como futuros bloques del fichero
Sistemas Operativos II (II-UJI) Gestión del SF106
SS OOIIIIIIIIEl Ext2
n Fragmentos:
u Un bloque de disco se divide en varios fragmentos
u Cada fragmento se asigna de manera independiente
u Fichero = Serie de bloques + Serie de fragmentos
u Permite un mejor aprovechamiento del espacio en disco
l Reduce fragmentación interna de ficheros
u Complica la gestión del SF:
l Necesaria tabla para control de fragmentosl ¿Cómo gestionar el crecimiento de un fichero?
En lugar del último bloque
Sistemas Operativos II (II-UJI) Gestión del SF107
SS OOIIIIIIIIEl Ext2
n Fragmentos (cont.):
u ¿Cómo gestionar el crecimiento de un fichero?
l Si el fichero no tiene bloque fragmentado: Asignar nuevos fragmentos de un bloque
l Si el fichero tiene bloque fragmentado:
Si los datos nuevos caben en el bloque fragmentado:• Asignar nuevos fragmentos del bloque
Si los datos nuevos no caben en bloque fragmentado:• Copiar fragmentos (del fichero) del bloque fragmentado a otro
bloque• Asignar nuevos fragmentos en el bloque nuevo
Sistemas Operativos II (II-UJI) Gestión del SF108
SS OOIIIIIIIIEl Ext2
n Implementación del superbloque:
struct ext2_sb_info {
unsigned long s_frag_size; /* Tamaño del fragmento en bytes */unsigned long s_frags_per_block; /* Número de fragmentos por bloque */unsigned long s_inodes_per_block; /* Número de inodos por bloque */unsigned long s_frags_per_group; /* Número de fragmentos por grupo */unsigned long s_blocks_per_group; /* Número de bloques por grupo */unsigned long s_inodes_per_group; /* Número de inodos por grupo */unsigned long s_itb_per_group; /* Número de bloques de t. inodos por
grupo */unsigned long s_db_per_group; /* Número bloques de descriptores por
grupo */unsigned long s_desc_per_block; /* Número de descriptores por bloque */unsigned long s_groups_count; /* Número de grupos en el SF */struct buffer_head * s_sbh; /* Buffer de memoria que contiene el
superbloque */struct ext2_super_block * s_es; /* Puntero al superbloque de disco */struct buffer_head ** s_group_desc; /* Buffer que contiene los descriptores
de grupo */
Sistemas Operativos II (II-UJI) Gestión del SF109
SS OOIIIIIIIIEl Ext2
n Implementación del superbloque (cont.):
unsigned short s_loaded_inode_bitmaps;/* Número de entradas de caché de mapas de bits de inodos */
unsigned short s_loaded_block_bitmaps;/* Número de entradas de caché de mapas de bits de bloques */
unsigned long s_inode_bitmap_number[EXT2_MAX_GROUP_LOADED];/* Grupos a los que pertenecen los mapas de bits de inodos */
struct buffer_head * s_inode_bitmap[EXT2_MAX_GROUP_LOADED];/* Caché de mapas de bits de inodos */
unsigned long s_block_bitmap_number[EXT2_MAX_GROUP_LOADED];/* Grupos a los que pertenecen los mapas de bits de bloques */
struct buffer_head * s_block_bitmap[EXT2_MAX_GROUP_LOADED];/* Caché de mapas de bits de bloques de datos */
Sistemas Operativos II (II-UJI) Gestión del SF110
SS OOIIIIIIIIEl Ext2
n Implementación del superbloque (cont.):
unsigned long s_mount_opt; /* Opciones de montaje */unsigned short s_mount_state; /* Estado actual del SF */
unsigned short s_pad; /* Bytes de relleno */int s_inode_size; /* Tamaño de un inodo */int s_first_ino; /* Primer inodo */
};
Sistemas Operativos II (II-UJI) Gestión del SF111
SS OOIIIIIIIIEl Ext2
n Implementación del inodo:
struct ext2_inode_info{__u32 i_data[15]; /* 12 indices directos a datos, uno indirecto
simple, uno indirecto doble y uno indirecto triple */
__u32 i_flags; /* Banderas (borrado seguro, fichero recuperable,etc) */
__u32 i_faddr;__u8 i_frag_no;__u8 i_frag_size;__u16 i_osync;__u32 i_file_acl; /* Lista de control de acceso */__u32 i_dir_acl;__u32 i_dtime; /* Tiempo de borrado del fichero */ __u32 i_version; /* Versión del fichero */ __u32 i_block_group;__u32 i_next_alloc_block;__u32 i_next_alloc_goal;__u32 i_prealloc_block;__u32 i_prealloc_count;
};
Sistemas Operativos II (II-UJI) Gestión del SF112
SS OOIIIIIIIIEl Ext2
n Tabla de descriptores de grupo:
u Un descriptor de grupo guarda información sobre un grupo de bloques:
u Estructura de un descriptor de grupo:
struct ext2_group_desc {
__u32 bg_block_bitmap; /* Número bloques del mapa de bits de bloques datos*/
__u32 bg_inode_bitmap; /* Número de bloques del mapa de bits de inodos */
__u32 bg_inode_table; /* Número de bloques de tabla de inodos */
__u16 bg_free_blocks_count; /* Número de bloques de datos libres */
__u16 bg_free_inodes_count; /* Número de inodos libres */
};
Sistemas Operativos II (II-UJI) Gestión del SF113
SS OOIIIIIIIIEl Ext2
n Mapas de bits:
u Mapa de bits de bloques:l Indica si están asignados o no cada uno de los bloques
u Mapa de bits de inodos:l Indica si están asignados o no cada uno de los inodos
u No se mantienen completos en memoria sino que se usa una caché de buffers con un algoritmo LRU
Sistemas Operativos II (II-UJI) Gestión del SF114
SS OOIIIIIIIIEl Ext2
n Directorios:
u Un directorio es un fichero con una lista de entradas con la siguiente estructura:
struct ext2_dir_entry {
__u32 inode; /* Número de inodo asociado al fichero */
__u16 rec_len; /* Longitud de este registro */
__u16 name_len; /* Longitud del nombre del fichero */
char name[EXT2_NAME_LEN]; /* Nombre del fichero */
};
u La eliminación de un subdirectorio se realiza poniendo a cero el número de inodo y anexionando dicha entrada a la anterior
l No es necesario reorganizar la lista ante un borradol Para asignar espacio a una nueva entrada de directorio se comienza
buscando un hueco en la listal La última entrada tiene el tamaño de lo que resta hasta fin de bloque
O directorio
rec_len mod 4 = 0
Sistemas Operativos II (II-UJI) Gestión del SF115
SS OOIIIIIIIIEl Ext2
n Directorios (cont.):
u Ejemplo de un fichero tipo directorio:
24 12 2 . 36 12 3 .. 58 16 5 pepe 27 12 4 act ....
0 12 24 40 62
4 bytes 2 2 4 8 bytes
Sistemas Operativos II (II-UJI) Gestión del SF116
SS OOIIIIIIIISF con bitácora
n SF con “ journaling” en Linux:
u También llamados transaccionales o con bitácora
u Las modificaciones de la metainformación (transacciones) de los ficheros son grabadas en un registro cronológico (“log” o “journal”) antes de que los bloques originales de disco sean modificados
u Si falla el sistema la consistencia del SF es repcuperadal Se analiza el registro y sólo se repiten las operaciones registradas sin
completarl No necesario ejecutar “fsck”l Reinicio del sistema más rápido y sencillo
u Ejemplos: Ext3, ResiserFS, XFS, JFS
Sistemas Operativos II (II-UJI) Gestión del SF117
SS OOIIIIIIIISF con bitácora
n Ext3:
u Ext2 con un fichero adicional de registro de transacciones
u Estructura idéntica a Ext2
n ReiserFS:
u Organiza los objetos del SF (inodos, directorios y bloques de datos) en variantes de árboles balanceados
u Buen rendimiento para ficheros pequeños y medianos
Sistemas Operativos II (II-UJI) Gestión del SF118
SS OOIIIIIIIIEl SF “procfs”
n ¿Qué es el “procfs”?
u SF montado sobre /proc que sólo existe en MC
u Se crea cuando arranca el SO y construye dinámicamente bajo demanda
u SF con información legible al usuario de los trabajos de núcleo
Sistemas Operativos II (II-UJI) Gestión del SF119
SS OOIIIIIIIIEl SF “procfs”
n Ficheros del directorio /proc:
FICHERO DESCRIPCIÓN DEL CONTENIDO
loadavg Carga media del sistema en los últimos 1, 5 y 15 minutos y número de procesos en ejecución
uptime Tiempo (en segundos) desde el arranque del sistema y tiempo que el sistema ha estado desocupado ("idle")
meminfo Número de bytes usados, número de bytes libres y número total de bytes de MC y del área de "swap"
cpuinfo Información sobre el procesador
stat Información sobre estadísticas del núcleo
devices Número y nombre de los drivers de los dispositivos
filesystems SFs implementados en el núcleo
mtab SFs montados actualmente
locks Información sobre los ficheros bloqueados
Sistemas Operativos II (II-UJI) Gestión del SF120
SS OOIIIIIIIIEl SF “procfs”
n Ficheros de los directorios /proc/PID:u Cada proceso en ejecución tiene asociado un directorio /proc/PID, donde
PID es el número de identificación del proceso
l El directorio contiene ficheros con información sobre el correspondiente proceso
FICHERO DESCRIPCIÓN DEL CONTENIDO
stat Información sobre características del proceso (PID, PPID, estado, grupo, memoria, señales, etc.)
statm Información sobre la memoria del proceso
maps Áreas de direcciones virtuales del proceso y sus correspondientes direcciones de inicio y fin
cwd Enlace al directorio actual del proceso
root Enlace al directorio raíz del proceso
fd/ Fichero directorio con los ficheros abiertos por el proceso
environ Entorno del proceso
Sistemas Operativos II (II-UJI) Gestión del SF121
SS OOIIIIIIIIEl SF “procfs”
n Ficheros de los directorios /proc/sys:
u El directorio /proc/sys/kernel contiene ficheros sobre el núcleo y sus estructuras de control
FICHERO DESCRIPCIÓN DEL CONTENIDO
domainname Nombre del dominio del sistema
hostname Nombre de la máquina
osrelease Versión del núcleo
filemax Número máximo de ficheros abiertos simultáneamente
filenr Número de ficheros abiertos actualmente
inodemax Número máximo de inodos abiertos simultáneamente
inodenr Número de inodos abiertos actualmente
Sistemas Operativos II (II-UJI) Gestión del SF122
SS OOIIIIIIIIEl SF “procfs”
n Ficheros de los directorios /proc/sys (cont.):
u El directorio /proc/sys/vm contiene información sobre la gestión de memoria (parámetros del proceso "bd_flush", del proceso "swap", etc.)
u El directorio /proc/sys/net contiene información sobre la red del sistema
Sistemas Operativos II (II-UJI) Gestión del SF123
SS OOIIIIIIIITema 5. Gestión del Sistema de Ficheros
Índice
n Introducción
n Ficheros
n El sistema de directorios
n Protección del sistema de ficheros
n Compartición de ficheros
n Estructura del sistema de ficheros
n Montaje de sistemas de ficheros
n Mecanismos de incremento de prestaciones
n Implementación de sistemas de ficheros3 Gestión de ficheros en Linux3 Gestión de ficheros en Windows NT/2000
n Servicios POSIX para gestión de ficheros y directorios*
Sistemas Operativos II (II-UJI) Gestión del SF124
SS OOIIIIIIIIGestión de ficheros en Windows 2K
n SF soportados por SO tipo Windows:
u FAT 16: MS-DOS
u FAT 32: Windows 9x y Windows 2x
u NTFS Versión 4: Windows NT 4.0
u NTFS Versión 5: Windows 2x y Windows XP
Sistemas Operativos II (II-UJI) Gestión del SF125
SS OOIIIIIIIISF basados en FAT16
n Estructura de un volumen:
Sector de arranque
FAT Duplicado de
FAT
Bloques de datos: directorio fichero libreInformación de la estructura del
volumen y rutina de arranque
Directorio raíz
Sistemas Operativos II (II-UJI) Gestión del SF126
SS OOIIIIIIII
Tamaño volumen 128 Mby 256 Mby 512 Mby 1024 Mby 2048 Mby 4096 Mby
Tamaño cluster 2 Kby 4 Kby 8 Kby 16 Kby 32 Kby 64 Kby
Sectores por cluster 4 8 16 32 64 128
SF basados en FAT16
n Estructura de un volumen (cont.):
u Unidad física: Sectores de 512 bytes
u Unidad lógica: Clusterl Uno o más sectores contiguosl Su tamaño en número de sectores ha de ser potencia de 2l Su tamaño en bytes depende del tamaño del volumen
Sistemas Operativos II (II-UJI) Gestión del SF127
SS OOIIIIIIIISF basados en FAT16
n Estructura de una entrada de directorio:
u Tamaño entrada de directorio: 32 bytes
1er cluster
8 bytes 3 1 10 2 2 2 4
Atributos Fecha
Nombre Extensión Reservado TamañoTiempo
Fichero oculto, del sistema, directorio, etc.
Última modificación
Sistemas Operativos II (II-UJI) Gestión del SF128
SS OOIIIIIIIISF basados en FAT32
n Características:
u Estructura de directorio y volumen similar a SF FAT 16
u Soporta volúmenes más grandes (hasta 2048 Gbytes)
u Soporta ficheros de hasta 4 Gbytes
Sistemas Operativos II (II-UJI) Gestión del SF129
SS OOIIIIIIIISF basados en FAT
n Estructuras para soportar nombres largos de ficheros:
u Inclusión de entradas de directorio adicionales para un fichero cuyo nombre ocupe más de 8 caracteres
l Primera entrada → Aliasl Siguientes entradas → Slots
u Slot: l Entrada de directorio con formato especiall Puede almacenar hasta 13 caracteres del nombre del fichero
Sistemas Operativos II (II-UJI) Gestión del SF130
SS OOIIIIIIIISF basados en FAT
n Estructuras para soportar nombres largos de ficheros (cont.):
Nombre Ext. Atr Reservado Tpo Fecha
Pri.clus Tam. Alias
Nombre Slot 1
Orden secuencial
slot
Nombre Slot 2
Nombre Slot n
. . .
Sistemas Operativos II (II-UJI) Gestión del SF131
SS OOIIIIIIIISF NTFS
n Estructura de un volumen:
Sector de arranque
MFT Bloques de datos
Información de la estructura del volumen y rutina de arranque
Ficheros del sistema
Sistemas Operativos II (II-UJI) Gestión del SF132
SS OOIIIIIIIISF NTFS
n Estructura de un volumen (cont.):
u Unidad lógica: Cluster (bloque)l Uno o más sectores contiguosl Su tamaño en número de sectores ha de ser potencia de 2l Su tamaño en bytes depende del tamaño del volumen
Tamaño volumen ≤≤512 Mby 512 Mby – 1 Gby 1-2 Gby 2-4 Gby 4-8 Gby 8-16 Gby 16-32 Gby >32 Gby
Tamaño cluster 512 by 1 Kby 2 Kby 4 Kby 8 Kby 16 Kby 32 Kby 64 Kby
Sectores por cluster 1 2 4 8 16 32 64 128
Sistemas Operativos II (II-UJI) Gestión del SF133
SS OOIIIIIIIISF NTFS
n Tabla maestra de ficheros (“Master File Table” – MFT):
u Una entrada (de 1Kbytes) por fichero o directorio, denominada registro de archivo
n Ficheros del sistema:
u MFT2:l Espejo de las tres primeras filas de la MFTl Usado para garantizar acceso a la MFT si falla ese sector
u Fichero de registro:l Lista de transacciones para garantizar la recuperabilidad de NTFS
u Mapa de bits de clusters:l Especifica clusters en uso
u Tabla de definición de atributos:l Define los tipos de atributos soportados
Sistemas Operativos II (II-UJI) Gestión del SF134
SS OOIIIIIIIISF NTFS
n Ficheros:
u NTFS ve un fichero como un conjunto de atributos definidos por pares del tipo:
(nombre_atributo,valor_atributo)
u Los datos que contiene un fichero también se tratan como atributos
Sistemas Operativos II (II-UJI) Gestión del SF135
SS OOIIIIIIIISF NTFS
n Ficheros (cont.):
u Tipos de atributos de un fichero:l Información estándar (tiempos, contador de enlaces, ...)l Lista de atributos (posición de los registros de atributo cuando no caben
en el registro de archivo)l Nombre del ficherol Descriptor de seguridad (propietario y permisos de acceso)l Datosl Índice raíz (referencias a los ficheros y subdirectorios de un directorio)l etc.
Sistemas Operativos II (II-UJI) Gestión del SF136
SS OOIIIIIIIISF NTFS
n Ficheros (cont.):
u Fichero (pequeño) de usuario:
u Fichero (pequeño) tipo directorio:
Vacío
Información estándar Nombre Datos
Descriptor seguridad
fichero1, fichero2, ...Índice raíz
Datos usuario Vacío
Información estándar Nombre Datos
Descriptor seguridad
Sistemas Operativos II (II-UJI) Gestión del SF137
SS OOIIIIIIIISF NTFS
n Ficheros (cont.):
u Atributos residentes y no residentes:
l Atributo residente:
El atributo cabe en el registro de archivo
l Atributo no residente:
El atributo no cabe en el registro de archivo Se le asigna una zona de 2ó 4 Kby (extensión)
Sistemas Operativos II (II-UJI) Gestión del SF138
SS OOIIIIIIIISF NTFS
n Ficheros (cont.):
u Ficheros pequeños: Sólo atributos residentes
Los datos caben en el registro de archivo
u Ficheros de usuario grandes:
VCN LCN NúmeroInicio inicio bloques
0 1355 44 1570 4
...
Información estándar Nombre Datos
Descriptor seguridad
Datos
LCN 1355 1356 1357 1358
VCN 0 1 2 3
Datos
1570 1571 1572 1573
4 5 6 7
0 1355 44 1570 4
VCN: Número bloque virtualLCN: Número bloque lógico
Sistemas Operativos II (II-UJI) Gestión del SF139
SS OOIIIIIIIISF NTFS
n Ficheros (cont.):
u Ficheros tipo directorio grandes:
Las extensiones implementan un árbol balanceado
...
Información estándar Nombre Datos
Descriptor seguridad
fich0 fich1 fich2 fich3
VCN 0 1 2 3
fich8 fich9 ...
8 9 10 11
fich4 fich5 fich6 fich7
4 5 6 7
Índice raízConversiones
VCN a LCN
Sistemas Operativos II (II-UJI) Gestión del SF140
SS OOIIIIIIIITema 5. Gestión del Sistema de Ficheros
Índice
n Introducción
n Ficheros
n El sistema de directorios
n Protección del sistema de ficheros
n Compartición de ficheros
n Estructura del sistema de ficheros
n Montaje de sistemas de ficheros
n Mecanismos de incremento de prestaciones
n Implementación de sistemas de ficheros
n Servicios POSIX para gestión de ficheros y directorios*
Sistemas Operativos II (II-UJI) Gestión del SF141
SS OOIIIIIIIIFunción link
n Sintaxis:int link(const char *existing, const char *new);
devuelve:u Si todo ha ido bien: 0u Si error: -1
n Descripción:u Crea un enlace físico desde una nueva entrada de directorio, new, a un
fichero existente existingl Crea una nueva entrada de directoriol Incrementa el contador de enlaces del inodo del fichero existente
u Ambos nombres de fichero deben pertenecer al mismo SFu existing no debe ser el nombre de un directorio
n Ejemplo:u link (“f1”, “f1.h”);
Sistemas Operativos II (II-UJI) Gestión del SF142
SS OOIIIIIIIIFunción symlink
n Sintaxis:int symlink(const char *existing, const char *new);
devuelve:u Si todo ha ido bien: 0u Si error: -1
n Descripción:u Crea un enlace simbólico desde una nueva entrada de directorio, new, a un
fichero existente existing
u Ambos nombres de fichero deben pertenecer a SF diferentesu existing puede ser el nombre de un directorio
n Ejemplo:u symlink (“f1”, “f1.s”);
Sistemas Operativos II (II-UJI) Gestión del SF143
SS OOIIIIIIIIFunción unlink
n Sintaxis:int unlink(const char *name);
devuelve:u Si todo ha ido bien: 0u Si error: -1
n Descripción:u Elimina la entrada de directorio asociada al fichero name y decrementa el
número de enlaces del fichero correspondienteu Cuando el número de enlaces es cero y ningún proceso lo mantiene abierto,
se libera el espacio ocupado por el fichero y el fichero deja de ser accesiblePermite borrar ficheros y directorios
n Ejemplo:u unlink (“f1”);
Sistemas Operativos II (II-UJI) Gestión del SF144
SS OOIIIIIIIIFunción getcwd
n Sintaxis:char *getcwd (char *buf, size_t size);
devuelve:u Si todo ha ido bien: bufu Si error: NULL
n Descripción:u Almacena el nombre absoluto del directorio de trabajo a partir de buf (en
size bytes como máximo)
n Ejemplo:u getcwd (buf,LONG_MAX_BUF);
Sistemas Operativos II (II-UJI) Gestión del SF145
SS OOIIIIIIIIEjemplos
n Ejemplo 1:
#include <unistd.h>#include <dirent.h>#include <sys/types.h>
#define MAX_BUF 256
main(int argc, char *argv[]){DIR *dir;struct dirent *dp;char buf[MAX_BUF];
close (1);creat (argv[1], 0600);
getcwd (buf, MAX_BUF);printf(“Directorio actual: %s\n",buf);
dir=opendir(“.");while ((dp=readdir(dir)) != NULL)printf("%s\n",dp->d_name);
closedir(dir);exit (0);}
Sistemas Operativos II (II-UJI) Gestión del SF146
SS OOIIIIIIIIEjemplos
n Ejemplo 2:
#include <unistd.h>#include <dirent.h>#include <sys/types.h>#include <sys/stat.h>
main(int argc, char *argv[]){char fichero[256];struct stat datos;DIR *dir;struct dirent *dp;int estado;
stat(argv[1],&datos);if (!S_ISDIR(datos.st_mode)){ printf("%s no es un directorio\n",argv[1]); exit (-1); }
Sistemas Operativos II (II-UJI) Gestión del SF147
SS OOIIIIIIIIEjemplos
n Ejemplo 2 (cont.):
if ((dir=opendir(argv[1])) == NULL){ perror("opendir"); exit (-1);}
dp=readdir(dir);dp=readdir(dir);while ((dp=readdir(dir)) != NULL){ sprintf(fichero,"%s/%s",argv[1],dp->d_name);if ((stat(fichero,&datos)) != 0){ perror("stat"); exit (-1);}
if ( S_ISREG(datos.st_mode)){ if (fork()!=0) wait(&estado); else {
execlp("wc","wc","-l",fichero,NULL);perror("wc"); exit(-1);
}}
}closedir(dir);exit (0);}
Sistemas Operativos II (II-UJI) Gestión del SF148
SS OOIIIIIIIIEjercicios
n Ejercicio 1:
Indicar cuál de los siguientes apartados NO realizan la misma operación que los tres restantes:
(a) aclget fich1 > fich3aclput –i fich3 fich2
(b) aclget fich1 | aclput fich2aclput –i fich3 fich2
(c) aclget -o fich3 fich1aclput –i fich3 fich2
(d) aclput fich2 | aclget fich1
Sistemas Operativos II (II-UJI) Gestión del SF149
SS OOIIIIIIIIEjercicios
n Ejercicio 2:Indicar cuál de las siguientes afirmaciones es cierta tras ejecutar los siguientes comandos:
$ ls –al ./midirtotal 24drwx------ 2 jaume inf 512 jun 8 10:52 .drwx------ 22 jaume inf 2048 jun 8 10:51 ..-rw------- 1 jaume inf 1 jun 8 10:52 fichero
$ aclget ./midir/ficheroatrributesbase permissions:
owner (jaume): rw-group (inf): ---others: ---
extended permissions:enabledpermit rw- g:itigpermit rwx u:pepe
Sistemas Operativos II (II-UJI) Gestión del SF150
SS OOIIIIIIIIEjercicios
n Ejercicio 2 (cont.):
(a) Como el directorio midir no tiene habilitados los permisos adecuados, ningún usuario excepto el propietario puede realizar ninguna operación sobre fichero
(b) El usuario jordi (perteneciente al grupo inf) puede ejecutar el comando ls –la midir
(c) Todos los usuarios del grupo itig pueden visualizar el contenido del directorio midir
Sistemas Operativos II (II-UJI) Gestión del SF151
SS OOIIIIIIIIEjercicios
n Ejercicio 3:
Sea un SF Ext2 de 32 Gbytes, en el que cada inodo ocupa 128 bytes y en el que el superbloque aparece la siguiente información:
(a) Inodos por grupo: 1024
(b) Tamaño de bloque: 1024 bytes
(c) Bloques por grupo: 8192
(d) Tamaño de descriptor de grupo: 16 bytes
Indicar el número de bloques que quedan para datos en un grupo de bloques.
Sistemas Operativos II (II-UJI) Gestión del SF152
SS OOIIIIIIIIEjercicios
n Ejercicio 3 (solución):
(a) Superbloque: 1 bloque
(b) Descriptores de grupo: 1 bloque
(225 by/disco) / (210 by/bloque) = 215 bloques/disco
(215 bloques/disco) / (213 bloques/grupo) = 4 grupos/disco
(22 descriptor_grupo/disco x 24 by/descriptor_grupo) / (213 bloques/grupo) =
= 1 bloque
(c) Mapa de bits de bloques:
(213 bloques/grupo) / (213 bits/bloque) = 1 bloque
(d) Mapa de bits de inodos:
(210 inodos/grupo) / (213 bits/bloque) = 1 bloque
(d) Tabla de inodos:
(210 inodos/grupo * 27 by/inodo) / (210 by/bloque) = 128 bloques/grupo
Sistemas Operativos II (II-UJI) Gestión del SF153
SS OOIIIIIIIIEjercicios
n Ejercicio 3 (solución):
En definitiva, el número de bloques de un grupo es:
1 + 1 +1 +1 + 128 + N_Bloques_Datos = 8192 ⇒
N_Bloques_Datos = 8060 bloques
Bloque de arranque
Grupo de bloques 0
Grupo de bloques 1
Grupo de bloques n
. . .
Super bloque
Descriptores de grupo
Mapa de bits de bloques
Bloques de datos
Mapa de bits de inodos
Tabla de inodos
1 + 1 + 1 + 1 + 128 + 8060 = 8192 bloques
Sistemas Operativos II (II-UJI) Gestión del SF154
SS OOIIIIIIIIEjercicios
n Ejercicio 4:
Suponiendo que la caché de bloques de directorios de linux tiene un única lista LRU y que en un instante dado es la que aparece a continuación, mostrar razonadamente la evolución que experimentará dicha lista al acceder al fichero /d1/d2/d3/f1.
Asumir que el tamaño máximo de la lista es de 5 directorios.
. . .
. . .17
d4
dirino
name. . .
. . .59
d3. . .
. . .11/
. . .
. . .13
d1. . .
. . .38
d5
dir_cache_entry
Sistemas Operativos II (II-UJI) Gestión del SF155
SS OOIIIIIIIIEjercicios
n Ejercicio 4 (solución):
(1) Acceso al directorio /:Se busca en la caché una entrada cuyo nombre de directorio sea / y en la que el número de inodo del directorio padre sea 1. Puesto que se encuentra dicha entrada, se coloca al final de la lista quedando ésta como sigue:
d4 →→ d3 →→ d1 →→ d5 →→ /
(2) Acceso al directorio d1:Se busca en la caché una entrada cuyo nombre de directorio sea d1 y en la que el número de inodo del directorio padre sea 1. Puesto que se encuentra dicha entrada, se coloca al final de la lista quedando ésta como sigue:
d4 →→ d3 →→ d5 →→ / →→ d1
Sistemas Operativos II (II-UJI) Gestión del SF156
SS OOIIIIIIIIEjercicios
n Ejercicio 4 (solución):
(3) Acceso al directorio d2:Se busca en la caché una entrada cuyo nombre de directorio sea d2 y en la que el número de inodo del directorio padre sea 3. Puesto que no se encuentra dicha entrada y la lista tiene el máximo número posible de elementos, se elimina la primera entrada la lista y se inserta al final de ésta la entrada del directorio. La lista quedará entonces como sigue:
d3 →→ d5 →→ / →→ d1→→ d2
(4) Acceso al directorio d3:Se busca en la caché una entrada cuyo nombre de directorio sea d3 y en la que el número de inodo del directorio padre sea 9. Puesto que se encuentra dicha entrada, se coloca al final de la lista quedando ésta como sigue:
d5 →→ / →→ d1→→ d2→→ d3
Sistemas Operativos II (II-UJI) Gestión del SF157
SS OOIIIIIIIIEjercicios
n Ejercicio 5:
Diseñar un algoritmo que, sin hacer uso de las estructuras de datos del SO (no se puede acceder a la tabla de procesos), genere un listado de los directorios raíz de todos los procesos del sistema.
Sistemas Operativos II (II-UJI) Gestión del SF158
SS OOIIIIIIIIEjercicios
n Ejercicio 6:
¿Cuál es el número mínimo y máximo de ficheros que puede contener un subdirectorio del SF Ext2 cuyo tamaño es 3 Kbytes, siendo éste el tamaño de un bloque de dicho SF?
Sistemas Operativos II (II-UJI) Gestión del SF159
SS OOIIIIIIIIEjercicios
n Ejercicio 7:
Diseñar un algoritmo que, dado un número de inodo de un fichero de un SF Ext2, permita determinar si dicho fichero tiene o no todos sus datos almacenados en un mismo grupo de bloques.
Sistemas Operativos II (II-UJI) Gestión del SF160
SS OOIIIIIIIIEjercicios
n Ejercicio 8:
Sea un SF Ext2 en el que el número máximo de ficheros permitido en un grupo de bloques es 32, el tamaño de cada uno de sus inodos es de 128 bytes y la tabla de inodos de un determinado grupo de bloques ocupa 4 bloques. Mostrar el contenido inicial del único bloque que ocupa un directorio de este SF (que contiene dos ficheros denominados f.txt y f2, respectivamente) y la posterior evolución de éste cuando tienen lugar las siguientes operaciones sobre él:
(a) Se borra el fichero f2 del directorio.
(b) Se crea un subdirectorio denominado dir.
Sistemas Operativos II (II-UJI) Gestión del SF161
SS OOIIIIIIIIEjercicios
n Ejercicio 9:
Sea un SF basado en tabla de índices con las siguientes estructuras de datos y funciones definidas sobre él:
#define TAMANYO_BLOQUE 1024#define INODOS_POR_BLOQUE 16#define REFERENCIAS_POR_BLOQUE 256#define REG_DIRECT_POR_BLOQUE 32
#define IND_DIRECTOS 4#define IND_ISIMPLE 2#define IND_IDOBLE 2
#define NRELLENO 23
#define FREGULAR 0x01#define FDIRECTORIO 0x02#define LIBRE 0x03
TAMANYO_BLOQUE/(Tamaño T_Inodo)
TAMANYO_BLOQUE/(Tamaño T_Reg_Direct)TAMANYO_BLOQUE/(Tamaño referencia)
Sistemas Operativos II (II-UJI) Gestión del SF162
SS OOIIIIIIIIEjercicios
n Ejercicio 9 (cont.):
typedef char T_Nombre[LONG_MAX_NOMBRE];typedef char T_Byte;
typedef struct {int d_inodo;T_Nombre d_nombre;
} T_Reg_Direct;
typedef struct {char i_tipo;int i_tamanyo;int i_permiso;int i_directos [IND_DIRECTOS];int i_simple_ind[IND_ISIMPLE];int i_doble_ind [IND_IDOBLE];T_Byte i_relleno[NRELLENO];
} T_Inodo;
Sistemas Operativos II (II-UJI) Gestión del SF163
SS OOIIIIIIIIEjercicios
n Ejercicio 9 (cont.):
T_Reg_Direct dir_actual, dir_raiz;
typedef int T_Bloque_Referencias [REFERENCIAS_POR_BLOQUE];
typedef T_Inodo T_Bloque_Inodos [INODOS_POR_BLOQUE];
typedef T_Byte T_Bloque_Datos [TAMANYO_BLOQUE];
typedef T_Reg_Direct T_Bloque_Directorio [REG_DIRECT_POR_BLOQUE];
int L_B_Referencias (int id_bloque , T_Bloque_Referencias *bloque);
int E_B_Referencias (int id_bloque , T_Bloque_Referencias *bloque);
int L_B_Inodos (int id_bloque , T_Bloque_Inodos *bloque);
int E_B_Inodos (int id_bloque , T_Bloque_Inodos *bloque);
int L_B_Datos (int id_bloque , T_Bloque_Datos *bloque);
int E_B_Datos (int id_bloque , T_Bloque_Datos *bloque);
int L_B_Directorio (int id_bloque , T_Bloque_Directorio *bloque);int E_B_Directorio (int id_bloque , T_Bloque_Directorio *bloque);
Sistemas Operativos II (II-UJI) Gestión del SF164
SS OOIIIIIIIIEjercicios
n Ejercicio 9 (cont.):
Escribir una función que, dado un número de inodo de un fichero, obtenga un puntero a la estructura (tipo T_Inodo) de dicho inodo.
La función ha de devolver:
0: Ejecución ok.-1: Ejecución con error.
Sistemas Operativos II (II-UJI) Gestión del SF165
SS OOIIIIIIIIEjercicios
n Ejercicio 9 (solución):
012
0
INODOS_POR_BLOQUE - 2INODOS_POR_BLOQUE - 1
. . . . . . . . .
Bloque n°BLQ_INI_INODOS
1
. . .
. . .
TABLA INODOS
X
N°bloque = (X DIV INODOS_POR_BLOQUE) + BLQ_INI_INODOSN°entrada en bloque = X MOD INODOS_POR_BLOQUE
Sistemas Operativos II (II-UJI) Gestión del SF166
SS OOIIIIIIIIEjercicios
n Ejercicio 9 (solución):
typedef T_Inodo T_Bloque_Inodos [INODOS_POR_BLOQUE];
int L_B_Inodos (int id_bloque , T_Bloque_Inodos *bloque);
Lee el bloque número id_bloque, se interpreta como un bloque de inodos y se devuelve en la variable bloque.
Devuelve 0: ejecución ok;-1: ejecución con error;
Sistemas Operativos II (II-UJI) Gestión del SF167
SS OOIIIIIIIIEjercicios
n Ejercicio 9 (solución):
int extrae_inodo (int num_inodo , T_Inodo *inodo);VARIABLES LOCALES
int id_blq_inodo, error;T_Bloque_Inodos blq_inodo;
INICIOid_blq_inodo = (num_inodo DIV INODOS_POR_BLOQUE) + BLQ_INI_INODOS;error = L_B_Inodos (id_blq_inodo,blq_inodo);SI (error == 0)
ENTONCES inodo=&blq_inodo [num_inodo MOD INODOS_POR_BLOQUE];extrae_inodo = 0;
SINO extrae_inodo = -1;FINSI
FINFUNCTION extrae_inodo
Sistemas Operativos II (II-UJI) Gestión del SF168
SS OOIIIIIIIIEjercicios
n Ejercicio 10:
Sea un SF basado en inodos con las estructuras de datos que se especifican en el ejercicio 9.
Escribir una función que busque un fichero de un SF basado en tabla de índices (cuyo nombre se pasa como parámetro) dentro de un directorio (cuyo inodo -estructura tipo T_Inodo- también se le pasa como parámetro)
La función ha de devolver:
número de inodo del fichero: Ejecución ok-1: Ejecución con error
Sistemas Operativos II (II-UJI) Gestión del SF169
SS OOIIIIIIIIEjercicios
n Ejercicio 10 (solución):
Inodo Zde DIR
Tamaño. . .
W
X
Tipo y modo
..4 dev
15 etc...
35 usr
.
Bloque Wde DIR
Índices directos
Índices ind. simplesÍndices ind. dobles
Y...
...
Bloque X de referencias
32 d124 f2
...
46 d2
Bloque Y de DIR
Sistemas Operativos II (II-UJI) Gestión del SF170
SS OOIIIIIIIIEjercicios
n Ejercicio 10 (solución):
int busca_numero_inodo (T_inodo *inodo_actual , T_Nombre nombre);
INICIO
MIENTRAS ( no_encontrado AND no_fin_de_fichero_tipo_directorio )Búsqueda mediante los índices directos
MIENTRAS ( no_encontrado AND no_fin_de_fichero_tipo_directorio )Búsqueda mediante los índices indirectos simples
MIENTRAS ( no_encontrado AND no_fin_de_fichero_tipo_directorio )Búsqueda mediante los índices indirectos dobles
FINFUNCTION busca_numero_inodo
Sistemas Operativos II (II-UJI) Gestión del SF171
SS OOIIIIIIIIEjercicios
n Ejercicio 10 (solución):
Búsqueda mediante los índices directos:
PARA cada índice directo:
Leer bloque de datos del directorio
PARA cada entrada de directorio
Búsqueda
Sistemas Operativos II (II-UJI) Gestión del SF172
SS OOIIIIIIIIEjercicios
n Ejercicio 10 (solución):
Búsqueda mediante los índices indirectos simples:
PARA cada índice indirecto simple:
Leer bloque de referencias
PARA cada referencia del bloque
Leer bloque de datos del directorio
PARA cada entrada de directorio
Búsqueda
Sistemas Operativos II (II-UJI) Gestión del SF173
SS OOIIIIIIIIEjercicios
n Ejercicio 10 (solución):
Otros campos
800 801830 831832 NILNIL NIL
INODO nº 115200
al11111
freeal11114
209al32011
...
Bloque 800
210al20110 indice2
Búsqueda mediante los índices directos:
indice1
Sistemas Operativos II (II-UJI) Gestión del SF174
SS OOIIIIIIIIEjercicios
n Ejercicio 10 (solución):
Otros campos
800 801830 831832 NILNIL NIL
INODO nº 115200
al11111
freeal11114
209al32011
...
Bloque 891840891
1001
12067842
...
Bloque 832
210al20110indice2 indice3
Búsqueda mediante los índices indirectos simples:
indice1
Sistemas Operativos II (II-UJI) Gestión del SF175
SS OOIIIIIIIIEjercicios
n Ejercicio 10 (solución):
typedef T_Reg_Direct T_Bloque_Directorio [REG_DIRECT_POR_BLOQUE];
int L_B_Directorio (int id_bloque , T_Bloque_Directorio *bloque);
Lee el bloque número id_bloque, se interpreta como un bloque de registros de undirectorio y se devuelve en la variable bloque
Devuelve 0: ejecución ok;-1: ejecución con error;
Sistemas Operativos II (II-UJI) Gestión del SF176
SS OOIIIIIIIIEjercicios
n Ejercicio 10 (solución):
typedef int T_Bloque_ Referencias [REFERENCIAS_POR_BLOQUE];
int L_B_Referencias (int id_bloque , T_Bloque_Referencias *bloque);
Lee el bloque número id_bloque, se interpreta como un bloque de registros de direcciones de bloques y se devuelve en la variable bloque
Devuelve 0: ejecución ok;-1: ejecución con error;
Sistemas Operativos II (II-UJI) Gestión del SF177
SS OOIIIIIIIIEjercicios
n Ejercicio 10 (solución):
int busca_numero_inodo (T_inodo *inodo_actual, T_Nombre nombre);VARIABLES LOCALES
int indice1, indice2, indice3;
int total_bloques, bloque_actual, numinodo;BOOLEAN encontrado;
T_Bloque_Directorio blq_dir;T_Bloque_Referencias blq_refs;
INICIO
encontrado=FALSE;total_bloques = inodo_actual->i_tamanyo DIV TAMANYO_BLOQUE;bloque_actual = 0;numinodo = -1;
Sistemas Operativos II (II-UJI) Gestión del SF178
SS OOIIIIIIIIEjercicios
/* Búsqueda mediante los índices directos */indice1 := 0; /* indice1 ≡ N° índice directo */MIENTRAS ( (NOT encontrado) AND (bloque_actual < total_bloques) AND
(indice1 < IND_DIRECTO) ) HACERL_B_Directorio (inodo_actual->i_directos[indice1] , blq_dir)indice2 = 0; /* indice2 ≡ N° registros tipo directorio por bloque */MIENTRAS ( (NOT encontrado) AND
(indice2 < REG_DIRECT_POR_BLOQUE) ) HACERSI ((strcmp (blq_dir[indice2].d_nombre , nombre)) AND (blq_dir[indice2].d_inodo>=0))
ENTONCES encontrado = TRUE;numinodo = blq_dir[indice2].d_inodo;
ELSE indice2 ++;FINSI
FINMIENTRASSI (NOT encontrado) ENTONCES
indice1++; bloque_actual = bloque_actual + 1; FINSI
FINMIENTRAS
Sistemas Operativos II (II-UJI) Gestión del SF179
SS OOIIIIIIIIEjercicios
/* Búsqueda mediante los índices indirectos simples */
indice1 = 0; /* indice1 ≡ N° índice indirecto simple */MIENTRAS ( (NOT encontrado) AND (bloque_actual < total_bloques) AND
(indice1 < IND_ISIMPLE) ) HACERL_B_Referencias (inodo_actual->i_simple_ind[indice1] , blq_refs)indice2 = 0; /* indice2 ≡ N° registro tipo dirección de bloque */MIENTRAS ( (NOT encontrado) AND (bloque_actual < total_bloques) AND
(indice2 < REFERENCIAS_POR_BLOQUE) ) HACERL_B_Directorio (blq_refs[indice2] , blq_dir)indice3 = 0; /* indice3 ≡ N° registro tipo directorio por bloque */
Sistemas Operativos II (II-UJI) Gestión del SF180
SS OOIIIIIIIIEjercicios
MIENTRAS ( (NOT encontrado) AND
(indice3 < REG_DIRECT_POR_BLOQUE) ) HACERSI ((strcmp (blq_dir[indice3].d_nombre,nombre)) AND (blq_dir[indice3].d_inodo>=0))
ENTONCES encontrado = TRUE;numinodo = blq_dir[indice3].d_inodo;
ELSE indice3 ++;FINSI
FINMIENTRASSI (NOT encontrado)
ENTONCES indice2++; bloque_actual = bloque_actual + 1;
FINSIFINMIENTRAS
SI (NOT encontrado) ENTONCES indice1++; FINSIFINMIENTRAS
Sistemas Operativos II (II-UJI) Gestión del SF181
SS OOIIIIIIIIEjercicios
/* Búsqueda mediante los índices indirectos dobles */...busca_numero_inodo = numinodo;
FINFUNCTION busca_numero_inodo.
Sistemas Operativos II (II-UJI) Gestión del SF182
SS OOIIIIIIIIEjercicios
n Ejercicio 11:Sea un SF basado en inodos con las estructuras de datos que se especifican en el ejercicio 9.
Escribir una función que, dado un nombre de un fichero de un SF basado en tabla de índices, obtenga un puntero a la estructura del inodo (tipo T_Inodo) correspondiente a dicho fichero.
La función ha de devolver:
0: Ejecución ok-1: Ejecución con error
Sistemas Operativos II (II-UJI) Gestión del SF183
SS OOIIIIIIIIEjercicios
n Ejercicio 11 (solución):
T_inodo dir_actual, dir_raiz;
int nombre_absoluto (T_nombre nombre);
Devuelve 0 (TRUE): Si nombre es un nombre de fichero dado de forma absoluta;≠ 0 (FALSE): Si nombre es un nombre de fichero dado de forma realtiva;
int parte_nombre (T_nombre nombre , int partes , char *cadenas[ ]);
Si, p.e., nombre es parte1/parte2/parte3
devuelve partes=3cadenas[0] → parte1cadenas[1] → parte2cadenas[2] → parte3
Sistemas Operativos II (II-UJI) Gestión del SF184
SS OOIIIIIIIIEjercicios
int Obtiene_inodo (T_Nombre nombre_fich , T_inodo *inodo_result);
INICIOerror = 0;SI ( nombre_absoluto (nombre_fich) )
ENTONCES direct = dir_raiz;SINO direct = dir_actual;
FINSIparte_nombre (nombre_fich , partes , nombres);busqueda = 0; seguir = TRUE;
n Ejercicio 11 (solución):
Sistemas Operativos II (II-UJI) Gestión del SF185
SS OOIIIIIIIIEjercicios
numinodo = direct.d_inodo;
extrae_inodo (numinodo , inodo);MIENTRAS ( (busqueda < partes) AND seguir) HACER
numinodo := busca_numero_inodo (inodo , nombres[busqueda]);SI (numinodo <= 0) ENTONCES seguir = false; error = -1;
SINO extrae_inodo (numinodo , inodo);FINSI
FINMIENTRASSI (NOT seguir) ENTONCES inodo_result = inodo; FINSIObtiene_inodo = error;
FINFUNCTION Obtiene_inodo
n Ejercicio 11 (solución):
Sistemas Operativos II (II-UJI) Gestión del SF186
SS OOIIIIIIIIEjercicios
n Ejercicio 12:
Sea un SF basado en inodos con las estructuras de datos que se especifican en el ejercicio 9.
(a) Escribir una función definida como sigue:
int localiza (T_Inodo *inodo, int pos);
en la que, a partir de un número de byte pos de un fichero cuyo inodo se encuentra a partir de la posición inodo, se devuelva el número de bloque de disco en el que se encuentra dicho byte.
Si se produjese algún tipo de error al intentar realizar la operación la función devolverá un valor negativo.
Sistemas Operativos II (II-UJI) Gestión del SF187
SS OOIIIIIIIIEjercicios
n Ejercicio 12 (cont.):
(b) A partir de la función anterior, escribir otra función definida como sigue:
int truncado_seguro (T_Inodo inodo, int pos);
Dicha función truncará de forma segura a partir de la posición pos del fichero cuyo inodo se encuentra a partir de la posición inodo. El truncado seguro supondrá sustituir desde el byte pos del fichero en adelante la información original del fichero (cada uno de sus bytes) por el patrón 'a' y eliminar dicha información del fichero.
La función devolverá como resultado un cero si la operación se puede realizar sin ningún problema. En caso contrario, devolverá un valor negativo.
Se pueden utilizar, especificando su funcionamiento y sin necesidad de implementarlas, las funciones que se crean necesario para el tratamiento del espacio de almacenamiento libre.