Sistema de Archivos

38,574 views
38,584 views

Published on

Sistemas de Archivos

2 Comments
8 Likes
Statistics
Notes
No Downloads
Views
Total views
38,574
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
992
Comments
2
Likes
8
Embeds 0
No embeds

No notes for slide

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>

×