650 likes | 1.1k Views
Sistemas de 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
E N D
Sistemas de 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 • Archivo es una colección de datos con algunas propiedades • Contenido, tamaño, dueño, última fecha de modificación, protección, etc • Archivos pueden tener tipos entendibles • Sistema de archivos: archivo simple, directorio, enlace • Otras partes del SO, aplicaciones o bibliotecas • Ejecutable, biblioteca, código fuente, etc • Típicamente, tipos pueden incluidos en nombre • En Windows, tipo incluido en nombre • En unix, tipo especificado en los dos primeros bytes del archivo (magic numbers) o caracteres iniciales
Operaciones sobre 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 • Organizar archivos en sistema • Útil para usuarios • Útil para sistema de archivos y usuarios para buscar y accesar archivos • Mayoría de sistemas de archivos soportan múltiples niveles de directorios • Con jerarquía de nombres • Mayoria soport directorio actual y anterior • Rutas absolutas y relativas • $cd /home/alumnos/pedro (absoluto) • $cd tareas (relativo a dir actual)
Implementación directorios • Normalmente un directorio es sólo un archivo con metadata • con lista de archivos y atributos contenidos en actual directorio • Lista (nombre archivo, atributos archivo) • Atributos pueden ser • Tamaño, protección, dueño, tiempo de creación, tiempo de última modificación, ubicación en disco, etc
Implementación de Sistemas de Archivos • Componentes de SA • Administración de disco • Como organizar colección de bloques de discos en archivos • Nombres • Usuarios identifican sus archivos mediante nombres, abstrayéndose de como se almacenan internamente (#cilindro, pista y sectores). Uso de nombres para archivos y directorios • Protección • Como se protege la información de archivos en el sistema entre distintos usuarios y sistema • Confiabilidad/durabilidad/Rendimiento • Cuando sistema se cae, se pierde información en Memoria (caches), pero se desea que información de archivos no se pierda
Implementación de Sistemas de Archivo • Estructuras en Disco y Memoria para implementar SA • En disco • Bloque Control de Buteo (Boot Control Block) • Información para butear SO de partición (si existe en partición). Unix : Boot block, NTFS : Partition Block Sector • Bloque de Control de Partición (Partition Control Block) • Detalles de partición: Tamaño bloque, contador y punteros de bloques libres, contador y punteros de FCBs. Unix Superblock, NTFS : Tabla de Archivo Maestra (Master File Table). En Unix/linux llamado superblock • Estructura de Directorios a usar • FCB (File Control Block) • Contiene información de archivo: dueño, tamaño, permisos, punteros a bloques de disco, etc • Unix Inodo, NTFS, info guardada en Tabla de Archivo Maestra
Implementación de Sistemas de Archivos cont. • 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
MBR T particiones Partición Partición Partición Boot Superblock Espacio libre Inodes Dir. Root Archivos y block directorios Particiones de disco Caso Unix/linux • 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 buteoCaso 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? • Dividir el disco para diversos propósitos • Tener diversos SOs cargados uno en cada partición • SOs y sistemas de archivos pueden ser usados en forma independiente • Respaldos o cualquier uso que quiera darle el usuario
Crear, Abrir y Usar un Archivo • 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 • SA almacena archivos en bloques • Define tamaño de bloque, en general entre 1KB y 4KB • Existe un “Bloque Maestro” que define la ubicación del directorio root • Siempre una ubicación bien conocida • En general replicada para proporcionar mayor disponibilidad • Posee una lista con bloques libres y bloques ocupados • En general, bitmap, define un bit por bloque de disco • 1 si esta ocupado, 0 si esta libre • Almacenada en disco y en memoria (para aumentar rendimiento) • SO usa Caching • SO mantiene cache con bloques de disco usados mas recientemente (disminuir latencia de acceso a disco)
Registro de Bloques Asignado a Archivos • Estructura de datos común • Encabezado de archivo: cada archivo posee uno • Que bloques de disco estan siendo ocupados por archivo • Distintas implementaciones: Como se sabe que bloques pertenecen a que archivos • Asignación contigua • Archivos enlazados • Archivos indexados • Archivos indexados en múltiples niveles
Asignación Contigua • Usuario dice por adelantado tamaño de archivo • SO busca en bitmap (usando criterio) bloques de disco que satisfacen requerimiento de usuario • El encabezado de archivo posee • Primer sector de bloque en disco • Tamaño de archivo en términos de número de sectores • Ventajas/Desventajas • + Acceso secuencial rápido • + Acceso aleatorio fácil • - Fragmentación externa • - Difícil cuando archivo crece más de lo definido originalmente
Archivos Enlazados • Cada bloque de disco incluye puntero al siguiente bloque de disco • Encabezado de archivo posee dirección del primer bloque de disco • Ventajas/Desventajas • + Archivos pueden crecer dinámicamente • - Acceso secuencial no es tan bueno, pero mejor que aleatorio • Requiere tiempo de búsqueda de próximo bloque • - Acceso aleatorio muy lento • - No es confiable, que pasa si se pierde o se estropea un bloque? • MS-DOS FAT (File Allocation Table) usa esta filosofía, pero implementación mediante una tabla • Mejor rendimiento, sobretodo si tabla esta en memria
Archivos Indexados • Usuario especifica tamaño máximo de archivo • SA define un arreglo de punteros a bloques acorde al tamaño máximo • Encabezado de archivo posee arreglo de punteros de bloques (index block: contiene punteros a los bloques de disco del archivo) • Ventajas/Desventajas • + Tamaño de archivo puede crecer fácilmente hasta máximo • + Acceso aleatorio es rápido • - Costoso si archivo crece sobre máximo • - Acceso secuencial lento, ya que bloques pueden estar distantes unos de otros en disco
Archivos Indexados con Múltiples Niveles • Objetivo • Rápido para archivos pequenos y permitir archivos grandes • Encabezado de archivo posee 13 punteros • Tabla de punteros de tamaño fijo, aunque no son todos equivalentes • Primeros 10 (ahora 12) punteros direcccionan bloques de datos • Puntero décimo primero (11) (ahora 13): Puntero indirecto • Apunta a bloque de punteros de bloques de datos • Puntero décimo segundo (12) (ahora 14): Puntero doblemente indirecto • Apunta a bloque de punteros, los que a su vez contienen punteros a bloques de datos • Puntero décimo tercero (13) (ahora 15): Puntero triplemente indirecto • Apunta a bloque de punteros, los que a su vez contienen punteros a bloques de punteros, los que contienen punteros a bloques de datos
Archivos Indexados con Múltiples Niveles • Unix implementa este mecanismo • Ventajas/Desventajas • + Simple • + Archivos pueden crecer fácilmente (tamaño max relativamente grande) • + Archivos pequeños rápidos • - Archivos grandes penalizados en tiempo de búsqueda, por el uso de indirección de múltiples niveles • - Mucho tiempo usado en búsqueda de bloques (cuando archivos son grandes)
test.txt ........... 88 20 25 35 88 95 103 Ejemplo FAT • Entrada directorio 35 103 25 20 0 EOF
Ejemplo Inodos Unix (también en FFS) • Inodo estructura de datos que contiene dueño archivo, modo, tamaño, protección, contadores de enlaces y tabla de asignación de bloques de disco
Ejemplo Inodos • En el SA Unix, con archivos indexados con multiples niveles, con encabezado de archivo de 13 entradas, 10 entradas para direccionar bloques directamente, 1 entrada indirecta, 1 entrada doblemente indirecta y 1 triplemente indirecta. Si el tamaño de bloque es de 1KB. Calcule: • Máximo tamaño de archivo posible • Número de accesos a disco son necesarios para alcanzar bloque 23, cuales son?
Ejemplo Traducción Rutas con Inodos • Archivos directorios: archivos en que cada entrada contiene archivo o directorio y además Inodo donde esta ubicado • Archivo /home/juan/tarea.txt. • Archivo directorio “/” contiene lista archivos/directorio con sus Inodos • Directorio “home” tiene Inodo 100 • Inodo 100 contiene puntero a bloques donde esta “home”: bloque 200 • Bloque 200 : archivo directorio “home” posee inodo para “juan”: inodo 110 • Inodo 110 contiene puntero a bloques donde esta “juan”: bloque 300 • Bloque 300 : archivo diretorio “juan” posee inodo para “tarea.txt”: inodo 120 • Inodo 120 contiene punteros a bloques donde esta “tarea.txt”: bloques 400, 401 y 402
Ubicación de inodos • Unix original tenía dos problemas de desempeño importantes • Bloques de datos en cualquier parte del disco • Cuando archivo es nuevo se buscan bloques de archivos • Cuando SA envejece y se llena necesita ubicar nuevos archivos mientras otros han sido borrados • Archivos de diferentes tamaños • Bloques para archivos nuevos empiezan a estar dispersos en el disco • Inodos están ubicados lejos de los bloques de disco • Todos los inodos al inicio del disco y luego los bloques de disco • Búsqueda de archivos en directorios requiere referencias a inodos y bloques de disco, como estan lejos unos de otros más tiempo es requerido para su acceso
Mejorando desempeño • Uso de Buffer cache • Explotar localidad usando memoria como cache para archivos • Cache es compartida por todos los procesos • Muchos sistemas de archivos leen por adelantado (antes que se necesite) a buffer cache • Caching escrituras • Necesario manejar consistencia en algunos casos se requiere write-through • Algunos problemas con el buffer cache • Competencia de páginas con la administración de memoria • También requiere algoritmos de reemplazo • Usualmente LRU
Protección de archivos • Protección usada para… • Controlar quien tiene acceso a qué archivo • Controlar el tipo de acceso que un usuario puede realizar sobre archivo • En forma general • Generalizar archivos a objetos • Generalizar usuarios a principales • Generalizar lectura/escritura a acciones • Un sistema de protección dice si una determinada acción realizada por un determinado principal en un deteminado objeto debería ser permitida • Usuario dueño puede leer/escribir sobre archivo, pero no otros • Usuario puede leer algún archivo de sistema, pero no escribirlo
Modela para representar protección • Dos maneras de verlo • Listas de control de acceso (ACLs) • Para cada objeto, guardar una lista de los principales y las acciones permitidas para principales • Capacidades • Para cada principal, guardar una lista de los objetos y acciones permitidas para principales • Representación en siguiente matriz objetos principales capacidad ACL
ACLs y Capacidades • Capacidades son más fácil de transferir • Como llaves (caso casa) • Facilitan compartición • ACLs son más fáciles de manejar • Basado en objetos, fácil de entregar y quitar • Quitar capacidades es más difícil, hay que mantener historia de principales que han tenido capacidad • Difícil de seguir, pues principales se pueden pasar capacidades • ACLs se hacen grandes cuando objetos son muy compartidos • Esquema puede simplificarse agrupando • Poner usuarios en grupos, poner grupos en ACLs • Cambiando acciones sobre grupos afecta al grupo completo
Consistencia del SA • Los i-nodos y los bloques de discos residen en buffer cache (memoria usada para cache de archivos) • El comando sync fuerza la escritura en disco de la información de disco residente en memoria • Sistema hace un sync cada unos pocos segundos • Una caída del sistema o corte de energía entre syncs puede dejar el disco inconsistente • Se podría mejorar consistencia usando menos caching pero esto perjudicaría el desempeño
Manejando consistencia de archivos(i-cache) • Verificar que cada bloque este asociado sólo a un archivo • Un vector de bits, un bit por cada bloque en disco • Seguir la lista de bloques libres e inodos libres • Cuando un bloque es encontrado, ver el bit • Si bit == 0, ponerlo en 1 • Si bit == 1, • Si bloque esta asociado a archivo y en lista de bloques libres • Eliminarlo de la lista de libres ( no garantia de lo que suceda) • Si bloque está asociado a dos archivos… error
Consistencia de directorios (d-cache) • Verificar que directorios formen un árbol • Verificar que el contador de links de un archivo sea igual al número de directorios que apuntan a archivo
Compartiendo archivos 1Enlaces duros • Un archivo en Unix puede tener múltiples nombres • Nombre en entrada en el directorio es llamado enlace duro. Múltiples entrada en directorio apuntan a mismo inodo • Cada inodo tiene un campo “count” que indica el número de enlaces duros • Llamada a sistema relacionadas “link” y “unlink” • link(nombre existente, nuevo nombre) crea nueva entrada en directorio con nombre dado e incrementa el count de inodo • Unlink(nombre), destruye entrada en directorio, decrementa count, si count == 0 libera bloques de disco e inodo ocupado por archivo
Compartiendo archivosEnlace simbólico • Enlace simbólico entrada en directorio que contiene pathname a otro archivo en el SA • Llamada a sistema • Symlink(nombre existente, nuevo nombre) • Asigna nuevo inodo a nuevo archivo, nuevo archivo contienen path de archivo existente, • Si antiguo archivo es eliminado, accesar nuevo archivo no será posible
Compartición de archivos 2 • Cada usuario tiene una tabla de canal o tabla de archivos abiertos por usuario • Cada entrada en la tabla de archivos abiertos es un puntero a una entrada a la tabla de archivos abiertos del sistema • Cada entrada en la tabla de archivos abiertos contiene un file offset y un puntero a una entrada en la tabla de inodos residentes en memoria • Si un proceso abre un archivo ya abierto se crea una nueva entrada en la tabla de archivos abiertos con un nuevo file offset apuntando a la misma entrada en la tabla de inodos residentes en memoria • Si un proceso hace un fork, el hijo obtiene una copia de la channel table ( y luego el mismo file offset)
file offset file offset Usuario 1 Usuario 2 Usuario 3 channel table channel table channel table open file table 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) • Proyecto en Berkeley BSD FFS (1970) • Idea es mejorar productividad y disminuir tiempo de respuestas de Unix Original (UFS) • Idea se basa en conocimiento de layout en disco
Layout en disco en FFS • Grupos de cilindros • Tamaños de bloque de disco incrementado de 512 bytes a 4KB • Mejor soporte para archivos grandes • Puede producir fragmentación interna • Uso de fragmentos para solucionarla
FFS • FFS (File Fast System) usa idea de grupos de cilindros • Disco particionado en grupos de cilindros • Bloques de datos de un mismo archivo ubicado en el mismo grupo de cilindros • Inodo de archivo ubicado en el mismo grupo de cilindros • Introduce un requerimiento de espacio libre • Para poder hacer lo explicado arriba se necesita tener espacio libre disperso en todo el disco • En FFS se reserva el 10 % del disco para estar disponible
Sistemas de Archivos Journaling • UFS y FFS usan memoria como cache para disco (buffer cache) • UFS y FFS tienen problemas cuando sistema se cae • Ejemplo caída de sistema en la creación de archivo • 1 Asignación de inodo • Apuntar en entrada de directorio inodo de archivo • Problema de consistencia en estructuras de datos en memoria y disco • UFS y FFS proporcionan utilitarios para reconstruir consistencia (fsck), pero muy lento • Debe verificar cada bloque • No escalable (más lento a medida que aumenta disco)
Sistemas de Archivos Journaling • Se hicieron populares en 2002 • Varias opciones • VeritasFS, Ext3, ReinserFS, XFS, ntfs • Idea básica • Actualizar metadatos y datos transaccionalmente • Los dos o ninguno • En caso de falla, puede perderse un proco de trabajo, pero disco queda consistente • En forma precisa, consistencia mediante uso de log o journal transaccional, en lugar de barrer cada bloque de disco para verificar estado
Almacenamiento de datos • 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 • Log es una escritura continua • Escritura eficiente • En lugar de varias escrituras asincrónicas • Costosas en términos de desempeño • Journaling • Bueno, eficiente • Manejo de consistencia y recuperación eficiente