Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Sistema de Archivos

43,464 views

Published on

Sistemas de Archivos

Sistema de Archivos

  1. 1. Sistemas de Archivos Cecilia Hernández 2007-1
  2. 2. Sistemas de Archivos <ul><li>Concepto simple </li></ul><ul><ul><li>Implementa abstracción para accesar almacenamiento secundario </li></ul></ul><ul><ul><ul><li>Abstracción : archivos </li></ul></ul></ul><ul><ul><li>Proporciona organización lógica para accesar archivos en directorios </li></ul></ul><ul><ul><ul><li>Normalmente directorio implementado como árboles </li></ul></ul></ul><ul><ul><li>Proporciona a usuarios mecanismos de protección y compartición de archivos </li></ul></ul><ul><ul><ul><li>Debe proporcionar semántica de consistencia para permitir acceso compartido </li></ul></ul></ul>
  3. 3. Archivos <ul><li>Archivo es una colección de datos con algunas propiedades </li></ul><ul><ul><li>Contenido, tamaño, dueño, última fecha de modificación, protección, etc </li></ul></ul><ul><li>Archivos pueden tener tipos entendibles </li></ul><ul><ul><li>Sistema de archivos: archivo simple, directorio, enlace </li></ul></ul><ul><ul><li>Otras partes del SO, aplicaciones o bibliotecas </li></ul></ul><ul><ul><ul><li>Ejecutable, biblioteca, código fuente, etc </li></ul></ul></ul><ul><li>Típicamente, tipos pueden incluidos en nombre </li></ul><ul><ul><li>En Windows, tipo incluido en nombre </li></ul></ul><ul><ul><li>En unix, tipo especificado en los dos primeros bytes del archivo (magic numbers) o caracteres iniciales </li></ul></ul>
  4. 4. Operaciones sobre archivos <ul><li>create(name) </li></ul><ul><li>open(name, mode) </li></ul><ul><li>read(fd, buf, len) </li></ul><ul><li>write(fd, buf, len) </li></ul><ul><li>sync(fd) </li></ul><ul><li>seek(fd,pos) </li></ul><ul><li>close(fd) </li></ul><ul><li>unlink(name) </li></ul><ul><li>rename(old, new) </li></ul>
  5. 5. Directorios <ul><li>Organizar archivos en sistema </li></ul><ul><ul><li>Útil para usuarios </li></ul></ul><ul><ul><li>Útil para sistema de archivos y usuarios para buscar y accesar archivos </li></ul></ul><ul><li>Mayoría de sistemas de archivos soportan múltiples niveles de directorios </li></ul><ul><ul><li>Con jerarquía de nombres </li></ul></ul><ul><ul><li>Mayoria soport directorio actual y anterior </li></ul></ul><ul><ul><li>Rutas absolutas y relativas </li></ul></ul><ul><ul><ul><li>$cd /home/alumnos/pedro (absoluto) </li></ul></ul></ul><ul><ul><ul><li>$cd tareas (relativo a dir actual) </li></ul></ul></ul>
  6. 6. Implementación directorios <ul><li>Normalmente un directorio es sólo un archivo con metadata </li></ul><ul><ul><li>con lista de archivos y atributos contenidos en actual directorio </li></ul></ul><ul><ul><ul><li>Lista (nombre archivo, atributos archivo) </li></ul></ul></ul><ul><ul><ul><li>Atributos pueden ser </li></ul></ul></ul><ul><ul><ul><ul><li>Tamaño, protección, dueño, tiempo de creación, tiempo de última modificación, ubicación en disco, etc </li></ul></ul></ul></ul>
  7. 7. Implementación de Sistemas de Archivos <ul><li>Componentes de SA </li></ul><ul><ul><li>Administración de disco </li></ul></ul><ul><ul><ul><li>Como organizar colección de bloques de discos en archivos </li></ul></ul></ul><ul><ul><li>Nombres </li></ul></ul><ul><ul><ul><li>Usuarios identifican sus archivos mediante nombres, abstrayéndose de como se almacenan internamente (#cilindro, pista y sectores). Uso de nombres para archivos y directorios </li></ul></ul></ul><ul><ul><li>Protección </li></ul></ul><ul><ul><ul><li>Como se protege la información de archivos en el sistema entre distintos usuarios y sistema </li></ul></ul></ul><ul><ul><li>Confiabilidad/durabilidad/Rendimiento </li></ul></ul><ul><ul><ul><li>Cuando sistema se cae, se pierde información en Memoria (caches), pero se desea que información de archivos no se pierda </li></ul></ul></ul>
  8. 8. Implementación de Sistemas de Archivo <ul><li>Estructuras en Disco y Memoria para implementar SA </li></ul><ul><ul><li>En disco </li></ul></ul><ul><ul><ul><li>Bloque Control de Buteo (Boot Control Block) </li></ul></ul></ul><ul><ul><ul><ul><li>Información para butear SO de partición (si existe en partición). Unix : Boot block, NTFS : Partition Block Sector </li></ul></ul></ul></ul><ul><ul><ul><li>Bloque de Control de Partición (Partition Control Block) </li></ul></ul></ul><ul><ul><ul><ul><li>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 </li></ul></ul></ul></ul><ul><ul><ul><li>Estructura de Directorios a usar </li></ul></ul></ul><ul><ul><ul><li>FCB (File Control Block) </li></ul></ul></ul><ul><ul><ul><ul><li>Contiene información de archivo: dueño, tamaño, permisos, punteros a bloques de disco, etc </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Unix Inodo, NTFS, info guardada en Tabla de Archivo Maestra </li></ul></ul></ul></ul>
  9. 9. Implementación de Sistemas de Archivos cont. <ul><li>Estructuras en Memoria </li></ul><ul><ul><li>Tabla de Particiones </li></ul></ul><ul><ul><ul><li>Tabla con información acerca de cada partición </li></ul></ul></ul><ul><ul><li>Estructura de directorios </li></ul></ul><ul><ul><ul><li>Tabla de directorios accesados recientemente con su información </li></ul></ul></ul><ul><ul><li>Tabla de Archivos Abiertos a nivel de Sistema (TAAS) </li></ul></ul><ul><ul><ul><li>Contiene copia de los FCBs de cada archivo, y otra informacion como número de Procesos que tiene archivo abierto </li></ul></ul></ul><ul><ul><li>Tabla de Archivos Abiertos a nivel de Proceso (TAAP) </li></ul></ul><ul><ul><ul><li>Contiene puntero a entrada a tabla de archivos abiertos de sistema </li></ul></ul></ul>
  10. 10. Particiones de disco Caso Unix/linux <ul><li>Cada partición </li></ul><ul><ul><li>boot block, puede subir sistema cargando programa residente aqui </li></ul></ul><ul><ul><li>Superblock. Especifica los límites de las áreas siguientes, contiene punteros a listas de inodos libres y bloques de archivos libres </li></ul></ul><ul><ul><li>Area de inodos. Contiene descriptores (inodos) para cada archivo en el disco. Todos los inodes son del mismo tamaño </li></ul></ul><ul><ul><li>Dir root. Inodo y directorio root </li></ul></ul><ul><ul><li>Archivos y directorios. Bloques de se usan para </li></ul></ul><ul><li>Una partición puede usarse para un sistema de archivos o como area de swapping ( en este caso es sólo bloques para respaldo) </li></ul>MBR T particiones Partición Partición Partición Boot Superblock Espacio libre Inodes Dir. Root Archivos y block directorios
  11. 11. Proceso de buteo Caso Unix/linux <ul><li>CPU ejecuta código residente en ROM BIOS (Read Only Memory Basic Input Output System) </li></ul><ul><ul><li>Código verifica y prepara HW de sistema </li></ul></ul><ul><ul><li>Carga programa (master boot program o boot loader) ubicado en sector 0 (Master Boot Record) de disco </li></ul></ul><ul><ul><ul><li>En linux puede ser lilo o grub, los que permiten elegir una partición a subir </li></ul></ul></ul><ul><ul><ul><ul><li>Contiene programa ejecuta SO en partición </li></ul></ul></ul></ul><ul><ul><ul><li>Estos boot loaders están en MBR o en primer sector de parcición activa </li></ul></ul></ul><ul><ul><li>Con programas Lilo o Grub es posible definir varias particiones con diferentes SOs </li></ul></ul><ul><ul><ul><li>Aunque tambien sirven para usar el mismo sistema de archivos pero identificar diferentes SO (asociados a diferentes linux kernels) </li></ul></ul></ul>
  12. 12. Sistema de Archivos Unix (UFS) <ul><li>Sistema de Archivos original en Unix (1970) </li></ul><ul><li>Disco dividido en particiones </li></ul><ul><ul><li>Una partición: grupo de cilindros adyacentes </li></ul></ul><ul><ul><li>Un sistema de archivos puede residir en una partición </li></ul></ul><ul><li>BIOS define sector de buteo (boot sector) para estar en cabeza 0, cilindro 0, sector 1 </li></ul><ul><li>Master Boot Record (MBR) usado para butear computador </li></ul><ul><ul><li>Sabe de boot loader y tabla de particiones </li></ul></ul><ul><li>Tabla de partición </li></ul><ul><ul><li>Define direcciones de inicio y fin de cada partición </li></ul></ul><ul><ul><li>Una partición es marcada como activa </li></ul></ul><ul><li>Cuando sistema sube </li></ul><ul><ul><li>BIOS ejecuta MBR </li></ul></ul><ul><ul><li>MBR localiza partición activa y ejecuta bloque de buteo </li></ul></ul>
  13. 13. Para que usar particiones? <ul><li>Dividir el disco para diversos propósitos </li></ul><ul><ul><li>Tener diversos SOs cargados uno en cada partición </li></ul></ul><ul><ul><li>SOs y sistemas de archivos pueden ser usados en forma independiente </li></ul></ul><ul><ul><ul><li>Respaldos o cualquier uso que quiera darle el usuario </li></ul></ul></ul>
  14. 14. Crear, Abrir y Usar un Archivo <ul><li>Crear </li></ul><ul><ul><li>SO busca en bloque de control de partición por un puntero de un FCB no usado </li></ul></ul><ul><ul><li>SO suma puntero de FCB en la estructura del directorio. </li></ul></ul><ul><li>Abrir </li></ul><ul><ul><li>Buscar si archivo esta abierto en TAAS, si no esta Buscar en directorios por nombre de archivo </li></ul></ul><ul><ul><li>Copiar información de FCB a la TAAS </li></ul></ul><ul><ul><li>Sumar una entrada para el archivo en la TAAP, que contiene puntero a TAAS </li></ul></ul><ul><ul><li>SA retorna descriptor de archivo o handle a proceso que lo abre </li></ul></ul><ul><li>Usar </li></ul><ul><ul><li>Escribir, buscar el bloque de control de partición por punteros a bloques de disco vacíos </li></ul></ul><ul><ul><li>Leer. buscar en FCB bloques a leer </li></ul></ul>
  15. 15. Usando Disco para Almacenar Archivos <ul><li>SA almacena archivos en bloques </li></ul><ul><ul><li>Define tamaño de bloque, en general entre 1KB y 4KB </li></ul></ul><ul><ul><li>Existe un “Bloque Maestro” que define la ubicación del directorio root </li></ul></ul><ul><ul><ul><li>Siempre una ubicación bien conocida </li></ul></ul></ul><ul><ul><ul><li>En general replicada para proporcionar mayor disponibilidad </li></ul></ul></ul><ul><ul><li>Posee una lista con bloques libres y bloques ocupados </li></ul></ul><ul><ul><ul><li>En general, bitmap, define un bit por bloque de disco </li></ul></ul></ul><ul><ul><ul><ul><li>1 si esta ocupado, 0 si esta libre </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Almacenada en disco y en memoria (para aumentar rendimiento) </li></ul></ul></ul></ul><ul><ul><li>SO usa Caching </li></ul></ul><ul><ul><ul><li>SO mantiene cache con bloques de disco usados mas recientemente (disminuir latencia de acceso a disco) </li></ul></ul></ul>
  16. 16. Registro de Bloques Asignado a Archivos <ul><li>Estructura de datos común </li></ul><ul><ul><li>Encabezado de archivo: cada archivo posee uno </li></ul></ul><ul><ul><ul><li>Que bloques de disco estan siendo ocupados por archivo </li></ul></ul></ul><ul><ul><li>Distintas implementaciones: Como se sabe que bloques pertenecen a que archivos </li></ul></ul><ul><ul><ul><li>Asignación contigua </li></ul></ul></ul><ul><ul><ul><li>Archivos enlazados </li></ul></ul></ul><ul><ul><ul><li>Archivos indexados </li></ul></ul></ul><ul><ul><ul><li>Archivos indexados en múltiples niveles </li></ul></ul></ul>
  17. 17. Asignación Contigua <ul><li>Usuario dice por adelantado tamaño de archivo </li></ul><ul><li>SO busca en bitmap (usando criterio) bloques de disco que satisfacen requerimiento de usuario </li></ul><ul><li>El encabezado de archivo posee </li></ul><ul><ul><li>Primer sector de bloque en disco </li></ul></ul><ul><ul><li>Tamaño de archivo en términos de número de sectores </li></ul></ul><ul><li>Ventajas/Desventajas </li></ul><ul><ul><li>+ Acceso secuencial rápido </li></ul></ul><ul><ul><li>+ Acceso aleatorio fácil </li></ul></ul><ul><ul><li>- Fragmentación externa </li></ul></ul><ul><ul><li>- Difícil cuando archivo crece más de lo definido originalmente </li></ul></ul>
  18. 18. Archivos Enlazados <ul><li>Cada bloque de disco incluye puntero al siguiente bloque de disco </li></ul><ul><li>Encabezado de archivo posee dirección del primer bloque de disco </li></ul><ul><li>Ventajas/Desventajas </li></ul><ul><ul><ul><li>+ Archivos pueden crecer dinámicamente </li></ul></ul></ul><ul><ul><ul><li>- Acceso secuencial no es tan bueno, pero mejor que aleatorio </li></ul></ul></ul><ul><ul><ul><ul><li>Requiere tiempo de búsqueda de próximo bloque </li></ul></ul></ul></ul><ul><ul><ul><li>- Acceso aleatorio muy lento </li></ul></ul></ul><ul><ul><ul><li>- No es confiable, que pasa si se pierde o se estropea un bloque? </li></ul></ul></ul><ul><li>MS-DOS FAT (File Allocation Table) usa esta filosofía, pero implementación mediante una tabla </li></ul><ul><ul><li>Mejor rendimiento, sobretodo si tabla esta en memria </li></ul></ul>
  19. 19. Archivos Indexados <ul><li>Usuario especifica tamaño máximo de archivo </li></ul><ul><li>SA define un arreglo de punteros a bloques acorde al tamaño máximo </li></ul><ul><li>Encabezado de archivo posee arreglo de punteros de bloques (index block: contiene punteros a los bloques de disco del archivo) </li></ul><ul><li>Ventajas/Desventajas </li></ul><ul><ul><ul><li>+ Tamaño de archivo puede crecer fácilmente hasta máximo </li></ul></ul></ul><ul><ul><ul><li>+ Acceso aleatorio es rápido </li></ul></ul></ul><ul><ul><ul><li>- Costoso si archivo crece sobre máximo </li></ul></ul></ul><ul><ul><ul><li>- Acceso secuencial lento, ya que bloques pueden estar distantes unos de otros en disco </li></ul></ul></ul>
  20. 20. Archivos Indexados con Múltiples Niveles <ul><li>Objetivo </li></ul><ul><ul><li>Rápido para archivos pequenos y permitir archivos grandes </li></ul></ul><ul><li>Encabezado de archivo posee 13 punteros </li></ul><ul><ul><li>Tabla de punteros de tamaño fijo, aunque no son todos equivalentes </li></ul></ul><ul><ul><li>Primeros 10 (ahora 12) punteros direcccionan bloques de datos </li></ul></ul><ul><ul><li>Puntero décimo primero (11) (ahora 13): Puntero indirecto </li></ul></ul><ul><ul><ul><li>Apunta a bloque de punteros de bloques de datos </li></ul></ul></ul><ul><ul><li>Puntero décimo segundo (12) (ahora 14): Puntero doblemente indirecto </li></ul></ul><ul><ul><ul><li>Apunta a bloque de punteros, los que a su vez contienen punteros a bloques de datos </li></ul></ul></ul><ul><ul><li>Puntero décimo tercero (13) (ahora 15): Puntero triplemente indirecto </li></ul></ul><ul><ul><ul><li>Apunta a bloque de punteros, los que a su vez contienen punteros a bloques de punteros, los que contienen punteros a bloques de datos </li></ul></ul></ul>
  21. 21. Archivos Indexados con Múltiples Niveles <ul><li>Unix implementa este mecanismo </li></ul><ul><li>Ventajas/Desventajas </li></ul><ul><ul><ul><li>+ Simple </li></ul></ul></ul><ul><ul><ul><li>+ Archivos pueden crecer fácilmente (tamaño max relativamente grande) </li></ul></ul></ul><ul><ul><ul><li>+ Archivos pequeños rápidos </li></ul></ul></ul><ul><ul><ul><li>- Archivos grandes penalizados en tiempo de búsqueda, por el uso de indirección de múltiples niveles </li></ul></ul></ul><ul><ul><ul><li>- Mucho tiempo usado en búsqueda de bloques (cuando archivos son grandes) </li></ul></ul></ul>
  22. 22. Ejemplo FAT <ul><li>Entrada directorio </li></ul>35 103 25 20 0 EOF test.txt ........... 88 20 25 35 88 95 103
  23. 23. Ejemplo Inodos Unix (también en FFS) <ul><li>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 </li></ul>
  24. 24. Ejemplo Inodos <ul><li>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: </li></ul><ul><ul><li>Máximo tamaño de archivo posible </li></ul></ul><ul><ul><li>Número de accesos a disco son necesarios para alcanzar bloque 23, cuales son? </li></ul></ul>
  25. 25. Ejemplo con i-nodos y búsqueda en directorios
  26. 26. Ejemplo Traducción Rutas con Inodos <ul><li>Archivos directorios: archivos en que cada entrada contiene archivo o directorio y además Inodo donde esta ubicado </li></ul><ul><li>Archivo /home/juan/tarea.txt. </li></ul><ul><ul><li>Archivo directorio “/” contiene lista archivos/directorio con sus Inodos </li></ul></ul><ul><ul><li>Directorio “home” tiene Inodo 100 </li></ul></ul><ul><ul><li>Inodo 100 contiene puntero a bloques donde esta “home”: bloque 200 </li></ul></ul><ul><ul><li>Bloque 200 : archivo directorio “home” posee inodo para “juan”: inodo 110 </li></ul></ul><ul><ul><li>Inodo 110 contiene puntero a bloques donde esta “juan”: bloque 300 </li></ul></ul><ul><ul><li>Bloque 300 : archivo diretorio “juan” posee inodo para “tarea.txt”: inodo 120 </li></ul></ul><ul><ul><li>Inodo 120 contiene punteros a bloques donde esta “tarea.txt”: bloques 400, 401 y 402 </li></ul></ul>
  27. 27. Ubicación de inodos <ul><li>Unix original tenía dos problemas de desempeño importantes </li></ul><ul><ul><li>Bloques de datos en cualquier parte del disco </li></ul></ul><ul><ul><ul><li>Cuando archivo es nuevo se buscan bloques de archivos </li></ul></ul></ul><ul><ul><ul><li>Cuando SA envejece y se llena necesita ubicar nuevos archivos mientras otros han sido borrados </li></ul></ul></ul><ul><ul><ul><ul><li>Archivos de diferentes tamaños </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Bloques para archivos nuevos empiezan a estar dispersos en el disco </li></ul></ul></ul></ul><ul><ul><li>Inodos están ubicados lejos de los bloques de disco </li></ul></ul><ul><ul><ul><li>Todos los inodos al inicio del disco y luego los bloques de disco </li></ul></ul></ul><ul><ul><ul><li>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 </li></ul></ul></ul>
  28. 28. Mejorando desempeño <ul><li>Uso de Buffer cache </li></ul><ul><ul><li>Explotar localidad usando memoria como cache para archivos </li></ul></ul><ul><ul><ul><li>Cache es compartida por todos los procesos </li></ul></ul></ul><ul><ul><ul><li>Muchos sistemas de archivos leen por adelantado (antes que se necesite) a buffer cache </li></ul></ul></ul><ul><ul><ul><li>Caching escrituras </li></ul></ul></ul><ul><ul><ul><ul><li>Necesario manejar consistencia en algunos casos se requiere write-through </li></ul></ul></ul></ul><ul><ul><li>Algunos problemas con el buffer cache </li></ul></ul><ul><ul><ul><li>Competencia de páginas con la administración de memoria </li></ul></ul></ul><ul><ul><ul><li>También requiere algoritmos de reemplazo </li></ul></ul></ul><ul><ul><ul><ul><li>Usualmente LRU </li></ul></ul></ul></ul>
  29. 29. Protección de archivos <ul><li>Protección usada para… </li></ul><ul><ul><li>Controlar quien tiene acceso a qué archivo </li></ul></ul><ul><ul><li>Controlar el tipo de acceso que un usuario puede realizar sobre archivo </li></ul></ul><ul><li>En forma general </li></ul><ul><ul><li>Generalizar archivos a objetos </li></ul></ul><ul><ul><li>Generalizar usuarios a principales </li></ul></ul><ul><ul><li>Generalizar lectura/escritura a acciones </li></ul></ul><ul><li>Un sistema de protección dice si una determinada acción realizada por un determinado principal en un deteminado objeto debería ser permitida </li></ul><ul><ul><li>Usuario dueño puede leer/escribir sobre archivo, pero no otros </li></ul></ul><ul><ul><li>Usuario puede leer algún archivo de sistema, pero no escribirlo </li></ul></ul>
  30. 30. Modela para representar protección <ul><li>Dos maneras de verlo </li></ul><ul><ul><li>Listas de control de acceso (ACLs) </li></ul></ul><ul><ul><ul><li>Para cada objeto, guardar una lista de los principales y las acciones permitidas para principales </li></ul></ul></ul><ul><ul><li>Capacidades </li></ul></ul><ul><ul><ul><li>Para cada principal, guardar una lista de los objetos y acciones permitidas para principales </li></ul></ul></ul><ul><ul><li>Representación en siguiente matriz </li></ul></ul>principales objetos ACL capacidad r otro r rw r juan rw rw rw root /home/otro /home/juan /etc/passwd
  31. 31. ACLs y Capacidades <ul><li>Capacidades son más fácil de transferir </li></ul><ul><ul><li>Como llaves (caso casa) </li></ul></ul><ul><ul><li>Facilitan compartición </li></ul></ul><ul><li>ACLs son más fáciles de manejar </li></ul><ul><ul><li>Basado en objetos, fácil de entregar y quitar </li></ul></ul><ul><ul><ul><li>Quitar capacidades es más difícil, hay que mantener historia de principales que han tenido capacidad </li></ul></ul></ul><ul><ul><ul><li>Difícil de seguir, pues principales se pueden pasar capacidades </li></ul></ul></ul><ul><li>ACLs se hacen grandes cuando objetos son muy compartidos </li></ul><ul><ul><li>Esquema puede simplificarse agrupando </li></ul></ul><ul><ul><ul><li>Poner usuarios en grupos, poner grupos en ACLs </li></ul></ul></ul><ul><ul><li>Cambiando acciones sobre grupos afecta al grupo completo </li></ul></ul>
  32. 32. Consistencia del SA <ul><li>Los i-nodos y los bloques de discos residen en buffer cache (memoria usada para cache de archivos) </li></ul><ul><li>El comando sync fuerza la escritura en disco de la información de disco residente en memoria </li></ul><ul><ul><li>Sistema hace un sync cada unos pocos segundos </li></ul></ul><ul><li>Una caída del sistema o corte de energía entre syncs puede dejar el disco inconsistente </li></ul><ul><li>Se podría mejorar consistencia usando menos caching pero esto perjudicaría el desempeño </li></ul>
  33. 33. Manejando consistencia de archivos (i-cache) <ul><li>Verificar que cada bloque este asociado sólo a un archivo </li></ul><ul><ul><li>Un vector de bits, un bit por cada bloque en disco </li></ul></ul><ul><ul><li>Seguir la lista de bloques libres e inodos libres </li></ul></ul><ul><ul><ul><li>Cuando un bloque es encontrado, ver el bit </li></ul></ul></ul><ul><ul><ul><li>Si bit == 0, ponerlo en 1 </li></ul></ul></ul><ul><ul><ul><li>Si bit == 1, </li></ul></ul></ul><ul><ul><ul><ul><li>Si bloque esta asociado a archivo y en lista de bloques libres </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Eliminarlo de la lista de libres ( no garantia de lo que suceda) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>Si bloque está asociado a dos archivos… error </li></ul></ul></ul></ul>
  34. 34. Consistencia de directorios (d-cache) <ul><li>Verificar que directorios formen un árbol </li></ul><ul><ul><li>Verificar que el contador de links de un archivo sea igual al número de directorios que apuntan a archivo </li></ul></ul>
  35. 35. Compartiendo archivos 1 Enlaces duros <ul><li>Un archivo en Unix puede tener múltiples nombres </li></ul><ul><li>Nombre en entrada en el directorio es llamado enlace duro. Múltiples entrada en directorio apuntan a mismo inodo </li></ul><ul><li>Cada inodo tiene un campo “count” que indica el número de enlaces duros </li></ul><ul><li>Llamada a sistema relacionadas “link” y “unlink” </li></ul><ul><ul><li>link(nombre existente, nuevo nombre) crea nueva entrada en directorio con nombre dado e incrementa el count de inodo </li></ul></ul><ul><ul><li>Unlink(nombre), destruye entrada en directorio, decrementa count, si count == 0 libera bloques de disco e inodo ocupado por archivo </li></ul></ul>
  36. 36. Compartiendo archivos Enlace simbólico <ul><li>Enlace simbólico entrada en directorio que contiene pathname a otro archivo en el SA </li></ul><ul><li>Llamada a sistema </li></ul><ul><li>Symlink(nombre existente, nuevo nombre) </li></ul><ul><li>Asigna nuevo inodo a nuevo archivo, nuevo archivo contienen path de archivo existente, </li></ul><ul><ul><li>Si antiguo archivo es eliminado, accesar nuevo archivo no será posible </li></ul></ul>
  37. 37. Compartición de archivos 2 <ul><li>Cada usuario tiene una tabla de canal o tabla de archivos abiertos por usuario </li></ul><ul><li>Cada entrada en la tabla de archivos abiertos es un puntero a una entrada a la tabla de archivos abiertos del sistema </li></ul><ul><li>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 </li></ul><ul><li>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 </li></ul><ul><li>Si un proceso hace un fork, el hijo obtiene una copia de la channel table ( y luego el mismo file offset) </li></ul>
  38. 38. Usuario 1 Usuario 2 Usuario 3 channel table channel table channel table open file table memory-resident i-node table file offset file offset
  39. 39. Algunos SAs populares <ul><li>NTFS (Windows) </li></ul><ul><li>Minix (No se usa tanto, pero disponible) </li></ul><ul><li>UFS </li></ul><ul><li>Ext2fs: Ext2 (linux) estandar, basado en inodos </li></ul><ul><li>Ext3fs: Ext3 (linux). Journaling. Basado en otro </li></ul><ul><li>VeritasFS (VxFS). Journaling o logging </li></ul><ul><li>ReinserFS (linux) Journaling con logging. Completamente nuevo. Incluido en linux estandar </li></ul><ul><li>JFS (de IBM). Journaling o logging. Basado en otro </li></ul><ul><li>FFS </li></ul><ul><li>XFS (de SGI). Journaling o logging. Basado en otro </li></ul><ul><li>http://www.tldp.org/HOWTO/Filesystems-HOWTO.html </li></ul><ul><ul><li>Larga lista de sistemas de archivos </li></ul></ul>
  40. 40. UFS (Sistema de Archivos Unix original) <ul><li>Layout en disco de UFS </li></ul><ul><ul><li>Metadata al principio en disco </li></ul></ul><ul><li>Bloques de disco son asignados aleatoriamente a archivos sistema usado por largo tiempo </li></ul><ul><ul><li>Cuando sistema nuevo, bloques asignados secuencialmente a archivos </li></ul></ul><ul><li>Inodos lejos de bloques </li></ul>
  41. 41. Ubicación de inodos y bloques de disco por archivo en UFS <ul><li>Inodo contiene metadata de archivo incluyendo direcciones a bloques de disco </li></ul><ul><li>Tiempo de búsqueda malo, cabeza debe moverse entre cilindros distantes </li></ul>
  42. 42. FFS (Fast File System) <ul><li>Proyecto en Berkeley BSD FFS (1970) </li></ul><ul><ul><li>Idea es mejorar productividad y disminuir tiempo de respuestas de Unix Original (UFS) </li></ul></ul><ul><ul><li>Idea se basa en conocimiento de layout en disco </li></ul></ul>
  43. 43. Layout en disco en FFS <ul><li>Grupos de cilindros </li></ul><ul><li>Tamaños de bloque de disco incrementado de 512 bytes a 4KB </li></ul><ul><ul><li>Mejor soporte para archivos grandes </li></ul></ul><ul><ul><li>Puede producir fragmentación interna </li></ul></ul><ul><ul><ul><li>Uso de fragmentos para solucionarla </li></ul></ul></ul>
  44. 44. FFS <ul><li>FFS (File Fast System) usa idea de grupos de cilindros </li></ul><ul><ul><li>Disco particionado en grupos de cilindros </li></ul></ul><ul><ul><li>Bloques de datos de un mismo archivo ubicado en el mismo grupo de cilindros </li></ul></ul><ul><ul><li>Inodo de archivo ubicado en el mismo grupo de cilindros </li></ul></ul><ul><li>Introduce un requerimiento de espacio libre </li></ul><ul><ul><li>Para poder hacer lo explicado arriba se necesita tener espacio libre disperso en todo el disco </li></ul></ul><ul><ul><li>En FFS se reserva el 10 % del disco para estar disponible </li></ul></ul>
  45. 45. Sistemas de Archivos Journaling <ul><li>UFS y FFS usan memoria como cache para disco (buffer cache) </li></ul><ul><li>UFS y FFS tienen problemas cuando sistema se cae </li></ul><ul><ul><li>Ejemplo caída de sistema en la creación de archivo </li></ul></ul><ul><ul><ul><li>1 Asignación de inodo </li></ul></ul></ul><ul><ul><ul><li>Apuntar en entrada de directorio inodo de archivo </li></ul></ul></ul><ul><ul><ul><li>Problema de consistencia en estructuras de datos en memoria y disco </li></ul></ul></ul><ul><ul><li>UFS y FFS proporcionan utilitarios para reconstruir consistencia (fsck), pero muy lento </li></ul></ul><ul><ul><ul><li>Debe verificar cada bloque </li></ul></ul></ul><ul><ul><ul><li>No escalable (más lento a medida que aumenta disco) </li></ul></ul></ul>
  46. 46. Sistemas de Archivos Journaling <ul><li>Se hicieron populares en 2002 </li></ul><ul><li>Varias opciones </li></ul><ul><ul><li>Ext3, ReinserFS, XFS, ntfs </li></ul></ul><ul><li>Idea básica </li></ul><ul><ul><li>Actualizar metadatos y datos transaccionalmente </li></ul></ul><ul><ul><ul><li>Los dos o ninguno </li></ul></ul></ul><ul><ul><li>En caso de falla, puede perderse un proco de trabajo, pero disco queda consistente </li></ul></ul><ul><ul><ul><li>En forma precisa, consistencia mediante uso de log o journal transaccional, en lugar de barrer cada bloque de disco para verificar estado </li></ul></ul></ul>
  47. 47. Almacenamiento de datos <ul><li>Datos </li></ul><ul><ul><li>En buffer cache </li></ul></ul><ul><ul><li>En disco </li></ul></ul><ul><li>Idea básica de solución </li></ul><ul><ul><li>Siempre dejar copia de datos en estado consistente </li></ul></ul><ul><ul><li>Actualizar datos persistentemente escribiendo secuencialmente (tiempo) en archivo journal </li></ul></ul><ul><ul><li>En tiempo libre de sistema, hacer actualizaciones escritas en journal cronologicamente y liberar espacio de archivo journal </li></ul></ul>
  48. 48. Redo log <ul><li>Log </li></ul><ul><ul><li>Archivo que se escribe sólo al final conteniendo registros de logs </li></ul></ul><ul><ul><ul><li>Start t </li></ul></ul></ul><ul><ul><ul><ul><li>Transacción t ha empezado </li></ul></ul></ul></ul><ul><ul><ul><li>T, x, v </li></ul></ul></ul><ul><ul><ul><ul><li>Transacción T ha actualizado bloque x y su nuevo valor en v </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Puede loggear diferencia de bloques en lugar de bloques </li></ul></ul></ul></ul></ul><ul><ul><ul><li>Commit t </li></ul></ul></ul><ul><ul><ul><ul><li>Transacción T ha committed – actualización sobrevive caida </li></ul></ul></ul></ul><ul><ul><li>Acción de Commit incluye escribir registro redo </li></ul></ul>
  49. 49. Si ocurre caida de sistema <ul><li>Recupera Log </li></ul><ul><li>Redo transacciones committed </li></ul><ul><ul><li>Barre el log en orden y reejecuta actualizaciones de las transacciones committed </li></ul></ul><ul><ul><li>Escrituras son idempotent (sólo ocurre una vez independiente del número de veces que se ejecute) </li></ul></ul><ul><li>Transacciones no committed </li></ul><ul><ul><li>Ignorarlas </li></ul></ul><ul><ul><ul><li>Como si caida ocurriera antes de commit </li></ul></ul></ul>
  50. 50. Desempeño <ul><li>Log es una escritura continua </li></ul><ul><ul><li>Escritura eficiente </li></ul></ul><ul><li>En lugar de varias escrituras asincrónicas </li></ul><ul><ul><li>Costosas en términos de desempeño </li></ul></ul><ul><li>Journaling </li></ul><ul><ul><li>Bueno, eficiente </li></ul></ul><ul><ul><li>Manejo de consistencia y recuperación eficiente </li></ul></ul>
  51. 51. Detalles sobre buffer cache <ul><li>Compartido por todos los procesos </li></ul><ul><li>Utiliza algoritmo de reemplazamiento </li></ul><ul><ul><li>Típicamente LRU </li></ul></ul><ul><li>Incluso una cache pequeña puede ser efectiva (4MB) </li></ul><ul><li>Hoy tenemos memorias grandes por lo que podemos tener caches mas grandes </li></ul><ul><li>Muchos sistemas de archivos leen por adelantado a la cache, aumentando su efectividad </li></ul>
  52. 52. Escrituras y lecturas en buffer cache <ul><li>Usuarios y aplicaciones asumen que datos están en disco después de una escritura </li></ul><ul><ul><li>En realidad, no necesariamente, para eso se usa cache </li></ul></ul><ul><li>Sistema de archivos puede quedar inconsistente en caso de falla si datos y metadatos no están consistentes en disco </li></ul><ul><ul><li>Mantener consistencia es cara </li></ul></ul><ul><li>Algunos enfoques </li></ul><ul><ul><li>“ Write through” lo que se escribe en buffer cache se escribe en disco (escritura sincrónica) </li></ul></ul><ul><ul><li>“ Write behind” mantener cola de bloques no escritos, periodicamente escribir en disco (no es confiable) </li></ul></ul><ul><ul><li>NVRAM: escribir en una RAM energizada y mas tarde en disco (NVRAM es cara) </li></ul></ul>
  53. 53. Lecturas vs escrituras <ul><li>Lecturas se ven beneficiadas con buffer cache grandes </li></ul><ul><li>Escrituras son un problema </li></ul><ul><ul><li>Cualquier estrategia debe incluir escritura a disco en algún momento </li></ul></ul><ul><ul><li>Luego tráfico a disco esta dominado por escrituras </li></ul></ul><ul><ul><li>Escribir inodos y bloques de datos incluye movimiento de cabeza en disco (caro en tiempo) y transferencia de datos. </li></ul></ul>
  54. 54. Log-Structured File System(LFS) <ul><li>Diseñado por avances en </li></ul><ul><ul><li>Discos grandes y creciendo cada año </li></ul></ul><ul><ul><li>Disponibilidad de grandes memorias </li></ul></ul><ul><ul><ul><li>Buffer cache puede ser mas grande </li></ul></ul></ul><ul><ul><ul><ul><li>Puede manejar mas bloques de disco en Memoria </li></ul></ul></ul></ul><ul><ul><li>Idea de LFS es tratar el disco como un log cuyas operaciones se agregan en el tiempo </li></ul></ul><ul><ul><ul><li>Coleccionar escrituras en el buffer cache y escribir un conjunto de escrituras al disco </li></ul></ul></ul><ul><ul><ul><li>Toda la información escrita en disco se realiza en el log </li></ul></ul></ul><ul><ul><ul><li>Recuperación en base a checkpoints (tratar el disco como bases de datos) </li></ul></ul></ul>
  55. 55. Idea LFS <ul><li>Usar disco como un log </li></ul><ul><li>Si disco es manejado como log, no habría costo de búsqueda </li></ul><ul><li>Nuevos datos y metadatos (inodos y directorios) son acumulados en buffer cache, luego escritos todos al mismo tiempo en bloques grandes (segmentos de 0.5 M – 1 MB) </li></ul><ul><li>Mejora utilización de disco </li></ul>
  56. 56. Comparación entre FFS y LFS archivo1 archivo2 dir1 dir2 FFS archivo1 archivo2 dir1 dir2 LFS Log inode directorio datos Map inode 2 archivos de 1 bloque: dir1/archivo1 dir2/archivo2
  57. 57. Desafíos y soluciones <ul><li>Ubicando datos en el log </li></ul><ul><ul><li>FFS pone los datos y metadatos en lugares conocidos en el disco </li></ul></ul><ul><ul><li>LFS escribe datos y metadatos al final del log </li></ul></ul><ul><ul><ul><li>LFS usa una map de inodos </li></ul></ul></ul><ul><ul><ul><ul><li>Mapea archivo con ubicación de inodo para archivo en un lugar bien definido </li></ul></ul></ul></ul><ul><li>Manejando espacio libre en el log </li></ul><ul><ul><li>Disco es finito, luego log tambien es finito </li></ul></ul><ul><ul><li>No se puede seguir agregando en log infinitamente </li></ul></ul><ul><ul><ul><li>Se necesita recuperar bloques borrados en parte antigua de log </li></ul></ul></ul><ul><ul><ul><li>Log organizado en segmentos grandes (0.5 – 1 MB) </li></ul></ul></ul><ul><ul><ul><ul><li>Cuando segmento se llena se escribe en disco </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Con el tiempo segmentos se fragmentan (nuevos y viejos bloques) </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Segmentos con pocos datos válidos se recuperan </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Datos previamente copiados a final de log </li></ul></ul></ul></ul></ul>
  58. 58. LFS <ul><li>Problemas </li></ul><ul><ul><li>Su implementación no es tan simple </li></ul></ul><ul><ul><li>Ubicando datos en log no es tan rápida </li></ul></ul><ul><ul><li>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 </li></ul></ul><ul><ul><ul><li>Manejo de fragmentación de segmentos y limpieza es complicado </li></ul></ul></ul><ul><ul><ul><li>Uso de demonio de limpieza encargado de verificar fragmentación, compactación y recuperación </li></ul></ul></ul>
  59. 59. Comparación entre FFS, JFS y LFS <ul><li>LFS y FFS </li></ul><ul><ul><li>Carga de trabajo por metadatos es cara </li></ul></ul><ul><ul><ul><li>Incluye escritura pequeñas (inodos ocupados y entradas en directorios) </li></ul></ul></ul><ul><li>Problema de limpieza de segmentos en LFS es un problema </li></ul><ul><li>LFS y JFS </li></ul><ul><ul><li>JFS es robusto como LFS, pero metadata debe ser escrita en disco más frecuentemente </li></ul></ul><ul><ul><li>No confundir JFS con LFS </li></ul></ul><ul><ul><ul><li>JFS tiene log de transacciones a disco para manejar caidas y recuperación más rápido manejando consistencia en disco asincrónicamente </li></ul></ul></ul><ul><ul><ul><li>LFS el disco es visto como log </li></ul></ul></ul>

×