Sie sind auf Seite 1von 187

SO

II
Tema 5. Gestión del Sistema de Ficheros II

Índice
■ Introducción
■ Ficheros
■ El sistema de directorios
■ Protección del sistema de ficheros
■ Compartición de ficheros
■ Estructura del sistema de ficheros
■ Montaje de sistemas de ficheros
■ Mecanismos de incremento de prestaciones
■ Implementación de sistemas de ficheros
■ Servicios POSIX para gestión de ficheros y directorios

Sistemas Operativos II (II-UJI) Gestión del SF


1
SO
II
Tema 5. Gestión del Sistema de Ficheros II

Índice
■ Implementación de sistemas de ficheros
✓ Gestión de ficheros en Linux
✓ Gestión de ficheros en Windows NT/2000

Sistemas Operativos II (II-UJI) Gestión del SF


2
SO
II
Tema 5. Gestión del Sistema de Ficheros II

Bibliografía
■ J. Carretero et al. Sistemas Operativos: Una Visión Aplicada. McGraw-Hill.
2001. Capítulo 8.
■ W. Stallings. Sistemas Operativos. Prenctice-Hall. 2001. Capítulo 12.
■ M. Beck. Linux Kernel Internals. Addison-Wesley. 1997.
■ H. Custer. Inside Windows NT. Microsoft Press. 1993.

Sistemas Operativos II (II-UJI) Gestión del SF


3
SO
II
Tema 5. Gestión del Sistema de Ficheros II

Índice
☛ ■ Introducción
■ Ficheros
■ El sistema de directorios
■ Protección del sistema de ficheros
■ Compartición de ficheros
■ Estructura del sistema de ficheros
■ Montaje de sistemas de ficheros
■ Mecanismos de incremento de prestaciones
■ Implementación de sistemas de ficheros
■ Servicios POSIX para gestión de ficheros y directorios

Sistemas Operativos II (II-UJI) Gestión del SF


4
SO
II
Introducción II

■ Sistema de gestión de ficheros:


◆ Conjunto de SW del sistema que ofrece a los usuarios y aplicaciones
unos servicios relativos al empleo de archivos

■ Funciones del sistema de gestión de ficheros:


◆ Ofrecer un conjunto estándar de rutinas de Visión de usuario
interfaz de E/S
◆ Mostrar al usuario los diferentes dispositivos de
almacenamiento masivo como sistemas de
ficheros (SF) Correspondencia entre
◆ Cumplir con las necesidades de gestión de datos visión de usuario y sistema
◆ Protección del SF físico de almacenamiento
◆ Integridad del SF masivo
◆ Optimizar el rendimiento
Muy interrelacionado
con el sistema de E/S

Sistemas Operativos II (II-UJI) Gestión del SF


5
SO
II
Introducción II

Interfaz con el usuario

Sistema lógico de ficheros y directorios

Dispositivo de almacenamiento lógico


Caché de bloques

Manejador de dispositivo

Controlador de dispositivo físico

Sistemas Operativos II (II-UJI) Gestión del SF


6
SO
II
Introducción II

Dispositivo lógico

0 1 840 1340 1756 8322

Fichero lógico

0 1 2 3 4 5 6 7

Sistemas Operativos II (II-UJI) Gestión del SF


7
SO
II
Introducción II

read (fd, buffer, tamaño)


Usuario buffer
tamaño
Fichero lógico

Fichero lógico 3 4 5 6 Bloques del


fichero

Bloques lógicos
1340 1756 840 8322 Bloques del
(Servidor dispositivo
de bloques)

1340
1756
Manejador de Bloques del
840 disco
disco y
dispositivo
8322

Sistemas Operativos II (II-UJI) Gestión del SF


8
SO
II
Tamaño bloque, ancho de banda y uso de disco II

Asumiendo tamaño medio de fichero = 14 Kby


Ancho de Banda (Kbytes/sec)

Uso del Espacio de Disco


800 100 %

75
500

50
100 uso del
ancho de
disco 25
50 banda
0 0
256 512 1K 2K 4K 8K 16K 32K

Tamaño de Bloque

Tamaño bloque recomendado = 4-8 Kby

Sistemas Operativos II (II-UJI) Gestión del SF


9
SO
II
Tema 5. Gestión del Sistema de Ficheros II

Índice
■ Introducción
☛ ■ Ficheros
■ El sistema de directorios
■ Protección del sistema de ficheros
■ Compartición de ficheros
■ Estructura del sistema de ficheros
■ Montaje de sistemas de ficheros
■ Mecanismos de incremento de prestaciones
■ Implementación de sistemas de ficheros
■ Servicios POSIX para gestión de ficheros y directorios

Sistemas Operativos II (II-UJI) Gestión del SF


10
SO
II
Definición de fichero II

■ ¿Qué es un fichero?
◆ Conjunto de información no volátil almacenada en un dispositivo de
almacenamiento masivo que tiene unas características
◆ Organización lógica para el usuario

■ Atributos de un fichero:
◆ Tipos:
● Estáticos: nombre, tipo, ubicación, tamaño, permisos, fechas, etc.

● Dinámicos: puntero, contador de aperturas, etc.

Sistemas Operativos II (II-UJI) Gestión del SF


11
SO
II
Nombres de ficheros y extensiones II

■ Nombres:
◆ Longitud máxima para MS-DOS 8 caracteres y 4096 para UNIX
◆ Sensibilidad mayúsculas: MS-DOS y Windows no distingue entre
mayúsculas, UNIX sí

■ Extensiones:
◆ Indican al SO, a las aplicaciones o a los usuarios características del
contenido del fichero
◆ Obligatorias o no según SO: MS-DOS sí, UNIX no

.c necesaria para compilador de lenguaje C


.z necesaria para aplicación compress
Para el SO no hay diferencia entre ambos
tipos de ficheros

Sistemas Operativos II (II-UJI) Gestión del SF


12
SO
II
Tipos de ficheros II

■ Cambian de un SO a otros
■ Todos los SO deben reconocer al menos un tipo de fichero: sus propios
ficheros ejecutables
◆ Reconocidos por la extensión o
◆ Reconocidos por su contenido
● 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 SF


13
SO
II
Tipos de ficheros II

Estructura de fichero ejecutable en Linux

Cabecera Número mágico


primaria
Número de secciones

Tipo de sección, Tamaño segmento texto


Cabecera de tamaño de la sección
sección 1 dirección virtual Tamaño segmento datos

Tamaño datos sin valor


inicial
Tipo de sección,
Cabecera de tamaño de la sección Tamaño tabla de símbolos
dirección virtual
sección n
Valor inicial de registros
Sección 1 Código
Dirección inicial
Datos con

...
Sección 2 valor inicial
Opciones

Datos con
Sección n valor inicial

Información
de carga

Tabla de
símbolos

Otra
información

Sistemas Operativos II (II-UJI) Gestión del SF


14
SO
II
Estructura interna del fichero II

■ Sin formato:
◆ Secuencia de bytes
◆ El usuario es el encargado de interpretar la información almacenada en
el fichero. La información almacenada no tiene ninguna estructura lógica

■ Con formato:
◆ Estructura sencilla de registros:
● Secuencia de registros (de longitud fija o variable)

● La información almacenada está estructurada en registros con

estructura lógica
◆ Estructuras complejas:
● Documentos con formato (HTML, postscript)

● Fichero de carga reubicable

Sistemas Operativos II (II-UJI) Gestión del SF


15
SO
II
Estructura interna del fichero II

Árbol de registros

Cabecera

Módulo
objeto

Cabecera
Registros de Módulo
longitud objeto
variable
Estructura
Byte o con
registro de formato
longitud fija

Sistemas Operativos II (II-UJI) Gestión del SF


16
SO
II
Tema 5. Gestión del Sistema de Ficheros II

Índice
■ Introducción
■ Ficheros
☛ ■ El sistema de directorios
■ Protección del sistema de ficheros
■ Compartición de ficheros
■ Estructura del sistema de ficheros
■ Montaje de sistemas de ficheros
■ Mecanismos de incremento de prestaciones
■ Implementación de sistemas de ficheros
■ Servicios POSIX para gestión de ficheros y directorios

Sistemas Operativos II (II-UJI) Gestión del SF


17
SO
II
El sistema de directorios II

■ ¿Qué es un directorio?
◆ Fichero especial en el cual la información almacenada pertenece al SO y
no a los usuarios
◆ 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 SF


18
SO
II
El sistema de directorios II

■ Estructura un directorio:
◆ 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

Número
Tipo de del primer
Nombre archivo Hora bloque Inodo Nombre

AtributosFecha Tamaño Directorio de UNIX

Directorio de MS-DOS

Sistemas Operativos II (II-UJI) Gestión del SF


19
SO
II
El sistema de directorios II

■ Finalidad doble de un directorio:


◆ Cara al usuario: Permite organizar los ficheros de éste
◆ 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 SF


20
SO
II
Organización de directorios II

■ Directorio de un nivel
■ Árbol de directorios
■ Grafo de directorios:
◆ Permite compartición de ficheros y subdirectorios
◆ Forma habitual de compartir ficheros: creación de enlaces

Sistemas Operativos II (II-UJI) Gestión del SF


21
SO
II
Organización de directorios II

■ Grafo de directorios:

Acíclico

00100101
00101111 ASCII
00110101

00100101
00100101 .C 00101111
00110101
00101111
00110101

00100101 00100101
00101111 00101111
00110101 00110101
.C ASCII

Sistemas Operativos II (II-UJI) Gestión del SF


22
SO
II
Enlaces II

■ Tipos de enlaces:
◆ Enlaces simbólicos:
● Fichero nuevo con el nombre del fichero destino dentro

● Acceso directo de Windows o “soft link” de UNIX

◆ Enlaces físicos:
● Un único fichero con contador de enlaces

● “Hard link” de UNIX

Sistemas Operativos II (II-UJI) Gestión del SF


23
SO
II
Enlaces II

■ Enlaces físicos:
◆ Los enlaces se contabilizan a través de un contador de enlaces que
aparece como atributo en el inodo
◆ Crear de un enlace ⇒ Incrementar contador de enlaces
◆ Borrar un fichero ⇒ Decrementar contador de enlaces
● Puede hacerse por varios caminos
● 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 SF


24
SO
II
Enlaces II

$pwd
/home/castano Inodo nº 40 (f.soft) Bloque 800
$ln f f.hard
Otros campos /home/castano/f
$ln –s f f.soft
800 NIL
Bloque de /home/castano NIL NIL
FREE
NIL NIL
. 10
NIL NIL
.. 30
f 20
f.hard 20 Inodo nº 20 (f y f.hard) Bloque 600
f.soft 40
Otros campos
... ...
600 NIL Datos
NIL NIL
NIL NIL
NIL NIL FREE

Sistemas Operativos II (II-UJI) Gestión del SF


25
SO
II
Enlaces II

■ Peligro de los enlaces:


◆ Existencia de bucles en el árbol de directorios (ciclos en el grafo)
● No permiten recorrer el árbol de directorios completo

● Pueden hacer que una traducción de nombre no acabe nunca

◆ Soluciones:
● Permitir sólo enlaces a ficheros, no a subdirectorios

● Algoritmo de búsqueda de bucle cuando se crea un enlace

◆ Limitaciones de implementación en UNIX:


● No se pueden establecer enlaces duros entre SF diferentes

● No se pueden establecer enlaces duros a un directorio

Sistemas Operativos II (II-UJI) Gestión del SF


26
SO
II
Tema 5. Gestión del Sistema de Ficheros II

Índice
■ Introducción
■ Ficheros
■ El sistema de directorios
☛ ■ Protección del sistema de ficheros
■ Compartición de ficheros
■ Estructura del sistema de ficheros
■ Montaje de sistemas de ficheros
■ Mecanismos de incremento de prestaciones
■ Implementación de sistemas de ficheros
■ Servicios POSIX para gestión de ficheros y directorios

Sistemas Operativos II (II-UJI) Gestión del SF


27
SO
II
Esquema de protección de datos II

Dispositivo compartido por Sistema de protección de datos


todos los usuarios Control de acceso a los ficheros por
parte de los usuarios

■ Capacidades
◆ Cada fichero (y directorio) tiene asignadas unas capacidades (permisos)
que indican qué usuarios y qué tipo de acceso pueden hacer

■ Listas de control de acceso (ACL “Access Control List”):


◆ 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 SF


28
SO
II
Permisos de acceso en UNIX II

■ Permisos básicos:
◆ Formato en octal:

sst rwx rwx rwx

◆ Permisos de lectura y escritura para usuario, miembros del grupo y otros


◆ Bit “sticky” (pegajoso)
◆ Bits “setuid” y “setguid”

■ Permisos extendidos

Sistemas Operativos II (II-UJI) Gestión del SF


29
SO
II
Permisos de acceso en UNIX II

■ Bit “sticky”:
◆ Para ficheros:
● El fichero permanece cargado en MC (no se lleva al dispositivo de

intercambio)
◆ Para directorios:
● 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
● Se usa para directorios de acceso público: Ejemplo /tmp

Sistemas Operativos II (II-UJI) Gestión del SF


30
SO
II
Permisos de acceso en UNIX II

■ Bit “sticky” (cont.):


◆ Ejemplos:
$ ls -ld /tmp
drwxrwxrwt 15 root root 12288 abr 20 16:32 /tmp
$ pwd
/users/icc/castano
$ mkdir dir chmod 770 dir; chmod +t dir
$ chmod 1770 dir
$ ls -ld dir
drwxrwx--T 2 castano icc 4096 abr 20 16:32 dir
$ chmod 1777 dir
$ ls -ld dir
drwxrwxrwt 2 castano icc 4096 abr 20 16:32 dir

Sistemas Operativos II (II-UJI) Gestión del SF


31
SO
II
Permisos de acceso en UNIX II

■ Bits “setuid” y “setguid”:


◆ 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 SF


32
SO
II
Permisos extendidos en UNIX II

■ ¿Qué son?
◆ Caso particular de un esquema general de permisos de listas de acceso

■ ¿Para qué sirven?


◆ Para especificar permisos de lectura, escritura y/o ejecución a usuarios
concretos de la máquina y/o grupos de usuarios concretos
● Mayor flexibilidad para configurar permisos

● Coste adicional (un fichero o directorio tiene asociado un fichero

adicional)

Sistemas Operativos II (II-UJI) Gestión del SF


33
SO
II
Permisos extendidos en UNIX II

■ Formato de un fichero de permisos extendidos:

atributes: (SUID | SGID | SVTX)


base permissions:
owner (castano): rw-
group (icc): r--
others: ---
Extended permissions:
enabled
deny rw- u:juan
permit –w- u:pepe g:ii
specify r-x u:pedro

Sistemas Operativos II (II-UJI) Gestión del SF


34
SO
II
Permisos extendidos en UNIX II

■ Comandos del shell relacionados:


◆ aclget [-o Outfile] File
● Muestra por la salida estándar la información del control de acceso del
fichero File
● -o Outfile redirecciona la salida estándar del comando al fichero
Outfile

◆ aclput [-i Infile] File


● Asigna al fichero File la información de control de acceso que se

especifique por la entrada estándar


● -i Infile asigna al fichero File la información de control de acceso

contenida en el fichero Infile Ctrl+D para finalizar


◆ acledit File
● Edita (con el editor definido por defecto para el usuario) la lista de
permisos del fichero File y permite modificarlos

Sistemas Operativos II (II-UJI) Gestión del SF


35
SO
II
Permisos extendidos en UNIX II

■ 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 SF


36
SO
II
Tema 5. Gestión del Sistema de Ficheros II

Índice
■ Introducción
■ Ficheros
■ El sistema de directorios
■ Protección del sistema de ficheros
☛ ■ Compartición de ficheros
■ Estructura del sistema de ficheros
■ Montaje de sistemas de ficheros
■ Mecanismos de incremento de prestaciones
■ Implementación de sistemas de ficheros
■ Servicios POSIX para gestión de ficheros y directorios

Sistemas Operativos II (II-UJI) Gestión del SF


37
SO
II
Compartición de ficheros II

■ Necesidad de compartir ficheros entre usuarios

■ Aspectos implicados:
◆ Permisos de acceso
◆ Gestión de accesos simultáneos

Sistemas Operativos II (II-UJI) Gestión del SF


38
SO
II
Semántica de coutilización II

■ Especifica el efecto de varios procesos accediendo de forma simultánea al


mismo archivo y cuándo se hacen efectivas las modificaciones
■ Tipos de semántica de coutilización:

◆ Semántica de archivos inmutables:


● Una vez creado el archivo sólo puede ser compartido para lectura y

no cambia nunca

◆ Semántica UNIX (POSIX):


● Cada proceso independiente tiene una imagen del fichero y no

comparten puntero → Mecanismos de sincronización necesarios


● 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 SF


39
SO
II
Semántica de coutilización II

■ Tipos de semántica de coutilización (cont.):

◆ Semántica de sesión:
● Las escrituras que hace un proceso no son inmediatamente visibles

para los demás procesos con el archivo abierto


● Cuando se cierra el archivo los cambios se hacen visibles para las

futuras sesiones
● Un archivo puede tener temporalmente varias imágenes (versiones)

● Sincronización explícita necesaria si se requiere actualización

inmediata

Sistemas Operativos II (II-UJI) Gestión del SF


40
SO
II
Tema 5. Gestión del Sistema de Ficheros II

Índice
■ Introducción
■ Ficheros
■ El sistema de directorios
■ Protección del sistema de ficheros
■ Compartición de ficheros
☛ ■ Estructura del sistema de ficheros
■ Montaje de sistemas de ficheros
■ Mecanismos de incremento de prestaciones
■ Implementación de sistemas de ficheros
■ Servicios POSIX para gestión de ficheros y directorios

Sistemas Operativos II (II-UJI) Gestión del SF


41
SO
II
Sistemas de ficheros basados en FAT II

Bloque de
arranque

Mapa de bits de FAT Duplicado Bloques de datos:


bloques libres de  directorio
FAT  fichero
- N° bloques del SF  libre
- N° identificación del SF
Bloque con - Tamaño bloque
información - N° bloque raíz
sobre el sistema - Primer bloque datos
de ficheros - ...

Sistemas Operativos II (II-UJI) Gestión del SF


42
SO
II
Sistemas de ficheros basados en FAT II

■ Asignación enlazada de bloques de ficheros:

◆ FAT (“File Allocation Table”):


● Una entrada en la tabla por cada bloque del disco
● Cada entrada apunta al siguiente bloque del fichero
● 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)
● Viable para PC's pero no para ordenadores con grandes SF

Sistemas Operativos II (II-UJI) Gestión del SF


43
SO
II
Sistemas de ficheros basados en FAT II

Directorio ARREL
(6)

PRACTIQUES ASCII ASCII


( 11 )
mail.avui copia.txt
( 8, 9 ) (10,12, 22)

00100101
.C ASCII 00101111
00110101

pr1.c read.me pr1.o


(16, 13-15, 20) (25,26) (27-31)

Sistemas Operativos II (II-UJI) Gestión del SF


44
SO
II
Sistemas de ficheros basados en FAT II
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

mail.avui
mail.avui

PRACTIQUES
copia.txt

copia.txt
ARREL
AT

pr1.c

pr1.c
pr1.c
RV

FAT
SE
RE

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

copia.txt

read.me

read.me

pr1.o
pr1.c

pr1.c

pr1.o

pr1.o

pr1.o

pr1.o
Bloque 2 Bloque 3 Bloque 4 Bloque 5
16
0 X 8 9 16 13 24 FREE
1 X 9 EOF 17 FREE 25 26 13
2 X 10 12 18 FREE 26 EOF
3 X 11 EOF 19 FREE 27 28 14
4 X 12 22 20 EOF 28 29
5 X 13 14 21 FREE 29 30 15
6 EOF 14 15 22 EOF 30 31
7 15 23 31 20
FREE 20 BAD EOF
Bloque libre (-2) Bloque defectuoso (-3) Fin fichero (-1)
Sistemas Operativos II (II-UJI) Gestión del SF
45
SO
II
Sistemas de ficheros basados en FAT II

■ ¿Cómo acceder al fichero FAT


Bloque 5
ARREL\PRACTIQUES\read.me?
24 FREE
25 26
Bloque 6 Bloque 11 Bloque 25 26 EOF
Bloque 26
27 28
. 6 . 11 28 29
Otros campos Otros campos 29 30
.. 6 .. 6 30 31
Otros campos Otros campos 31 EOF
PRACTIQUES 11 pr1.c 16
Otros campos
Otros campos read.me 25 Datos de Datos de
mail.avui 8
Otros campos read.me read.me
Otros campos pr1.o 27
copia.txt 10 Otros campos
Otros campos
... ...
Basura FREE Basura FREE
Otros campos Otros campos

Sistemas Operativos II (II-UJI) Gestión del SF


46
SO
II
Sistemas de ficheros basados en inodos II

Bloque de Mapa de bits de Bloques de


arranque bloques libres inodos

Superbloque Mapa de bits de Bloques de datos:


inodos  directorio
- N° bloques del SF
- N° inodos del SF
 fichero
- Tamaño bloque  indirección
- N° inodo raíz  libre
- Primer bloque datos
- ...

Sistemas Operativos II (II-UJI) Gestión del SF


47
SO
II
Sistemas de ficheros basados en inodos II

inodo
■ Asignación indexada de bloques de ficheros:
Número de inodo
◆ Tabla de inodos: Tamaño del fichero
● Un i-nodo por fichero Permisos
● Una entrada en la tabla de inodos por inodo Número de links al
● Ventajas: fichero
UID del propietario
 Para ficheros cortos → Localización
GID del propietario
inmediata de la lista de bloques
 Para ficheros largos → A lo sumo dos o tres Tiempo de creación
referencias a disco para la localización Tiempo de último acceso

Bloques directos a datos

Bloques indirectos
simples
Bloques indirectos
dobles

Sistemas Operativos II (II-UJI) Gestión del SF


48
SO
II
Sistemas de ficheros basados en inodos II

inodo Datos

Indices directos
Datos
Indices indirectos simples

Indices indirectos dobles

Datos

Datos

Datos

Sistemas Operativos II (II-UJI) Gestión del SF


49
SO
II
Sistemas de ficheros basados en inodos II
Número de inodos del SF
■ El superbloque: Número de bloques del SF

Número de bloques del mapa de bits de inodos

Número de bloques del mapa de bits de bloques libres


Presente en
disco y en Primer bloque de datos
memoria
Inodo raíz del SF

Tamaño máximo de fichero 01001


00000
Número mágico 10110
11101
Punteros a los bloques de mapas de bits de inodos 1100
.....
Punteros a los bloques de mapas de bits de bloques libres
01001
Número de dispositivo
Presente en memoria 00000
pero no en disco 10110
Inodo sobre el que se monta el SF 11101
1100
Tiempo de última actualización .....
Superbloque modificado ("dirty flag")

Sistemas Operativos II (II-UJI) Gestión del SF


50
SO
II
Sistemas de ficheros basados en inodos II

■ Tablas de datos implicadas:

0 ...
1 1 READ
2 ... 1 /etc/passwd
3 1 WRITE
4 1 READ 2 /usr/castano
5 ...
6 ...
Tabla de ficheros Tabla de ficheros Tabla de inodos
del proceso del sistema

Sistemas Operativos II (II-UJI) Gestión del SF


51
SO
II
Sistemas de ficheros basados en inodos II

■ ¿Cómo localizar el fichero /usr/bin/cat?

Bloque 20 del Inodo 6 Bloque 140 del Inodo 91 Bloque 132 del Inodo 46
directorio / (/usr) directorio /usr (/usr/bin) directorio /usr/bin (/usr/bin/cat)

1 . Tipo y modo 6 . Tipo y modo 91 . Tipo y modo


1 .. Tamaño 1 .. Tamaño 6 .. Tamaño
4 dev ... 20 users ... 22 ls ...
15 etc 140 66 local 132 11 more 67
6 usr 91 bin 46 cat
30 tmp 40 cp

Sistemas Operativos II (II-UJI) Gestión del SF


52
SO
II
Tema 5. Gestión del Sistema de Ficheros II

Índice
■ Introducción
■ Ficheros
■ El sistema de directorios
■ Protección del sistema de ficheros
■ Compartición de ficheros
■ Estructura del sistema de ficheros
☛ ■ Montaje de sistemas de ficheros
■ Mecanismos de incremento de prestaciones
■ Implementación de sistemas de ficheros
■ Servicios POSIX para gestión de ficheros y directorios

Sistemas Operativos II (II-UJI) Gestión del SF


53
SO
II
Montaje de SF II

■ MS-DOS y Windows NT/2K:


◆ Árbol de directorios único por dispositivo lógico (volumen o partición)
◆ No existe el concepto de SF montados
◆ El usuario debe conocer el nombre del dispositivo donde se encuentra
un fichero
◆ 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 SF


54
SO
II
Montaje de SF II

■ UNIX: Y periféricos, terminales, etc.


◆ Árbol de directorios único en el SF
● Todos los dispositivos lógicos (particiones) cuelgan del directorio raiz

Montaje de SF

◆ Montaje de un SF:
● Conexión de un SF almacenado en una partición a un directorio del árbol

de directorios existente

◆ El SO oculta al usuario la existencia de dispositivos


El usuario no necesita conocer en qué dispositivo se encuentra un fichero

Sistemas Operativos II (II-UJI) Gestión del SF


55
SO
II
Montaje de SF en UNIX II

■ Comandos del shell relacionados: mount y umount


◆ Ejemplos:
● mount /dev/hda1 –t msdos /win
● umount /win
SF a montar Tipo SF Punto de montaje

El SF no debe estar usándose en ese momento

■ Ficheros del sistema relacionados:


◆ /etc/fstab: SF a montar en arranque del sistema
◆ /etc/mntab: SF montados actualmente en el sistema

Sistemas Operativos II (II-UJI) Gestión del SF


56
SO
II
Montaje de SF en UNIX II

■ Operaciones implicadas en el montaje de un SF:


◆ Se lleva a la tabla de superbloques de MC el superbloque del SF a
montar
◆ En dicho superbloque se guarda:
● (Puntero al) Inodo sobre el que se monta el SF

● (Puntero al) Inodo raíz del SF a montar

◆ En el inodo sobre el que se monta el SF se guarda:


● (Puntero al) Inodo raíz del SF a montar

● (Puntero a la) Entrada de tabla de superbloques del superbloque del

SF a montar

Sistemas Operativos II (II-UJI) Gestión del SF


57
SO
II
Montaje de SF en UNIX II

home bin dev

root usr
rdsk

dev1
Camino
dist bin lib Punto de montado
rdsk1

Directorio
tex bin lib
Directorio montado
Tabla inodos
Fichero

Tabla superbloques

bin util

tex bin

/dev/hda3

Sistemas Operativos II (II-UJI) Gestión del SF


58
SO
II
Ejemplo de montaje de SF en Linux II

■ 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.
/
Dispositivo 1
usr

Dispositivo 2
local

Dispositivo 3

Sistemas Operativos II (II-UJI) Gestión del SF


59
SO
II
Ejemplo de montaje de SF en Linux II

■ Ejercicio (sol.):

Tabla superbloques Tabla inodos


0 1 2 0 1 2 3 4

i_no 0 1 2 3 4

s_dev 1 2 3 i_dev 1 1 2 2 3

s_covered 0 1 3 i_sb 0 0 1 1 2

s_mounted 0 2 4 i_mount -1 2 -1 4 -1

/ (disp1) /usr /(disp2) /usr/local /(disp3)

s_covered: Inodo sobre el que se monta el SF i_no: Número inodo del fichero
s_mounted: Inodo raíz del SF montado i_dev: Dispositivo donde está el fichero
i_mount:Inodo raíz del SF que se monta
sobre este fichero

Sistemas Operativos II (II-UJI) Gestión del SF


60
SO
II
Tema 5. Gestión del Sistema de Ficheros II

Índice
■ Introducción
■ Ficheros
■ El sistema de directorios
■ Protección del sistema de ficheros
■ Compartición de ficheros
■ Estructura del sistema de ficheros
■ Montaje de sistemas de ficheros
☛ ■ Mecanismos de incremento de prestaciones
■ Implementación de sistemas de ficheros
■ Servicios POSIX para gestión de ficheros y directorios

Sistemas Operativos II (II-UJI) Gestión del SF


61
SO
II
Incremento de prestaciones II

■ Basados en el uso de almacenamiento intermedio de datos de E/S en MC


Acceso a disco mucho más lento que el acceso a MC
■ Dos tipos de mecanismos:
◆ Discos RAM:
● Datos almacenados sólo en memoria → Contenido volátil

● Aceptan todas las operaciones de cualquier otro sistema de archivos

● Pseudodispositivos para almacenamiento temporal o para

operaciones auxiliares del SO


◆ Cachés de datos:
● Instaladas en secciones de MC controladas por el SO

● Almacenan datos para optimizar accesos posteriores

● Se basan en principio de localidad de referencias

Sistemas Operativos II (II-UJI) Gestión del SF


62
SO
II
Incremento de prestaciones II

■ Cachés de datos (cont.):


◆ Dos cachés relacionadas con el SF:
● Caché de nombres

● Caché de bloques

Proceso Proceso

Caché

Caché

Disco Disco

Sistemas Operativos II (II-UJI) Gestión del SF


63
SO
II
Caché de nombres II

■ Objetivo:
◆ Acelerar la interpretación de los nombres de ficheros
■ ¿Qué se almacena?
◆ Entradas de directorio de los ficheros abiertos recientemente
◆ UNIX: “Mapeo” entre nombre de fichero y su número de inodo
■ Interpretación del nombre de un fichero:
◆ Cuando se abre un fichero se mira si cada uno de sus componentes
aparecen en la caché
● Si está: Acceso al número inodo del componente

● Si no está: Añadir nueva entrada en caché

■ Consistencia de la caché:
◆ Casi todas las operaciones de creación, destrucción y cambio de
ficheros actualizan la caché

Sistemas Operativos II (II-UJI) Gestión del SF


64
SO
II
Caché de nombres de directorios en Linux II

■ ¿Qué es la caché de nombres de directorios?


◆ Almacena el "mapeo" entre el nombre de un directorio y su número de inodo

■ Implementación de la caché de nombres de directorios:


◆ Lista doblemente enlazada de estructuras tipo dir_cache_entry asociadas
a los directorios usados más recientemente
◆ Lista con ordenación LRU (Least Recently Used)
◆ 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 SF


65
SO
II
Caché de nombres de directorios en Linux II

■ Implementación de la caché de nombres de directorios (cont.):


◆ 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 SF


66
SO
II
Caché de nombres de directorios en Linux II

■ Localización de un directorio:
◆ 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
◆ 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 SF


67
SO
II
Caché de nombres de directorios en Linux II

■ Localización de un directorio (cont):


◆ ¿Cómo buscar el fichero /usr/bin/cat?

struct dir_cache_entry

dir 1 123 1 1 6
inode 1 45 6 10 47
name[] / tmp usr etc bin
next_lru
prev_lru
lru-head

lru_head

Sistemas Operativos II (II-UJI) Gestión del SF


68
SO
II
Caché de nombres de directorios en Linux II

■ Localización de un directorio (cont):


◆ ¿Cómo buscar el fichero /usr/bin/cat (cont.)?
● 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 SF


69
SO
II
Caché de bloques II

■ Justificación de la caché de bloques:


◆ Los SFs necesitan leer y escribir bloques de disco
◆ Los bloques son reaccedidos a menudo
◆ Lecturas anticipadas .
■ ¿Qué es la caché de bloques?
◆ Estructura de datos en MC con los bloques más frecuentemente utilizados
■ Principal problema:
◆ Coherencia de la caché
◆ Fiabilidad del SF

Sistemas Operativos II (II-UJI) Gestión del SF


70
SO
II
Flujo de datos con la caché de bloques II
read (fd, buffer, tamaño)
Usuario buffer
tamaño
Fichero lógico

Fichero lógico 3 4 5 6 Bloques del


fichero

Bloques lógicos
(Servidor 1340 1756 840 8322 Bloques del
dispositivo
de bloques)

Caché de bloques
(Servidor 1340 840 1756 8322
de bloques)
1340
1756
Manejador de Bloques del
840 disco
disco y
dispositivo
8322

Sistemas Operativos II (II-UJI) Gestión del SF


71
SO
II
Caché de bloques II

■ Referencia de un bloque de un fichero:


◆ Si está en la caché: Acceso a información de la caché
◆ Si no está en la caché:
● Leer el bloque del dispositivo y copiarlo en la caché

● Si la caché está llena, hacer hueco para el nuevo bloque

reemplazando uno de los existentes → Políticas de reemplazo


◆ Si el bloque ha sido escrito (sucio) → Política de escritura

Sistemas Operativos II (II-UJI) Gestión del SF


72
SO
II
Políticas de reemplazo II

■ Algoritmos de reemplazo:
◆ FIFO (First in First Out)
◆ MRU (Most Recently Used)
◆ LRU (Least Recently Used)
● Reemplaza el bloque que lleva más tiempo sin ser usado

● 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
● Política de reemplazo más frecuentemente utilizada

● La mayoría de los servidores de archivos distinguen entre bloques

especiales y bloques de datos

Sistemas Operativos II (II-UJI) Gestión del SF


73
SO
II
Políticas de escritura II

■ Escritura inmediata (write-through):


◆ Se escribe cada vez que se modifica el bloque
◆ No hay problema de fiabilidad, pero se reduce el rendimiento del sistema
■ Escritura diferida (write-back):
◆ Sólo se escriben los datos a disco cuando se eligen para su reemplazo por
falta de espacio en la caché
◆ Optimiza el rendimiento, pero genera problemas de fiabilidad

Sistemas Operativos II (II-UJI) Gestión del SF


74
SO
II
Políticas de escritura II

■ Escritura retrasada (delayed-write):


◆ Escribe a disco los bloques de datos modificados en la caché de forma
periódica cada cierto tiempo (30 segundos en UNIX)
◆ Compromiso entre rendimiento y fiabilidad
◆ Reduce la extensión de los posibles daños por pérdida de datos
◆ Los bloques especiales se escriben inmediatamente al disco
◆ No se puede quitar un disco del sistema sin antes volcar los datos de la
caché
■ Escritura al cierre (write-on-close):
◆ Escribe a disco los bloques de datos
◆ Cuando se cierra un archivo se vuelcan al disco los bloques del mismo que
tienen datos actualizados
◆ Complementaria a las otras

Sistemas Operativos II (II-UJI) Gestión del SF


75
SO
II
La caché de buffers de bloques de Linux II

■ ¿Qué es la caché de buffers de bloques?


◆ 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
◆ Proporciona una lista LRU con los bloques accedidos recientemente
◆ Utiliza buffers de diferentes tamaños
◆ Independiente del SF
◆ 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 SF


76
SO
II
La caché de buffers de bloques de Linux II

■ ¿Qué es la caché de buffers de bloques (cont.)?


◆ Permite incrementar la velocidad de acceso a un dispositivo por bloques
Sólo hay que acceder al dispositivo en dos casos:
● Caso de lectura: El bloque leído no está en el sistema de buffers
● Caso de escritura:
 El contenido del bloque copiado en memoria difiere del que
contiene el dispositivo por bloques
El 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 SF


77
SO
II
La caché de buffers de bloques de Linux II

■ Implementación de la caché de buffers de bloques:


◆ 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 SF


78
SO
II
La caché de buffers de bloques de Linux II

■ Implementación de la caché de buffers de bloques (cont.):


◆ 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 SF


79
SO
II
La caché de buffers de bloques de Linux II

■ Manejo de buffers de bloques:


◆ Buffers en uso:

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
● 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
◆ Buffers libres:

free_list[NR_SIZES] • Para cada posible tamaño de bloque hay
una lista doblemente enlazada de los buffers libres de la caché
● 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 SF


80
SO
II
La caché de buffers de bloques de Linux II

lru_list[BUF_CLEAN]

lru_list[BUF_BLOCKED]
.
.
.

free_list[SIZE_1]

free_list[SIZE_2]
.
.
.

Sistemas Operativos II (II-UJI) Gestión del SF


81
SO
II
La caché de buffers de bloques de Linux II

■ Procesos “ update” y “ bdflush” :


◆ 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 SF


82
SO
II
Tema 5. Gestión del Sistema de Ficheros II

Índice
■ Introducción
■ Ficheros
■ El sistema de directorios
■ Protección del sistema de ficheros
■ Compartición de ficheros
■ Estructura del sistema de ficheros
■ Montaje de sistemas de ficheros
■ Mecanismos de incremento de prestaciones
☛ ■ Implementación de sistemas de ficheros
✓ Gestión de ficheros en Linux
✓ Gestión de ficheros en Windows NT/2000
■ Servicios POSIX para gestión de ficheros y directorios

Sistemas Operativos II (II-UJI) Gestión del SF


83
SO
II
Tema 5. Gestión del Sistema de Ficheros II

Índice
■ Implementación de sistemas de ficheros
☛ ✓ 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”
✓ Gestión de ficheros en Windows NT/2000

Sistemas Operativos II (II-UJI) Gestión del SF


84
SO
II
El SF de Linux II

■ El Sistema de Ficheros Virtual ("Virtual File System" - VFS):


◆ Linux soporta diferentes tipos de SF:
● Basados en disco: Minix, ext2, ext3, reiserFS, XFS, JFS, ms-dos, etc.
● Sistemas remotos (de red): Nfs, coda, samba, etc
● Sistemas especiales: procfs

◆ Dispone para ello de una interface entre el núcleo y los diferentes SF: el VFS
● Permite acceder a ficheros sin tener en cuenta el SF bajo el que se
encuentra
● 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 SF


85
SO
II
El SF de Linux II

Proceso 1 Proceso 2 ... Proceso n


Modo usuario
Modo supervisor
Sistema de Ficheros
Virtual File System

...
Ext2 Ext3 ReiserFS proc Nfs

Caché de Caché de nombres


Caché de buffers de bloques inodos de directorio

Drivers dedispositivos Núcleo Red

...

Sistemas Operativos II (II-UJI) Gestión del SF


86
SO
II
El VFS II

■ Funciones del VFS:


◆ Implementa acciones estándar relacionadas con el SF
◆ Proporciona tareas específicas al correspondiente SF bajo el que se
encuentra el fichero accedido

Sistemas Operativos II (II-UJI) Gestión del SF


87
SO
II
Recordando ... II

■ Tablas de datos en un SF basado en inodos:

0 ...
1 1 READ
2 ... 1 /etc/passwd
3 1 WRITE
4 1 READ 2 /usr/castano
5 ...
6 ...
Tabla de ficheros Tabla de ficheros Tabla de inodos
del proceso del sistema

Sistemas Operativos II (II-UJI) Gestión del SF


88
SO
II
El VFS II

Tabla de descriptores de ficheros


■ Tabla de ficheros abiertos por un proceso:
◆ 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*/
};

■ Tabla de ficheros abiertos en el sistema:


◆ Lista circular doblemente enlazada de estructuras tipo file cuyo inicio es:
struct file *first_file;

Sistemas Operativos II (II-UJI) Gestión del SF


89
SO
II
El VFS II

■ Tabla de ficheros abiertos en el sistema (cont.):


◆ 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 SF


90
SO
II
El VFS II

■ Tabla de ficheros abiertos en el sistema (cont.):


◆ 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 SF


91
SO
II
El VFS II

■ Tabla de inodos:
◆ Lista circular doblemente enlazada de estructuras tipo inode cuyo inicio es:

struct inode *first_inode;


■ Caché de inodos:
◆ Acceso rápido a inodos activos de la tabla → Tabla hash
● 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)
◆ Si un inodo no está en la caché:
● Se llama a una rutina específica para leer el inodo
● El inodo leído se deja en la caché
◆ Política de reemplazo de entradas de la caché:
● Algoritmo LRU

Sistemas Operativos II (II-UJI) Gestión del SF


92
SO
II
El VFS II

■ Implementación de la tabla de inodos:


◆ Estructura de datos de un inodo del VFS:
super_block
inode

Datos independientes Superbloque


del SF

Superbloque
inode_operations
Operaciones sobre inodo create
link
unlink
Datos dependientes ...
del SF

Sistemas Operativos II (II-UJI) Gestión del SF


93
SO
II
El VFS II

■ Implementación de la tabla de inodos:


◆ 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 SF


94
SO
II
El VFS II

■ 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 mapear
el 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 SF


95
SO
II
El VFS II

■ 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 SF


96
SO
II
El VFS II

■ Implementación de la tabla de inodos (cont.):


◆ 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 SF


97
SO
II
El VFS II

■ El superbloque:
◆ Cada SF que se monta en el SF se representa en una estructura tipo
super_block dentro de la tabla super_blocks[NR_SUPER]
◆ Estructura de datos de un superbloque del VFS:

super_block

Datos independientes
del SF
super_operations
Operaciones sobre superbloque put_super
write_super
statfs
Datos dependientes ...
del SF

Sistemas Operativos II (II-UJI) Gestión del SF


98
SO
II
El VFS II

■ Implementación de un superbloque:
◆ 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 SF


99
SO
II
El VFS II

■ 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 SF


100
SO
II
El Ext2 II

■ El Second Extended FS (Ext2):


◆ SF estándar de Linux

■ Evolución del Ext2:


◆ SF de Minix • Ext • Ext2 • Ext3
FFS
■ El Fast File System (FFS):
◆ Surge en 1984 para UNIX BSD
◆ Duplicó el rendimiento del SF de Unix System V

■ Características del Ext2:


◆ Mejora la asignación de espacio en disco
◆ Mejora tiempo de acceso
◆ Incremento de fiabilidad

Sistemas Operativos II (II-UJI) Gestión del SF


101
SO
II
El Ext2 II

■ Estructura del Ext2:

Bloque de Grupo de Grupo de . . . Grupo de


arranque bloques 0 bloques 1 bloques n

Super Descriptores Mapa de bits Mapa de bits Tabla de Bloques


bloque de grupo de bloques de inodos inodos de datos

Replicados en todos los grupos de


bloques para facilitar la recuperación
del SF

Sistemas Operativos II (II-UJI) Gestión del SF


102
SO
II
El Ext2 II

■ Grupo de bloques:
◆ Número fijo de bloques que contiene:
● Copia del superbloque del Ext2
● Copia de la tabla de descriptores de grupos del Ext2
 Descriptor de grupo: Información sobre un grupo de bloques

● Mapa de bits de los bloques de datos del grupo de bloques


● Mapa de bits de los inodos del grupo de bloques
● Tabla de inodos del grupo de bloques
● Bloques de datos

Sistemas Operativos II (II-UJI) Gestión del SF


103
SO
II
El Ext2 II

■ Objetivos de los grupo de bloques:


◆ Reducir la “dispersión” de los ficheros
● Mantener los bloques de datos cerca de los inodos correspondientes
● Mantener los inodos de ficheros cerca de los correspondientes inodos
de directorios
◆ Replicar información del SF

Y, consecuentemente:

◆ Reducir el tiempo de posicionamiento y, por lo tanto, el tiempo de acceso a


los datos
◆ Incrementar la fiabilidad

Sistemas Operativos II (II-UJI) Gestión del SF


104
SO
II
El Ext2 II

■ Algoritmos de asignación de bloques:


◆ Combinación de las siguientes estrategias:

● 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

● 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 SF


105
SO
II
El Ext2 II

■ Fragmentos:
◆ Un bloque de disco se divide en varios fragmentos
◆ Cada fragmento se asigna de manera independiente
◆ Fichero = Serie de bloques + Serie de fragmentos
En lugar del último bloque
◆ Permite un mejor aprovechamiento del espacio en disco
● Reduce fragmentación interna de ficheros

◆ Complica la gestión del SF:


● Necesaria tabla para control de fragmentos
● ¿Cómo gestionar el crecimiento de un fichero?

Sistemas Operativos II (II-UJI) Gestión del SF


106
SO
II
El Ext2 II

■ Fragmentos (cont.):
◆ ¿Cómo gestionar el crecimiento de un fichero?
● Si el fichero no tiene bloque fragmentado:
 Asignar nuevos fragmentos de un bloque

● 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 SF


107
SO
II
El Ext2 II

■ 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 SF


108
SO
II
El Ext2 II

■ 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 SF


109
SO
II
El Ext2 II

■ 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 SF


110
SO
II
El Ext2 II

■ 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 SF


111
SO
II
El Ext2 II

■ Tabla de descriptores de grupo:


◆ Un descriptor de grupo guarda información sobre un grupo de bloques:

◆ 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 SF


112
SO
II
El Ext2 II

■ Mapas de bits:
◆ Mapa de bits de bloques:
● Indica si están asignados o no cada uno de los bloques

◆ Mapa de bits de inodos:


● Indica si están asignados o no cada uno de los inodos

◆ 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 SF


113
SO
II
El Ext2 II

■ Directorios:
◆ Un directorio es un fichero con una lista de entradas con la siguiente
estructura:
rec_len mod 4 = 0
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 */
}; O directorio
◆ La eliminación de un subdirectorio se realiza poniendo a cero el número de
inodo y anexionando dicha entrada a la anterior
● No es necesario reorganizar la lista ante un borrado

● Para asignar espacio a una nueva entrada de directorio se comienza

buscando un hueco en la lista


● La última entrada tiene el tamaño de lo que resta hasta fin de bloque

Sistemas Operativos II (II-UJI) Gestión del SF


114
SO
II
El Ext2 II

■ Directorios (cont.):
◆ Ejemplo de un fichero tipo directorio:

0 12 24 40 62
24 12 2 . 36 12 3 .. 58 16 5 pepe 27 12 4 act ....

4 bytes 2 2 4 8 bytes

Sistemas Operativos II (II-UJI) Gestión del SF


115
SO
II
SF con bitácora II

■ SF con “ journaling” en Linux:


◆ También llamados transaccionales o con bitácora

◆ 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

◆ Si falla el sistema la consistencia del SF es repcuperada


● Se analiza el registro y sólo se repiten las operaciones registradas sin

completar
● No necesario ejecutar
“fsck”
● Reinicio del sistema más rápido y sencillo

◆ Ejemplos: Ext3, ResiserFS, XFS, JFS

Sistemas Operativos II (II-UJI) Gestión del SF


116
SO
II
SF con bitácora II

■ Ext3:
◆ Ext2 con un fichero adicional de registro de transacciones
◆ Estructura idéntica a Ext2

■ ReiserFS:
◆ Organiza los objetos del SF (inodos, directorios y bloques de datos) en
variantes de árboles balanceados
◆ Buen rendimiento para ficheros pequeños y medianos

Sistemas Operativos II (II-UJI) Gestión del SF


117
SO
II
El SF “ procfs” II

■ ¿Qué es el “ procfs” ?
◆ SF montado sobre /proc que sólo existe en MC
◆ Se crea cuando arranca el SO y construye dinámicamente bajo demanda
◆ SF con información legible al usuario de los trabajos de núcleo

Sistemas Operativos II (II-UJI) Gestión del SF


118
SO
II
El SF “ procfs” II

■ 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 SF


119
SO
II
El SF “ procfs” II

■ Ficheros de los directorios /proc/PID:


◆ Cada proceso en ejecución tiene asociado un directorio /proc/PID, donde
PID es el número de identificación del proceso
● 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 SF


120
SO
II
El SF “ procfs” II

■ Ficheros de los directorios /proc/sys:


◆ 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 SF


121
SO
II
El SF “ procfs” II

■ Ficheros de los directorios /proc/sys (cont.):

◆ El directorio /proc/sys/vm contiene información sobre la gestión de


memoria (parámetros del proceso "bd_flush", del proceso "swap", etc.)

◆ El directorio /proc/sys/net contiene información sobre la red del


sistema

Sistemas Operativos II (II-UJI) Gestión del SF


122
SO
II
Tema 5. Gestión del Sistema de Ficheros II

Índice
■ Introducción
■ Ficheros
■ El sistema de directorios
■ Protección del sistema de ficheros
■ Compartición de ficheros
■ Estructura del sistema de ficheros
■ Montaje de sistemas de ficheros
■ Mecanismos de incremento de prestaciones
■ Implementación de sistemas de ficheros
✓ Gestión de ficheros en Linux
☛ ✓ Gestión de ficheros en Windows NT/2000
■ Servicios POSIX para gestión de ficheros y directorios

Sistemas Operativos II (II-UJI) Gestión del SF


123
SO
II
Gestión de ficheros en Windows 2K II

■ SF soportados por SO tipo Windows:


◆ FAT 16: MS-DOS
◆ FAT 32: Windows 9x y Windows 2x
◆ NTFS Versión 4: Windows NT 4.0
◆ NTFS Versión 5: Windows 2x y Windows XP

Sistemas Operativos II (II-UJI) Gestión del SF


124
SO
II
SF basados en FAT16 II

■ Estructura de un volumen:

Sector de FAT Duplicado Directorio Bloques de datos:


arranque de raíz  directorio
FAT  fichero
Información de la estructura del  libre
volumen y rutina de arranque

Sistemas Operativos II (II-UJI) Gestión del SF


125
SO
II
SF basados en FAT16 II

■ Estructura de un volumen (cont.):


◆ Unidad física: Sectores de 512 bytes
◆ Unidad lógica: Cluster
● Uno o más sectores contiguos

● Su tamaño en número de sectores ha de ser potencia de 2

● Su tamaño en bytes depende del tamaño del volumen

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

Sistemas Operativos II (II-UJI) Gestión del SF


126
SO
II
SF basados en FAT16 II

■ Estructura de una entrada de directorio:


◆ Tamaño entrada de directorio: 32 bytes

Nombre Exten Reservado Tiempo Tamaño


sión
8 bytes 3 1 10 2 2 2 4

Atributos Fecha 1er cluster

Fichero oculto, Última modificación


del sistema,
directorio, etc.

Sistemas Operativos II (II-UJI) Gestión del SF


127
SO
II
SF basados en FAT32 II

■ Características:
◆ Estructura de directorio y volumen similar a SF FAT 16
◆ Soporta volúmenes más grandes (hasta 2048 Gbytes)
◆ Soporta ficheros de hasta 4 Gbytes

Sistemas Operativos II (II-UJI) Gestión del SF


128
SO
II
SF basados en FAT II

■ Estructuras para soportar nombres largos de ficheros:


◆ Inclusión de entradas de directorio adicionales para un fichero cuyo nombre
ocupe más de 8 caracteres
● Primera entrada → Alias
● Siguientes entradas → Slots

◆ Slot:
● Entrada de directorio con formato especial

● Puede almacenar hasta 13 caracteres del nombre del fichero

Sistemas Operativos II (II-UJI) Gestión del SF


129
SO
II
SF basados en FAT II

■ Estructuras para soportar nombres largos de ficheros (cont.):

Fe Pri. Alias
Nombre Ext. Atr Reservado Tpo Tam.
cha clus

Nombre Slot 1

Orden Slot 2
Nombre
secuencial
slot
...

Nombre Slot n

Sistemas Operativos II (II-UJI) Gestión del SF


130
SO
II
SF NTFS II

■ Estructura de un volumen:

Sector de MFT Ficheros del Bloques de datos


arranque sistema

Información de la estructura del


volumen y rutina de arranque

Sistemas Operativos II (II-UJI) Gestión del SF


131
SO
II
SF NTFS II

■ Estructura de un volumen (cont.):


◆ Unidad lógica: Cluster (bloque)
● Uno o más sectores contiguos

● Su tamaño en número de sectores ha de ser potencia de 2

● 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 SF


132
SO
II
SF NTFS II

■ Tabla maestra de ficheros (“ Master File Table” – MFT):


◆ Una entrada (de 1Kbytes) por fichero o directorio, denominada registro de
archivo

■ Ficheros del sistema:


◆ MFT2:
● Espejo de las tres primeras filas de la MFT

● Usado para garantizar acceso a la MFT si falla ese sector

◆ Fichero de registro:
● Lista de transacciones para garantizar la recuperabilidad de NTFS

◆ Mapa de bits de clusters:


● Especifica clusters en uso

◆ Tabla de definición de atributos:


● Define los tipos de atributos soportados

Sistemas Operativos II (II-UJI) Gestión del SF


133
SO
II
SF NTFS II

■ Ficheros:
◆ NTFS ve un fichero como un conjunto de atributos definidos por pares del
tipo:
(nombre_atributo,valor_atributo)

◆ Los datos que contiene un fichero también se tratan como atributos

Sistemas Operativos II (II-UJI) Gestión del SF


134
SO
II
SF NTFS II

■ Ficheros (cont.):

◆ Tipos de atributos de un fichero:


● Información estándar (tiempos, contador de enlaces, ...)

● Lista de atributos (posición de los registros de atributo cuando no caben

en el registro de archivo)
● Nombre del fichero

● Descriptor de seguridad (propietario y permisos de acceso)

● Datos
● Índice raíz (referencias a los ficheros y subdirectorios de un directorio)
● etc.

Sistemas Operativos II (II-UJI) Gestión del SF


135
SO
II
SF NTFS II

■ Ficheros (cont.):

◆ Fichero (pequeño) de usuario:


Información Descriptor
Nombre Datos
estándar seguridad

Datos usuario Vacío

◆ Fichero (pequeño) tipo directorio:

Información Descriptor
Nombre Datos
estándar seguridad
Índice raíz
Vacío
fichero1, fichero2, ...

Sistemas Operativos II (II-UJI) Gestión del SF


136
SO
II
SF NTFS II

■ Ficheros (cont.):
◆ Atributos residentes y no residentes:
● Atributo residente:
 El atributo cabe en el registro de archivo
● 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 SF


137
SO
II
SF NTFS II

■ Ficheros (cont.):

◆ Ficheros pequeños: Sólo atributos residentes


 Los datos caben en el registro de archivo

◆ Ficheros de usuario grandes:


Información Descriptor
Nombre Datos
estándar seguridad
VCN LCN Número ...
Inicio inicio bloques
00 1355
1355 44
44 1570
1570 44
VCN: Número bloque virtual
VCN 0 1 2 3 4 5 6 7 LCN: Número bloque lógico

Datos Datos

LCN 1355 1356 1357 1358 1570 1571 1572 1573

Sistemas Operativos II (II-UJI) Gestión del SF


138
SO
II
SF NTFS II

■ Ficheros (cont.):

◆ Ficheros tipo directorio grandes:


 Las extensiones implementan un árbol balanceado
Información Descriptor
Nombre Datos
estándar seguridad
Índice raíz
...
Conversiones
VCN a LCN

VCN 0 1 2 3 8 9 10 11

fich0 fich1 fich2 fich3 fich8 fich9 ...

4 5 6 7

fich4 fich5 fich6 fich7

Sistemas Operativos II (II-UJI) Gestión del SF


139
SO
II
Tema 5. Gestión del Sistema de Ficheros II

Índice
■ Introducción
■ Ficheros
■ El sistema de directorios
■ Protección del sistema de ficheros
■ Compartición de ficheros
■ Estructura del sistema de ficheros
■ Montaje de sistemas de ficheros
■ Mecanismos de incremento de prestaciones
■ Implementación de sistemas de ficheros
☛ ■ Servicios POSIX para gestión de ficheros y directorios

Sistemas Operativos II (II-UJI) Gestión del SF


140
SO
II
Función link II

■ Sintaxis:
int link(const char *existing, const char *new);
devuelve:
◆ Si todo ha ido bien: 0
◆ Si error: -1

■ Descripción:
◆ Crea un enlace físico desde una nueva entrada de directorio, new, a un
fichero existente existing
● Crea una nueva entrada de directorio

● Incrementa el contador de enlaces del inodo del fichero existente

◆ Ambos nombres de fichero deben pertenecer al mismo SF

◆ existing no debe ser el nombre de un directorio


■ Ejemplo:
◆ link (“f1”, “f1.h”);

Sistemas Operativos II (II-UJI) Gestión del SF


141
SO
II
Función symlink II

■ Sintaxis:
int symlink(const char *existing, const char *new);
devuelve:
◆ Si todo ha ido bien: 0
◆ Si error: -1

■ Descripción:
◆ Crea un enlace simbólico desde una nueva entrada de directorio, new, a un
fichero existente existing
◆ Ambos nombres de fichero deben pertenecer a SF diferentes

◆ existing puede ser el nombre de un directorio

■ Ejemplo:
◆ symlink (“f1”, “f1.s”);

Sistemas Operativos II (II-UJI) Gestión del SF


142
SO
II
Función unlink II

■ Sintaxis:
int unlink(const char *name);
devuelve:
◆ Si todo ha ido bien: 0
◆ Si error: -1

■ Descripción:
◆ Elimina la entrada de directorio asociada al fichero name y decrementa el
número de enlaces del fichero correspondiente
◆ 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 accesible
Permite borrar ficheros y directorios
■ Ejemplo:
◆ unlink (“f1”);

Sistemas Operativos II (II-UJI) Gestión del SF


143
SO
II
Función getcwd II

■ Sintaxis:
char *getcwd (char *buf, size_t size);
devuelve:
◆ Si todo ha ido bien: buf
◆ Si error: NULL

■ Descripción:
◆ Almacena el nombre absoluto del directorio de trabajo a partir de buf (en

size bytes como máximo)


■ Ejemplo:
◆ getcwd (buf,LONG_MAX_BUF);

Sistemas Operativos II (II-UJI) Gestión del SF


144
SO
II
Ejemplos II

■ 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 SF


145
SO
II
Ejemplos II

■ 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 SF


146
SO
II
Ejemplos II

■ 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 SF


147
SO
II
Ejercicios II

■ Ejercicio 1:
Indicar cuál de los siguientes apartados NO realizan la misma operación que
los tres restantes:

(a) aclget fich1 > fich3


aclput –i fich3 fich2
(b) aclget fich1 | aclput fich2
aclput –i fich3 fich2
(c) aclget -o fich3 fich1
aclput –i fich3 fich2
(d) aclput fich2 | aclget fich1

Sistemas Operativos II (II-UJI) Gestión del SF


148
SO
II
Ejercicios II

■ Ejercicio 2:
Indicar cuál de las siguientes afirmaciones es cierta tras ejecutar los
siguientes comandos:
$ ls –al ./midir
total 24
drwx------ 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/fichero
atrributes
base permissions:
owner (jaume): rw-
group (inf): ---
others: ---
extended permissions:
enabled
permit rw- g:itig
permit rwx u:pepe

Sistemas Operativos II (II-UJI) Gestión del SF


149
SO
II
Ejercicios II

■ 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 SF


150
SO
II
Ejercicios II

■ 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 SF


151
SO
II
Ejercicios II

■ 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 SF


152
SO
II
Ejercicios II

■ 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 Grupo de Grupo de . . . Grupo de


arranque bloques 0 bloques 1 bloques n

Super Descriptores Mapa de bits Mapa de bits Tabla de Bloques


bloque de grupo de bloques de inodos inodos de datos
1 + 1 + 1 + 1 + 128 + 8060 = 8192 bloques

Sistemas Operativos II (II-UJI) Gestión del SF


153
SO
II
Ejercicios II

■ 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.

... ... ... ... ...


dir 1 5 1 1 3
ino 7 9 1 3 8
name d4 d3 / d1 d5
... ... ... ... ...

dir_cache_entry

Sistemas Operativos II (II-UJI) Gestión del SF


154
SO
II
Ejercicios II

■ 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 SF


155
SO
II
Ejercicios II

■ 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 SF


156
SO
II
Ejercicios II

■ 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 SF


157
SO
II
Ejercicios II

■ 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 SF


158
SO
II
Ejercicios II

■ 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 SF


159
SO
II
Ejercicios II

■ 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 SF


160
SO
II
Ejercicios II

■ 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 TAMANYO_BLOQUE/(Tamaño T_Inodo)
#define REFERENCIAS_POR_BLOQUE 256 TAMANYO_BLOQUE/(Tamaño referencia)
#define REG_DIRECT_POR_BLOQUE 32 TAMANYO_BLOQUE/(Tamaño T_Reg_Direct)

#define IND_DIRECTOS 4
#define IND_ISIMPLE 2
#define IND_IDOBLE 2
#define NRELLENO 23

#define FREGULAR 0x01


#define FDIRECTORIO 0x02
#define LIBRE 0x03

Sistemas Operativos II (II-UJI) Gestión del SF


161
SO
II
Ejercicios II

■ 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 SF


162
SO
II
Ejercicios II

■ 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 SF


163
SO
II
Ejercicios II

■ 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 SF


164
SO
II
Ejercicios II

■ Ejercicio 9 (solución):

Bloque n°BLQ_INI_INODOS

0 1 ...
0
1 X
2
... ... ... ...
INODOS_POR_BLOQUE - 2
INODOS_POR_BLOQUE - 1

TABLA INODOS

N°bloque = (X DIV INODOS_POR_BLOQUE) + BLQ_INI_INODOS


N°entrada en bloque = X MOD INODOS_POR_BLOQUE

Sistemas Operativos II (II-UJI) Gestión del SF


165
SO
II
Ejercicios II

■ 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 SF


166
SO
II
Ejercicios II

■ 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;
INICIO
id_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 SF


167
SO
II
Ejercicios II

■ 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 SF


168
SO
II
Ejercicios II
Bloque W
■ Ejercicio 10 (solución): de DIR

.
Inodo Z ..
de DIR 4 dev
Tipo y modo 15 etc
Tamaño ...
... 35 usr
Bloque Y
Índices directos W de DIR
Bloque X de
Índices ind. simples referencias 46 d2
X
Índices ind. dobles 32 d1
... 24 f2
...
Y
...

Sistemas Operativos II (II-UJI) Gestión del SF


169
SO
II
Ejercicios II

■ 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 SF


170
SO
II
Ejercicios II

■ 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 SF


171
SO
II
Ejercicios II

■ 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 SF


172
SO
II
Ejercicios II

■ Ejercicio 10 (solución):

Búsqueda mediante los índices directos:

INODO nº 115 Bloque 800


Otros campos 200
al11111
800 801 210
indice1 indice2
830 831 al20110
832 NIL free
NIL NIL al11114
...
209
al32011

Sistemas Operativos II (II-UJI) Gestión del SF


173
SO
II
Ejercicios II

■ Ejercicio 10 (solución):

Búsqueda mediante los índices indirectos simples:

INODO nº 115 Bloque 832 Bloque 891


Otros campos 840 200
891 al11111
800 801 1001 210
830 831 indice2 al20110 indice3
... free
832 NIL indice1
NIL NIL 12067 al11114
842 ...
209
al32011

Sistemas Operativos II (II-UJI) Gestión del SF


174
SO
II
Ejercicios II

■ 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 un
directorio 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 SF


175
SO
II
Ejercicios II

■ 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 SF


176
SO
II
Ejercicios II

■ 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 SF


177
SO
II
Ejercicios II

/* Búsqueda mediante los índices directos */


indice1 := 0; /* indice1 ≡ N° índice directo */
MIENTRAS ( (NOT encontrado) AND (bloque_actual < total_bloques) AND
(indice1 < IND_DIRECTO) ) HACER
L_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) ) HACER
SI ((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
FINMIENTRAS
SI (NOT encontrado) ENTONCES
indice1++; bloque_actual = bloque_actual + 1;
FINSI
FINMIENTRAS

Sistemas Operativos II (II-UJI) Gestión del SF


178
SO
II
Ejercicios II

/* 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) ) HACER
L_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) ) HACER
L_B_Directorio (blq_refs[indice2] , blq_dir)
indice3 = 0; /* indice3 ≡ N° registro tipo directorio por bloque */

Sistemas Operativos II (II-UJI) Gestión del SF


179
SO
II
Ejercicios II

MIENTRAS ( (NOT encontrado) AND


(indice3 < REG_DIRECT_POR_BLOQUE) ) HACER
SI ((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
FINMIENTRAS
SI (NOT encontrado)
ENTONCES
indice2++;
bloque_actual = bloque_actual + 1;
FINSI
FINMIENTRAS
SI (NOT encontrado) ENTONCES indice1++; FINSI
FINMIENTRAS

Sistemas Operativos II (II-UJI) Gestión del SF


180
SO
II
Ejercicios II

/* Búsqueda mediante los índices indirectos dobles */


...
busca_numero_inodo = numinodo;
FINFUNCTION busca_numero_inodo.

Sistemas Operativos II (II-UJI) Gestión del SF


181
SO
II
Ejercicios II

■ 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 SF


182
SO
II
Ejercicios II

■ 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=3
cadenas[0] → parte1
cadenas[1] → parte2
cadenas[2] → parte3

Sistemas Operativos II (II-UJI) Gestión del SF


183
SO
II
Ejercicios II

■ Ejercicio 11 (solución):

int Obtiene_inodo (T_Nombre nombre_fich , T_inodo *inodo_result);


INICIO
error = 0;
SI ( nombre_absoluto (nombre_fich) )
ENTONCES direct = dir_raiz;
SINO direct = dir_actual;
FINSI
parte_nombre (nombre_fich , partes , nombres);
busqueda = 0;
seguir = TRUE;

Sistemas Operativos II (II-UJI) Gestión del SF


184
SO
II
Ejercicios II

■ Ejercicio 11 (solución):

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
FINMIENTRAS
SI (NOT seguir) ENTONCES inodo_result = inodo; FINSI
Obtiene_inodo = error;
FINFUNCTION Obtiene_inodo

Sistemas Operativos II (II-UJI) Gestión del SF


185
SO
II
Ejercicios II

■ 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 SF


186
SO
II
Ejercicios II

■ 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.

Sistemas Operativos II (II-UJI) Gestión del SF


187

Das könnte Ihnen auch gefallen