1 / 103

Diseño de Sistemas Operativos

Diseño de Sistemas Operativos. Implementaciones de Sistemas de Ficheros ( Superbloque ). EMILIO GONZÁLEZ DÍAZ IGNACIO SOLINIS CAMALICH. ¿Qué es un Sistema de Ficheros?. Es el método mediante el cual se almacena la información en el disco duro .

vicky
Télécharger la présentation

Diseño de Sistemas Operativos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Diseño de Sistemas Operativos Implementaciones de Sistemas de Ficheros (Superbloque) EMILIO GONZÁLEZ DÍAZ IGNACIO SOLINIS CAMALICH

  2. ¿Qué es un Sistema de Ficheros? • Es el método mediante el cual se almacena la información en el disco duro. • Almacena y Gestiona los datos que los usuarios tienen guardados en los dispositivos de almacenaje. • Asegura que los datos que se obtienen son idénticos a los que se almacenaron originalmente. • Crea y gestiona información sobre los ficheros y sobre sí mismo.

  3. Historia de los SF en Linux • La primera versión del sistema de ficheros de Linux estaba basada en el sistema de ficheros de Minix. Muy limitado. • Más tarde entró en escena el sistema de ficheros extendido (Extfs). Resultados insatisfactorios de rendimiento. • Por esto, en 1994 surgió el segundo sistema de ficheros extendido (Ext2fs). Alta eficiencia y robustez.

  4. Historia de los SF en Linux • Durante los últimos años, el Ext2 ha sido el sistema de ficheros más extendido entre los sistemas Linux. • Linux se usa cada vez más en entornos servidor, llevando a Ext2 al límite de sus posibilidades. • Los requisitos más comunes de hoy en día son: • Necesidad de recuperación rápida de caídas del sistema • Rendimiento alto en operaciones de Entrada / Salida (I/O) • Necesidad de almacenar Terabytes de información

  5. Historia de los SF en Linux • Para solventar estas carencias, aparecen entre otros, los sistemas de ficheros Ext3, ReiserFS, XFS y JFS. • Además de cumplir con los requisitos especificados más arriba, todos ellos soportan el sistema “Journaling”. • Un sistema de ficheros Journaling • Simplifica los reinicios • Reduce problemas derivados de la fragmentación • Acelera las operaciones de E/S

  6. El sistema de ficheros en Linux • Los sistemas de ficheros se crean en particiones. • Los sistemas basados en Unix utilizan un sistema jerarquizado compuesto por: • Ficheros • Directorios, los cuales pueden contener tanto ficheros como directorios

  7. El sistema de ficheros en Linux • Los sistemas de ficheros se montan mediante el comando “mount”. • Mount se ejecuta automáticamente en el proceso de arranque del sistema. • El listado de sistemas de ficheros a montar se almacena en el fichero /etc/fstab (filesystem table)

  8. El sistema de ficheros en Linux • El listado de los sistemas de ficheros montados en el sistema se almacena en el fichero /etc/mtab (mount table) • Los sistemas de ficheros se desmontan automáticamente con el apagado del sistema.

  9. Criterios de Selección • ESTABILIDAD Y FIABILIDAD – Con respecto a la pérdida de datos • CAPACIDAD (“lo capaz que es”) – Requisitos de rendimiento • CAPACIDAD (“la capacidad que tiene”) – Los límites del sistema de ficheros • MANTENIMIENTO – El tipo de mantenimiento que necesita • AFINAMIENTO (tuning) – Facilidad de configuración y afinamiento del sistema • SOPORTE – Por parte del grupo de desarrollo

  10. Sistema Virtual de Archivos (VFS) • Los distintos SO suelen usar su propio Sistema de Ficheros • Esto complica la compartición de datos en un disco duro entre distintos SO • Linux ofrece soporte para distintos Sistemas de Ficheros como EXT2, Minix, FAT…

  11. Sistema Virtual de Archivos (VFS) • Los procesos necesitan de un acceso uniforme a los datos, sin preocuparse de qué Sistema de Ficheros se trata • El VFS es la interfaz entre las llamadas al sistema y la gestión de archivos • Las llamadas se dirigen al VFS, que redirige la petición al módulo que gestiona el archivo

  12. Segundo sistema de ficheros extendido (Ext2)

  13. Definición de conceptos • Un BLOQUE lógico es la unidad más pequeña de almacenamiento (se mide en bytes) • Un VOLUMEN lógico es una PARTICIÓN de disco. • Las particiones están divididas en bloques. • La Asignación de bloques es un método donde el sistema de ficheros asigna un bloque cada vez. • Un puntero a cada bloque se mantiene y almacena en el sistema.

  14. Definición de conceptos • La FRAGMENTACIÓN INTERNA ocurre cuando un fichero no ocupa por completo un bloque. • Ej. Si tenemos un fichero de 10K y un tamaño de bloque de 8K, el sistema de ficheros asignará dos bloques para alojar el fichero, pero 6K del segundo bloque se desaprovecharán. Nótese que a mayor tamaño de bloque mayor será el espacio desperdiciado. • La FRAGMENTACIÓN EXTERNA ocurre cuando los bloques lógicos no se encuentran contiguos. Este tipo de fragmentación produce un bajo rendimiento.

  15. Definición de conceptos • Un Extent es un conjunto de bloques contiguos. • Cada Extent se describe como una tripleta • Offset del fichero, que nos dice a qué bloque lógico corresponde dentro del fichero. • El número del primer bloque del extent. • El tamaño del extent (medido en bloques).

  16. Definición de conceptos • Los extent se asignan y se monitorizan como una unidad independiente (forman un todo) por lo que un único puntero monitorizará un grupo de bloques. • La técnica de asignación de extents es un método más eficiente para ficheros grandes que la técnica de asignación de bloques.

  17. Ejemplo del uso de extents: • El fichero requiere 18 bloques • El sistema de ficheros realiza una asignación de: • 1 extent de 8 bloques. • 2 extent de 5 bloques.

  18. Definición de conceptos • Lista de Control de Acceso (Access Control List –ACL): Especifica los derechos de acceso para cualquier usuario específico o combinación de usuarios. • Los METADATOS son las estructuras de datos internas del sistema de ficheros • Los metadatos incluyen: • La fecha y hora. • Información sobre el propietario. • La lista de control de acceso (ACL). • El tamaño del fichero…

  19. Definición de conceptos • Un I-NODEalmacena toda la información sobre un fichero excepto la información del fichero propiamente dicha (es un Metadato). • Un i-node consume también bloques. • Un i-node contiene: • Los permisos del fichero. • El tipo del fichero. • El número de links (enlaces) al fichero.

  20. Definición de conceptos • Cada i-node tiene un número único que los identifica. • Un DIRECTORIO es un tipo específico de fichero que contiene punteros a otros ficheros. • El i-node de un fichero directorio simplemente contiene el número identificador de los i-nodes que contiene además de los permisos, etc.

  21. Características del Ext2 • Ext2 está presente sobre un dispositivo físico (disquete, disco duro...) • Seleccionar el tamaño de bloque en la creación del sistema de ficheros (desde 1.024 a 4096 bytes). Esto dependerá del tamaño medio esperado de los ficheros. • En la creación del sistema de ficheros también se puede elegir el número de inodes que se van a permitir para una partición.

  22. Características del Ext2 • El sistema de ficheros coloca los bloques de disco en grupos. • Cada bloque incluye bloques de datos e i-nodes almacenados en pistas adyacentes. • Gracias a esta estructura, ficheros almacenados en un único grupo de bloques pueden ser accedidos en un menor tiempo promedio de búsqueda en disco.

  23. Características del Ext2 • El sistema de ficheros preasigna bloques de datos en disco a ficheros regulares antes de ser usados. • Cuando el fichero aumenta de tamaño, varios bloques ya están reservados en posiciones adyacentes (reduce la fragmentación externa). • Soporta chequeos automáticos de consistencia en el inicio del sistema (e2fsck).

  24. Características del Ext2 • Borrado Lógico. Permite a los usuarios la recuperación sencilla, si es necesario, del contenido de un fichero previamente eliminado. • Compatibilidad tanto con el SVR4 (Unix System V Release 4) y con la semántica BSD.

  25. Estructura Física de un SF EXT2 • Está formado por una colección de bloques secuenciales • El sector de boot contiene el código necesario para cargar el núcleo en el arranque del sistema. • El sistema de ficheros es manejado globalmente como una serie de Grupos de Bloques (GB)

  26. Estructura Física de un SF EXT2 • Los GB ayudan a mantener la información relacionada físicamente cercana en el disco, simplificando las tareas de gestión. • Todos los grupos de bloques tienen el mismo tamaño y están colocados de manera secuencial. • De esta manera se reduce la fragmentación externa.

  27. Estructura Física de un SF EXT2 Cada GB se descompone a su vez en distintos elementos: • Una copia del superbloque • Una copia de la tabla de descriptores de grupo • Un bloque de bitmap para los bloques • Un bloque de bitmap para los i-nodos • Una tabla de i-nodos • Bloques de datos

  28. DISCO 0 1024 2048 SECTOR BOOT SUPERBLOQUE El Superbloque • Contiene las informaciones de control del sistema de archivos • Se sitúa al principio del sistema de archivos en disco. Se encuentra en el offset fijo 1024 del disco y ocupa 1024 bytes • El superbloque contiene una descripción del tamaño y forma del sistema de archivos • Existe una copia del mismo en cada GB

  29. Estructura del superbloque • Es almacenado en una estructura denominada ext2_super_block, definida en el archivo <linux/ext2_fs.h> • Hay tres tipos de información almacenada en la estructura del superbloque: • Parámetros fijos • Parámetros del sistema modificables • Información sobre el estado del sistema de ficheros

  30. Parámetros fijos del superbloque

  31. Parámetros modificables • Existen parámetros que pueden ser modificados por el usuario durante el funcionamiento del SF

  32. Parámetros de Información sobre el estado del sistema de ficheros • El sistema va modificando sus valores en función del estado en que se encuentre

  33. Estructura del descriptor de grupo • Cada grupo de bloques, contiene una copia del superbloque, así como una copia de descriptores de grupos • Estos descriptores contienen las coordenadas de las estructuras de control presentes en cada grupo • Los descriptores de grupo se colocan todos juntos, formando así la tabla de descriptores de grupo • En el fichero de cabecera linux/ext2_fs.h se encuentra la definición de la estructuraext2_group_desc, que define el descriptor de grupo

  34. Estructura del descriptor de grupo

  35. Estructura del descriptor de grupo • Todos estos elementos son creados en el momento de creación del sistema de ficheros • bg_block_bitmap y bg_inode_bitmap contienen el número de bloque del bitmap de asignación de bloques y del bitmap de asignación de i-nodos respectivamente • Los campos bg_free_blocks_count, bg_free_inodes_count y bg_used_dirs_count mantienen información estadística sobre el uso de estos recursos en el GB

  36. Tratamiento de errores en EXT2 • EXT2 no realiza un tratamiento del error propiamente dicho • Cualquier error ha de ser identificado por el kernel, quien debe lanzar programas de chequeo como e2fsck, debugfs ó EXT2ED • Estos programas consultan s_state (bit limpio), que está a 0 con el sistema montado y a 1 cuando se desmonta • Un error común es el apagado del sistema sin desmontar los SF montados • Causa que el s_state sea 0 en el próximo arranque -> el kernel lanza fsck • s_errors define el comportamiento del sistema en caso de darse un error: • 1 -> se ignora el error • 2 -> el kernel remontará como sólo lectura • 3 -> se entra en un kernel panic

  37. Tratamiento de errores en EXT2 • Un error común es el apagado del sistema sin desmontar los SF montados • Causa que el s_state sea 0 en el próximo arranque -> el kernel lanza fsck • El chequeo es necesario, ya que se podían estar realizando escrituras en disco en el momento del apagado • Metadatos o datos de usuario • s_mnt_count, s_max_mnt_count, s_lastcheck y s_checkinterval, son campos que pueden comprobar estos programas, para lanzar revisiones automáticas

  38. Operaciones vinculadas al SF • Las operaciones sobre el superbloque para EXT2 se implementan en el archivo fuente fs/ext2/super.c • El VFS realiza la correspondencia entre las funciones llamadas por procesos y la específica para ese SF. P. ej.: ext2_write_inode -> write_inode • El siguiente array de punteros a funciones, indica esta correspondencia staticstruct super_operations ext2_sops = { ext2_read_inode, NULL, ext2_write_inode, ext2_put_inode, ext2_put_super, ext2_write_super, ext2_statfs,ext2_remount};

  39. EXT2_PUT_SUPER • ¿Para qué sirve? • Implementa put_super para el SF EXT2 • Llamada por el VFS • Se utiliza cuando un SF se desmonta • Modo de funcionamiento • Marca los bloques modificados para actualizarlos a disco desde la memoria intermedia (mark_buffer_dirty) • Libera memorias intermedias y punteros, tanto usadas por descriptores como por los mapas de bits (de i-nodos y bloques) • Libera memoria intermedia que contiene al superbloque • La función usada para liberar memoria es brelse y para liberar punteros kfree_s

  40. EXT2_PUT_SUPER void ext2_put_super (struct super_block *sb) { int db_count; int i; /* Se indica que hay que actualizar el SB en disco */ if (!(sb->s_flags & MS_RDONLY)) { sb->u.ext2_sb.s_es->s_state = sb->u.ext2_sb.s_mount_state; mark_buffer_dirty(sb->u.ext2_sb.s_sbh, 1); } /* Libera las memorias que contienen los descriptores del FS */ db_count = sb->u.ext2_sb.s_db_per_group; for (i = 0; i < db_count; i++) if (sb->u.ext2_sb.s_group_desc[i]) brelse (sb->u.ext2_sb.s_group_desc[i]); /* Libera los punteros a esas memorias */ kfree_s (sb->u.ext2_sb.s_group_desc, db_count * sizeof (struct buffer_head *));

  41. EXT2_PUT_SUPER /* Libera las memorias asociadas a los bitmaps de i-nodos */ for (i = 0; i < EXT2_MAX_GROUP_LOADED; i++) if (sb->u.ext2_sb.s_inode_bitmap[i]) brelse (sb->u.ext2_sb.s_inode_bitmap[i]); /* Libera las memorias asociadas a los bitmaps de bloques */ for (i = 0; i < EXT2_MAX_GROUP_LOADED; i++) if (sb->u.ext2_sb.s_block_bitmap[i]) brelse (sb->u.ext2_sb.s_block_bitmap[i]); /* Libera la memoria que contiene el superbloque */ brelse (sb->u.ext2_sb.s_sbh); return; }

  42. EXT2_PARSE_OPTIONS • ¿Para qué sirve? • Hace un análisis de las opciones de montaje pasadas por parámetro • Modo de funcionamiento • Comprueba si se han pasado opciones • Comprueba cada una de las opciones pasadas por parámetro • Devuelve: • 1 si es correcto • 0 en caso contrario

  43. EXT2_SETUP_SUPER • ¿Para qué sirve? • Inicializa el descriptor del SB a partir del SB del disco • Se llama cuando se (re)monta el SF • Modo de funcionamiento • Comprueba que la versión del SB no es mayor que la máxima • Comprueba que la última vez se desmontó adecuadamente • Si no, se recomienda ejecutar e2fsck • Se incrementa el número de veces que ha sido montado el SF • Se actualiza la fecha de modificación • Se indica la necesidad de actualización a disco

  44. EXT2_SETUP_SUPER static void ext2_setup_super (struct super_block * sb, struct ext2_super_block * es) { /* Si la versión de SB > máxima versión permitida: error */ if (es->s_rev_level > EXT2_MAX_SUPP_REV) { printk ("EXT2-fs warning: revision level too high, forcing read/only mode\n"); sb->s_flags |= MS_RDONLY; } /* Si es escribible */ if (!(sb->s_flags & MS_RDONLY)) { /* Adecuadamente desmontado la última vez? */ if (!(sb->u.ext2_sb.s_mount_state & EXT2_VALID_FS)) printk ("EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended\n"); /* Se indica que el sistema ha sido montado */ es->s_state &= ~EXT2_VALID_FS;

  45. EXT2_SETUP_SUPER /* Se incrementa el nº de veces que se ha montado el FS */ if (!es->s_max_mnt_count) es->s_max_mnt_count = EXT2_DFL_MAX_MNT_COUNT; es->s_mnt_count++; /* Se actualiza la fecha de modificación */ es->s_mtime = CURRENT_TIME; /* Se indica que hay que actualizar en disco */ mark_buffer_dirty(sb->u.ext2_sb.s_sbh, 1); sb->s_dirt = 1; /* Opciones de depuración y chequeo */ if (test_opt (sb, DEBUG)) printk ("[EXT II FS %s, %s, bs=%lu, fs=%lu, gc=%lu, bpg=%lu, ipg=%lu, mo=%04lx]\n", EXT2FS_VERSION, EXT2FS_DATE, sb->s_blocksize,sb->u.ext2_sb.s_mount_opt); } }

  46. EXT2_CHECK_DESCRIPTORS • ¿Para qué sirve? • Comprueba los descriptores de grupo leídos del disco • Modo de funcionamiento: • Comprueba, para cada descriptor: • Bloques de bitmap (i-nodo y bloque) • Tabla de i-nodos • Están contenidos en el grupo • Devuelve: • 1 si no hay errores • 0 si hay algún error

  47. EXT2_CHECK_DESCRIPTORS static int ext2_check_descriptors(struct super_block * sb) { int i; int desc_block = 0; unsigned long block = sb->u.ext2_sb.s_es->s_first_data_block; struct ext2_group_desc * gdp = NULL; ext2_debug ("Checking group descriptors"); /* Se recorren todos los descriptores de grupos */ for (i = 0; i < sb->u.ext2_sb.s_groups_count; i++) { /* Se selecciona un descriptor de Grupo de Bloques */ if ((i % EXT2_DESC_PER_BLOCK(sb)) == 0) gdp = (struct ext2_group_desc *) sb->u.ext2_sb.s_group_desc[desc_block++]->b_data;

  48. EXT2_CHECK_DESCRIPTORS /* ¿Bitmap de bloque contenido en el grupo? */ if (gdp->bg_block_bitmap < block || gdp->bg_block_bitmap >= block + EXT2_BLOCKS_PER_GROUP(sb)){ ext2_error (sb, "ext2_check_descriptors", "Block bitmap for group %d“" not in group (block %lu)!", i, (unsigned long) gdp->bg_block_bitmap); return 0; } /* ¿Bitmap de i-nodo contenido en el grupo? */ if (gdp->bg_inode_bitmap < block || gdp->bg_inode_bitmap >= block + EXT2_BLOCKS_PER_GROUP(sb)){ ext2_error (sb, "ext2_check_descriptors", "Inode bitmap for group %d" " not in group (block %lu)!",i, (unsigned long) gdp->bg_inode_bitmap); return 0; }

  49. EXT2_CHECK_DESCRIPTORS /* tabla de i-nodos está contenida en el grupo? */ if (gdp->bg_inode_table < block || gdp->bg_inode_table + sb->u.ext2_sb.s_itb_per_group >= block + EXT2_BLOCKS_PER_GROUP(sb)) { ext2_error (sb, "ext2_check_descriptors", "Inode table for group %d" " not in group (block %lu)!", i, (unsigned long) gdp->bg_inode_table); return 0; } block += EXT2_BLOCKS_PER_GROUP(sb); gdp++; } /* Si no hubo errores, se devuelve 1 */ return 1; }

  50. EXT2_READ_SUPER • ¿Para qué sirve? • Lee del disco el SB del SF a montar • Se llama al montar un SF • Devuelve un puntero al contenido del SB o NULL • Modo de funcionamiento • Comprobamos las opciones de montaje (parse_options) • Se lee el SB desde el disco y se guarda en memoria • Se comprueba su validez (s_magic) y otras características • Comprobamos si el modo (lect/esc) esta permitido • Inicializa y comprueba el tamaño del bloque • Incorrecto: se libera y se lee de nuevo el SB • Inicializa algunos campos del SB • Comprobamos que se va a montar un EXT2 (número mágico)

More Related