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

187
Sistemas Operativos II (II-UJI) Gestión del SF 1 S S O O II II II II Tema 5. Gestión del Sistema de Ficheros Í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

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

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.