Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistemas Archivos
Sistemas Archivos
Archivos
Cecilia Hernández
2007-1
Sistemas de Archivos
Concepto simple
Implementa abstracción para accesar
almacenamiento secundario
• Abstracción : archivos
Proporciona organización lógica para
accesar archivos en directorios
• Normalmente directorio implementado como
árboles
Proporciona a usuarios mecanismos de
protección y compartición de archivos
• Debe proporcionar semántica de consistencia para
permitir acceso compartido
Archivos
create(name)
open(name, mode)
read(fd, buf, len)
write(fd, buf, len)
sync(fd)
seek(fd,pos)
close(fd)
unlink(name)
rename(old, new)
Directorios
Estructuras en Memoria
Tabla de Particiones
• Tabla con información acerca de cada partición
Estructura de directorios
• Tabla de directorios accesados recientemente con su
información
Tabla de Archivos Abiertos a nivel de Sistema (TAAS)
• Contiene copia de los FCBs de cada archivo, y otra informacion
como número de Procesos que tiene archivo abierto
Tabla de Archivos Abiertos a nivel de Proceso (TAAP)
• Contiene puntero a entrada a tabla de archivos abiertos de
sistema
Particiones de disco
Caso Unix/linux
MBR T particiones Partición Partición Partición
Cada partición
boot block, puede subir sistema cargando programa residente
aqui
Superblock. Especifica los límites de las áreas siguientes,
contiene punteros a listas de inodos libres y bloques de archivos
libres
Area de inodos. Contiene descriptores (inodos) para cada archivo
en el disco. Todos los inodes son del mismo tamaño
Dir root. Inodo y directorio root
Archivos y directorios. Bloques de se usan para
Una partición puede usarse para un sistema de archivos o como
area de swapping ( en este caso es sólo bloques para respaldo)
Proceso de buteo
Caso Unix/linux
CPU ejecuta código residente en ROM BIOS (Read
Only Memory Basic Input Output System)
Código verifica y prepara HW de sistema
Carga programa (master boot program o boot
loader) ubicado en sector 0 (Master Boot Record) de
disco
• En linux puede ser lilo o grub, los que permiten elegir
una partición a subir
• Contiene programa ejecuta SO en partición
• Estos boot loaders están en MBR o en primer sector
de parcición activa
Con programas Lilo o Grub es posible definir varias
particiones con diferentes SOs
• Aunque tambien sirven para usar el mismo sistema
de archivos pero identificar diferentes SO (asociados
a diferentes linux kernels)
Sistema de Archivos Unix (UFS)
Sistema de Archivos original en Unix (1970)
Disco dividido en particiones
Una partición: grupo de cilindros adyacentes
Un sistema de archivos puede residir en una partición
BIOS define sector de buteo (boot sector) para estar en cabeza
0, cilindro 0, sector 1
Master Boot Record (MBR) usado para butear computador
Sabe de boot loader y tabla de particiones
Tabla de partición
Define direcciones de inicio y fin de cada partición
Una partición es marcada como activa
Cuando sistema sube
BIOS ejecuta MBR
MBR localiza partición activa y ejecuta bloque de buteo
Para que usar particiones?
Crear
SO busca en bloque de control de partición por un puntero de un
FCB no usado
SO suma puntero de FCB en la estructura del directorio.
Abrir
Buscar si archivo esta abierto en TAAS, si no esta Buscar en
directorios por nombre de archivo
Copiar información de FCB a la TAAS
Sumar una entrada para el archivo en la TAAP, que contiene puntero
a TAAS
SA retorna descriptor de archivo o handle a proceso que lo abre
Usar
Escribir, buscar el bloque de control de partición por punteros a
bloques de disco vacíos
Leer. buscar en FCB bloques a leer
Usando Disco para Almacenar
Archivos
Entrada directorio
test.txt ........... 88
20 35
25 103
35 25
88 20
95 0
103 EOF
Ejemplo Inodos Unix (también en
FFS)
memory-resident
i-node table
Algunos SAs populares
NTFS (Windows)
Minix (No se usa tanto, pero disponible)
UFS
Ext2fs: Ext2 (linux) estandar, basado en inodos, incluye
ideas de FFS
Ext3fs: Ext3 (linux). Journaling. Basado en ext2fs
VeritasFS (VxFS) HP-UN. Journaling
ReinserFS (linux) Journaling con logging. Completamente
nuevo. Incluido en linux estandar
JFS (de IBM). Journaling. Basado en otro
FFS
XFS (de SGI). Journaling. Basado en otro
http://www.tldp.org/HOWTO/Filesystems-HOWTO.html
Larga lista de sistemas de archivos
UFS (Sistema de Archivos Unix
original)
Layout en disco de UFS
Metadata al principio en disco
Bloques de disco son asignados aleatoriamente a
archivos sistema usado por largo tiempo
Cuando sistema nuevo, bloques asignados
secuencialmente a archivos
Inodos lejos de bloques
Ubicación de inodos y bloques de
disco por archivo en UFS
Inodo contiene metadata de archivo incluyendo direcciones
a bloques de disco
Tiempo de búsqueda malo, cabeza debe moverse entre
cilindros distantes
FFS (Fast File System)
Datos
En buffer cache
En disco
Idea básica de solución
Siempre dejar copia de datos en estado
consistente
Actualizar datos persistentemente escribiendo
secuencialmente (tiempo) en archivo journal
En tiempo libre de sistema, hacer
actualizaciones escritas en journal
cronológicamente y liberar espacio de archivo
journal
Redo log
Log
Archivo que se escribe sólo al final conteniendo
registros de logs
• Start t
• Transacción t ha empezado
• T, x, v
• Transacción T ha actualizado bloque x y su nuevo valor
en v
• Puede loggear diferencia de bloques en lugar de
bloques
• Commit t
• Transacción T ha committed – actualización sobrevive
caida
Acción de Commit incluye escribir registro redo
Si ocurre caida de sistema
Recupera Log
Redo transacciones committed
Barre el log en orden y reejecuta
actualizaciones de las transacciones
committed
Escrituras son idempotent (sólo ocurre una
vez independiente del número de veces
que se ejecute)
Transacciones no committed
Ignorarlas
• Como si caida ocurriera antes de commit
Desempeño
archivo1 archivo2
inode
directorio
dir1 dir2
datos
2 archivos de 1 bloque:
Log dir1/archivo1
dir2/archivo2
archivo1 archivo2
LFS
Desafíos y soluciones
Problemas
Su implementación no es tan simple
Ubicando datos en log no es tan rápida
Manejando espacio libre no es tan sencillo, no
siempre se puede agregar info, cuando se
elimina información deben recuperarse bloques
escritos previamente en log
• Manejo de fragmentación de segmentos y limpieza
es complicado
• Uso de demonio de limpieza encargado de verificar
fragmentación, compactación y recuperación
Comparación entre FFS, JFS y LFS
LFS y FFS
Carga de trabajo por metadatos es cara
• Incluye escritura pequeñas (inodos ocupados y entradas
en directorios)
Problema de limpieza de segmentos en LFS es un
problema
LFS y JFS
JFS es robusto como LFS, pero metadata debe ser
escrita en disco más frecuentemente
No confundir JFS con LFS
• JFS tiene log de transacciones a disco para manejar
caidas y recuperación más rápido manejando
consistencia en disco asincrónicamente
• LFS el disco es visto como log